当 SSH 接受用户名/主机名组合时,为什么 SCP 不接受它?

当 SSH 接受用户名/主机名组合时,为什么 SCP 不接受它?

我习惯ssh通过 Cyber​​Ark 登录 Linux 主机,这就是用户名/主机名组合的原因:DB6164@DB6164CP#[email protected]#[email protected]

以下ssh命令有效:

$ /usr/bin/ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no DB6164@DB6164CP#[email protected]#[email protected]

但是,以下scp命令失败:

$ /usr/bin/scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no DB6164@DB6164CP#[email protected]#[email protected]:/tmp/file.txt file.txt
DB6164@DB6164CP#[email protected]#22: invalid user name

如果我删除主机名中的“#”,则scp停止抱怨,但 Cyber​​Ark 会失败。

我还尝试使用 的scpURI 形式: scp://[user@]host[:port][/path]:

$ /usr/bin/scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no scp://DB6164@DB6164CP#[email protected]#[email protected]/tmp/file.txt file.txt
scp://DB6164@DB6164CP#[email protected]#[email protected]/tmp/file.txt file.txt: invalid uri

但这也失败了。

为什么会scp失败,什么时候ssh会成功,以及如何使上述scp命令起作用?

更新:我需要对多个主机(通过 Cyber​​Ark 连接到)执行上述操作。

答案1

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

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

答案2

通过实用的解决方案回避您提出的问题,您可以为此目标设置默认映射,这将简化所有ssh传输用途。

我将分成用户和 Cyber​​Ark 代理,最终目标主机为.如果不正确,请相应地调整下面的示例。DB6164@DB6164CP#[email protected]#[email protected]DB6164@DB6164CP#[email protected]#22PsmpDblanVip.example.netDB6164CP

编辑(或创建)文件~/.ssh/config,并在文件末尾添加以下内容:

########################################################################
# CyberArk proxy
#
Host DB6164CP
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
        Hostname PsmpDblanVip.example.net
        User DB6164@DB6164CP#[email protected]#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#[email protected]#22

并像这样引用目标

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

您可以根据需要使用%rand %h- 如果您始终有固定的用户名但主机可变,请放置一个固定字符串代替%r(对于您原来的问题场景)

相关内容