我必须sftp到中间服务器吗?


11

我无法直接sftp到特定主机。要将文件从家用计算机移动到主机,必须将文件通过ftp发送到中间主机。ssh进入中间主机;然后将文件sftp到最终目的地。有可能避免这种疯狂吗?

Answers:


28

您可以在本地计算机上创建从中间主机到最终主机的SSH隧道:

ssh user@intermediate -L 2000:final:22 -N

这将在本地主机上打开端口2000,该本地主机将通过中间主机建立隧道,从而直接连接到端口22上的最终服务器。现在,在另一个提示中,使用端口2000上的sftp进行连接,以隧道连接到最终服务器,注意此处指定的用户用于最终主机:

sftp -P 2000 user@localhost

好像这样属于superuser.comserverfault.com


谢谢,我会尝试的;没错,这是错误的论坛;抱歉。

输入user @ localhost密码后,我收到消息:收到的消息太长1131376238
user74094 2011年

14

您可以使用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密钥对消除它。


谢谢戈登。它需要两个密码,然后显示以下消息:收到的消息太长1131376238
user74094 2011年

这听起来像是连接中的某些内容-也许是其中一台主机上的登录脚本,也许是nc-正在通过连接写一些额外的文本,这使sftp感到困惑(请参阅snailbook.com上的此FAQ)。1131376238是ASCII字符“ Conn”的十进制编码,因此可能是类似“正在连接到...”,“已从...连接”或“连接失败”之类的消息。尝试使用ssh而不是sftp进行尝试,看看消息是否可见打印,也许您可​​以知道消息的来源。
戈登·戴维森

SSH工作正常。我还应该提到,我经常遇到这个问题:无法建立主机'xxxxx(<no hostip for proxy command>)的真实性。RSA密钥指纹是37:40:d4:c7:etc.。确定要继续连接(是/否)吗?是
2011年

戈登,非常有用!我将此添加到命令行fu oneliners的文本文件中。万分感谢!
特拉维斯·勒勒伊

exec必要吗?(在这里没有那部分就可以正常工作。)
equaeghe

3

您可以将数据通过管道传输到计算机上运行的ssh进程,然后在中间计算机上运行命令,该命令将读取stdin并将其适当地发送到sftp。

可以在本地计算机的oneliner中完成此操作,尽管ssh的参数引号将需要引起注意。我现在正在打手机,很遗憾,无法键入详细信息。也许其他人可以通过练习来完成此答案!


0

我假设最终的主机已被防火墙保护,我只能猜测可以用来解决该问题的方法。

例如-将ssh从本地计算机公开,然后将ssh公开到第一个主机,然后将ssh公开到第二个主机,然后将sftp从最终主机公开到您的计算机。


0

假设A和B是第一和第二主机。并且要复制的文件是foo

代替sftp,可以使用以下命令

猫foo | ssh一个“猫-> foo”

现在,您可以将其中的2个菊花链在一起

猫foo | ssh A“ cat-| ssh B \” cat-> foo \“”


我喜欢它,所以尝试了它。输入了A的密码,然后产生了消息:主机密钥验证失败。
user74094 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.