假设我通过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.txt
从Server2
复制到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
谢谢
答案 0 :(得分:3)
即使您需要使用证书进行身份验证(在AWS环境中也很常见),这种可能性也相对简单。
以下命令会将remotePath
上server2
的文件直接复制到您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)