Bash

當 SSH 接受時,為什麼 SCP 不接受使用者名/主機名組合?

  • January 13, 2021

我曾經ssh通過 Cyber​​Ark 登錄 Linux 主機,這就是使用者名/主機名組合的原因:DB6164@DB6164CP#example.net@y96553.example.net#22@PsmpDblanVip.example.net

以下ssh命令有效:

$ /usr/bin/ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no DB6164@DB6164CP#example.net@y96553.example.net#22@PsmpDblanVip.example.net

但是,以下scp命令失敗:

$ /usr/bin/scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no DB6164@DB6164CP#example.net@y96553.example.net#22@PsmpDblanVip.example.net:/tmp/file.txt file.txt
DB6164@DB6164CP#example.net@y96553.example.net#22: invalid user name

如果我刪除主機名中的“#”,則scp停止抱怨,但 Cyber​​Ark 失敗。

我也嘗試過使用scp’s URI form: scp://[user@]host[:port][/path]

$ /usr/bin/scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no scp://DB6164@DB6164CP#example.net@y96553.d.net#22@PsmpDblanVip.danskenet.net/tmp/file.txt file.txt
scp://DB6164@DB6164CP#example.net@y96553.d.net#22@PsmpDblanVip.danskenet.net/tmp/file.txt file.txt: invalid uri

但這也失敗了。

為什麼會scp失敗,何時ssh成功,以及如何使上述scp命令起作用?

更新:我需要為幾台主機(通過 Cyber​​Ark 連接)執行上述操作。

scp -o User='foo@bar@baz#quux' host:/rpath lpath

scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
 -o User='DB6164@DB6164CP#example.net@y96553.example.net#22' \
 PsmpDblanVip.example.net:/tmp/file.txt file.txt

使用實用的解決方案繞過您提出的問題,您可以為此目標設置預設映射,這將簡化所有ssh傳輸用途。

DB6164@DB6164CP#example.net@y96553.example.net#22@PsmpDblanVip.example.net分成使用者DB6164@DB6164CP#example.net@y96553.example.net#22和 Cyber​​Ark 代理PsmpDblanVip.example.net,最終目標主機為DB6164CP. 如果不正確,請相應地調整下面的範例。

編輯(或創建)文件~/.ssh/config,並在文件末尾添加以下內容:

########################################################################
# CyberArk proxy
#
Host DB6164CP
       UserKnownHostsFile /dev/null
       StrictHostKeyChecking no
       Hostname PsmpDblanVip.example.net
       User DB6164@DB6164CP#example.net@y96553.example.net#22


########################################################################
# Default
#
Host *
       ForwardX11 yes
       ForwardX11Trusted yes
       Compression yes
       ServerAliveInterval 60

您可能需要調整預設主機的設置,因為這些設置將用於之前未明確定義和匹配的每個連接。(匹配的第一Host部分是使用的部分。)

有了這個配置,你可以簡單地引用你的目標DB6164CP

ssh -n DB6164CP id
scp -p /etc/hosts DB6164CP:/tmp/my_hosts

您可以向條目添加額外的主機名和模式Host,因此如果您有多個目標通過同一個代理主機,您可以定義這個

Host DB6164CP OTHER*
       UserKnownHostsFile /dev/null
       StrictHostKeyChecking no
       Hostname PsmpDblanVip.example.net
       User %r@%h#example.net@y96553.example.net#22

並像這樣引用目標

ssh DB6164@DB6164CP
ssh someOtherUser@OTHERhost1      # Or: ssh -l someOtherUser OTHERhost1
scp DB6164@DB6164CP:file.txt .    # Or: scp -l DB6164 DB6164CP:file.txt

您可以根據需要使用%r%h- 如果您始終擁有固定的使用者名但主機可變,請使用固定字元串代替%r(對於您的原始問題場景)

引用自:https://unix.stackexchange.com/questions/628961