我习惯ssh
通过 CyberArk 登录 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
停止抱怨,但 CyberArk 会失败。
我还尝试使用 的scp
URI 形式: 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
命令起作用?
更新:我需要对多个主机(通过 CyberArk 连接到)执行上述操作。
答案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
传输用途。
我将分成用户和 CyberArk 代理,最终目标主机为.如果不正确,请相应地调整下面的示例。DB6164@DB6164CP#[email protected]#[email protected]
DB6164@DB6164CP#[email protected]#22
PsmpDblanVip.example.net
DB6164CP
编辑(或创建)文件~/.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
您可以根据需要使用%r
and %h
- 如果您始终有固定的用户名但主机可变,请放置一个固定字符串代替%r
(对于您原来的问题场景)