如何通过中间机器进行 scp?

如何通过中间机器进行 scp?

为了从家里 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/configon 中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 endpointsftp 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>

相关内容