我使用ssh通过CyberArk登录到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如果我删除主机名中的“#”S,那么scp就停止抱怨,但是CyberArk失败了。
我还尝试使用scp的S URI表单: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命令工作?
更新:我需要对多个主机(通过CyberArk连接)执行上述操作。
发布于 2021-01-13 13:41:29
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发布于 2021-01-13 12:22:56
除了使用务实的解决方案提出的问题外,您还可以为这个目标设置一个默认映射,这将简化所有ssh传输用途。
我将DB6164@DB6164CP#example.net@y96553.example.net#22@PsmpDblanVip.example.net拆分为用户DB6164@DB6164CP#example.net@y96553.example.net#22和CyberArk代理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
复制相似问题