![如何将文件从嵌套的 ssh 会话复制到另一个 ssh 会话中的本地主机?](https://linux22.com/image/1545213/%E5%A6%82%E4%BD%95%E5%B0%86%E6%96%87%E4%BB%B6%E4%BB%8E%E5%B5%8C%E5%A5%97%E7%9A%84%20ssh%20%E4%BC%9A%E8%AF%9D%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%20ssh%20%E4%BC%9A%E8%AF%9D%E4%B8%AD%E7%9A%84%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%EF%BC%9F.png)
我想将文件从 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 直接与第二台服务器建立连接。可以像这样链接更多服务器。