通过双服务器跳的SFTP


15

我正在尝试一种方法,以允许我访问SFTP服务器上的文件,而不是无法从本地计算机访问的文件。当前,我必须SSH到远程服务器(它在最终SFTP服务器将接受的某个IP块中),然后从那里到目标服务器。从那里,我get将自己感兴趣的文件放到中间人服务器上,从中可以通过Samba共享或通过Direct获得文件scp。我也反过来说,将文件放到中间人上,SSH放到中间人上,然后SFTP到目的地,然后将put它们放到适当的文件夹中。

我的目标是缩短这一时间。不幸的限制是我的计算机是Windows(我使用KiTTy和/或Cygwin),并且无法以任何方式修改中间人服务器(或目标服务器)。我愿意使用命令行或GUI程序,只要它可以工作并且免费。

有任何想法吗?

Answers:


24

本质上,没有GUI或其他便利:

ssh -o ProxyCommand='ssh myfirsthop nc -w 10 %h %p' mydestination

您可以通过编辑配置文件(默认为〜/ .ssh / config)将其设置为默认值

Host mydestination, mydest2, mydest3
ProxyCommand ssh myfirsthop nc -w 10 %h %p

然后,您可以这样做

ssh mydestination
scp mydest2:file.txt ./
scp file.txt mydest3:/tmp/

当然,有了这种魔法,您可以轻松

mkdir -pv /tmp/mydest3tmp          # create mountpoint
sshfs mydest3:/tmp /tmp/dest3tmp/  # mount :)

在Windows上,您将使用WinSCP,它带有(我认为是IIRC)PLINK(来自Putty套件)。我想ssh config文件的默认位置是不同的(我必须在google上找到它),但是我确定它的工作原理大致相同。

请注意,您唯一要做的就是nc在中间服务器(第一跳)上使用“ netcat()”。它是linux / UNIX上无处不在的工具[1];构建静态链接的版本很容易,如果您可以首先将其复制到该版本,则该版本应该可以使用。

[1]请注意,其中有些味道,因此-w选项可能需要以不同的方式放置/拼写


1
您长官,不知道这让我多么高兴:)完美!
josh.trow

@ josh.trow:不,但是很高兴您告诉我:)任何时候
sehe 2011年

尽管@ josh.trow已经发现,WinSCP 内置了隧道功能(请参阅其他答案),但是如果您需要通过外部应用程序实际使用隧道设置,则可以参考以下指南:winscp.net/eng/docs/ guide_tunnel
Martin Prikryl

9

我不会将其设置为可接受的答案,因为如果没有@sehe和@Jakub,我将永远找不到它,但这就是我发现的一切简化了...

WinSCP可以使用内置的SSH隧道。我不知道此功能何时到达,但我从未以某种方式注意到它。

WinSCP隧道设置



也可以在filezilla中使用!
Hayden Thring '16

此功能仅允许单个隧道...如何添加第二个隧道?
zeetit '16

@zeetit然后,您必须使用外部隧道。在WinSCP指南中,对所有隧道选项进行了说明。
Martin Prikryl

2

我的建议之一是使用腻子(在Windows框中)创建一个袜子代理,然后在该代理上代理SFTP客户端(例如Filezilla sftp)。

您无需执行任何特殊操作,只需打开腻子socks5代理,然后打开filezilla,然后将文件sftp传送到目标服务器。

(you ==socks5 proxy==> middle server) ==> destination server

看来您正在解决一个不同的问题,确实是一个更棘手的问题。OP的问题是最终目标无法从客户端路由-出站SSH流量正常。(我相信您的解决方案需要通过隧道“隧道” SSH流量吗?
2011年

@sehe ..什么?您设置了SSH socks 5代理(到中间盒的ssh隧道),然后只需将SFTP流量代理到目标盒(通过伪装成中间服务器)即可。我要解决什么其他问题?
Jakub
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.