如何将文件从嵌套的 ssh 会话复制到另一个 ssh 会话中的本地主机?

如何将文件从嵌套的 ssh 会话复制到另一个 ssh 会话中的本地主机?

我想将文件从 ssh 会话复制到我的本地主机。问题是无法从我的本地主机访问 ssh 会话,我需要先连接到中间 ssh (ssh1) 会话,然后访问相关的 ssh 会话 (SSH2的)。

到目前为止,我尝试使用SCP这样 :

scp username@ssh1:username@ssh2:file .

这将连接到 ssh1,但接下来不会连接到 ssh2,而是搜索文件用户名@ssh2:文件。当然,这是可行的:

1. ssh username@ssh1
2. scp username@ssh2:file .
3. exit 
4. scp username@ssh1:file .

但这很耗时,尤其是输入密码时。有没有更好的方法?

答案1

是的,有更好的方法。使用 SSH(较新版本)的主会话功能。它会创建控制会话,因此您在一段时间内无需进行身份验证。

描述如下:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

可能您需要做的就是编辑/创建 .ssh/config。在其中添加控制主会话的定义:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

然后您可以指定您的第一个跳转服务器定义,例如:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

第二跳将使用第一跳服务器作为代理:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

不要忘记创建~/.ssh/cm_socket 目录并且配置权限应该是 644。

然后,您应该能够通过 SSH 或 SCP 直接与第二台服务器建立连接。可以像这样链接更多服务器。

相关内容