通过双服务器跃点的 SFTP

jos*_*row 16 ssh sftp

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

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

有任何想法吗?

seh*_*ehe 26

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

ssh -o ProxyCommand='ssh myfirsthop nc -w 10 %h %p' mydestination
Run Code Online (Sandbox Code Playgroud)

您可以通过编辑配置文件使其成为默认值,默认情况下 ~/.ssh/config

Host mydestination, mydest2, mydest3
ProxyCommand ssh myfirsthop nc -w 10 %h %p
Run Code Online (Sandbox Code Playgroud)

这然后允许你做

ssh mydestination
scp mydest2:file.txt ./
scp file.txt mydest3:/tmp/
Run Code Online (Sandbox Code Playgroud)

当然,有了这种魔法,你就可以轻松地

mkdir -pv /tmp/mydest3tmp          # create mountpoint
sshfs mydest3:/tmp /tmp/dest3tmp/  # mount :)
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,你会使用 WinSCP,它带有(我认为是 IIRC)PLINK(来自 Putty 套件)。我想 sshconfig文件的默认位置是不同的(我必须用谷歌搜索它),但我确信它的工作原理或多或少是一样的。

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

[1] 请注意,有一些风味,因此 -w 选项可能需要删除/拼写不同


jos*_*row 10

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

WinSCP 能够使用内置的 SSH 隧道。我不知道这个功能什么时候出现,但我以前从未注意到它。

WinSCP 隧道设置