如何从2-deep连接中获取SCP文件

时间:2014-02-06 21:25:24

标签: scp

假设我通过SSH连接到服务器Server1并从那里通过SSH连接到服务器Server2,该服务器只能从Server1的连接访问。下面模拟了此行为的示例终端命令:

[name@mylaptop]$ ssh user@Server1
user@Server1's password:
*** Welcome to Server1! ***
[user@Server1]$ ssh user2@Server2
user2@Server2's password:
*** Welcome to Server2! ***
[user2@Server2]$ 

现在我在file.txt的主目录中有一个名为Server2的文件:

[user2@Server2]$ ls
file.txt
[user2@Server2]$ 

是否可以使用scp使用单个命令将file.txtServer2复制到mylaptop(即无需先将文件复制到Server1 })?

换句话说,这可以比以下更容易完成:

[name@mylaptop]$ ssh user@Server1
user@Server1's password:
*** Welcome to Server1! ***
[user@Server1]$ scp user2@Server2:~/file.txt .
user2@Server2's password:
file.txt                                            100%  690     0.7KB/s   00:00
[user@Server1]$ logout
Connection to Server1 closed.
[name@mylaptop]$ scp user1@Server1:~/file.txt .
user@Server1's password:
file.txt                                            100%  690     0.7KB/s   00:00
[name@mylaptop]$ ls
file.txt

谢谢

3 个答案:

答案 0 :(得分:3)

即使您需要使用证书进行身份验证(在AWS环境中也很常见),这种可能性也相对简单。

以下命令会将remotePathserver2的文件直接复制到您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>

答案 1 :(得分:2)

尝试使用ServerFault上的答案: https://serverfault.com/questions/37629/how-do-i-do-multihop-scp-transfers

答案涵盖了各种各样的ssh。

答案 2 :(得分:1)

您可以使用端口转发: 执行

ssh  -L60000:Server2:22 user@Server1

在一个终端中并保持此过程开放。

然后在另一个终端运行

scp -P 60000 user2@localhost:file.txt .

(您可以用您喜欢的端口号替换60000)