首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当SSH接受用户名/主机名组合时,SCP为什么不接受它?

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

Unix & Linux用户
提问于 2021-01-13 11:47:04
回答 2查看 1.3K关注 0票数 1

我使用ssh通过CyberArk登录到Linux主机,这就是用户名/主机名组合的原因:DB6164@DB6164CP#example.net@y96553.example.net#22@PsmpDblanVip.example.net

下面的ssh命令可以工作:

代码语言:javascript
复制
$ /usr/bin/ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no DB6164@DB6164CP#example.net@y96553.example.net#22@PsmpDblanVip.example.net

但是,以下scp命令失败:

代码语言:javascript
复制
$ /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]

代码语言:javascript
复制
$ /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连接)执行上述操作。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2021-01-13 13:41:29

代码语言:javascript
复制
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
票数 2
EN

Unix & Linux用户

发布于 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,并在文件末尾添加这些内容:

代码语言:javascript
复制
########################################################################
# 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

代码语言:javascript
复制
ssh -n DB6164CP id
scp -p /etc/hosts DB6164CP:/tmp/my_hosts

可以向Host条目添加额外的主机名和模式,因此,如果有多个目标通过同一个代理主机,则可以定义以下内容

代码语言:javascript
复制
Host DB6164CP OTHER*
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
        Hostname PsmpDblanVip.example.net
        User %r@%h#example.net@y96553.example.net#22

然后引用这样的目标

代码语言:javascript
复制
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 (与您最初的问题场景一样)。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/628961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档