为了从家里 ssh 进入我的工作计算机(我们称之为它),C
我必须执行以下操作:
ssh -t user@B ssh C
B 是我可以从家里连接到的服务器,但 C 只能从 B 连接到。这工作正常。
如果我想使用 复制 C 上的文件到我的家用计算机scp
,我需要从我的家用计算机执行什么命令?
答案1
我建议您的以下内容.ssh/config
:
Host C
User user
ProxyCommand ssh -W %h:%p user@B
如果主机 B 不受信任并且适用于 scp 和 sftp,我也不会更安全。
答案2
如中所述这个答案,您可以使用该ProxyCommand
指令让ssh
主机透明地将您跳到第三个主机:
假设您有以下三个主机:
workstation.example.com
- 这是您正在操作的机器proxy.example.com
- 这是您路由 SSH 流量的机器endpoint.example.com
- 这是您希望流量最终到达的地方
在~/.ssh/config
on 中workstation
,添加以下内容:
Host endpoint
User endpointUser # set this to the username on the endpoint host
HostName endpoint.example.com
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
在proxy
主机上,确保nc
已安装 (netcat)。
然后,在 上workstation
,您可以ssh endpoint
或sftp endpoint
并且您将通过代理主机透明地代理到该计算机。 scp
也会起作用。
答案3
即使您需要使用证书进行身份验证(通常在 AWS 环境中),这也是可行且相对简单的。
下面的命令会将文件从 server2 上的 RemotePath 直接复制到计算机的 localPath 中。在内部,scp 请求通过 server1 进行代理。
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>
如果您使用密码身份验证,请尝试使用
scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>
如果您在两台服务器中使用相同的用户凭据:
scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>