我想将文件从 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 直接与第二台服务器建立连接。可以像这样链接更多服务器。