Answers:
您可以在本地计算机上创建从中间主机到最终主机的SSH隧道:
ssh user@intermediate -L 2000:final:22 -N
这将在本地主机上打开端口2000,该本地主机将通过中间主机建立隧道,从而直接连接到端口22上的最终服务器。现在,在另一个提示中,使用端口2000上的sftp进行连接,以隧道连接到最终服务器,注意此处指定的用户用于最终主机:
sftp -P 2000 user@localhost
好像这样属于superuser.com或serverfault.com。
您可以使用SFTP的ProxyCommand选项通过SSH连接(类似于WhiteFang34的答案,但通过SSH连接的stdin&stdout而不是转发的本地TCP端口)透明地建立SFTP连接的隧道:
sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost
(假设中间主机已将netcat安装为/ usr / bin / nc -如果未安装,则可能必须找到/安装将stdin&stdout网关连接到TCP会话的某种等效方法。)
这个选项的真正酷之处在于您可以将其添加到〜/ .ssh / config文件中,从而使其透明:
Host finalhost
ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null
使用该条目,您可以将sftp,scp和ssh用作finalhost,它将自动调用隧道。唯一不透明的部分是它将提示您输入两个密码(intermediatehost,后跟finalhost),但是如果您愿意,也可以使用SSH密钥对消除它。
exec
必要吗?(在这里没有那部分就可以正常工作。)
我假设最终的主机已被防火墙保护,我只能猜测可以用来解决该问题的方法。
例如-将ssh从本地计算机公开,然后将ssh公开到第一个主机,然后将ssh公开到第二个主机,然后将sftp从最终主机公开到您的计算机。
假设A和B是第一和第二主机。并且要复制的文件是foo
代替sftp,可以使用以下命令
猫foo | ssh一个“猫-> foo”
现在,您可以将其中的2个菊花链在一起
猫foo | ssh A“ cat-| ssh B \” cat-> foo \“”