我正在尝试找出一种方法,让我能够访问 SFTP 服务器上的文件,而我无法从本地计算机访问这些文件。目前,我必须通过 SSH 连接到远程服务器(它位于最终 SFTP 服务器将接受的某个 IP 块中),然后从那里通过 SFTP 连接到目标服务器。从那里,我找到get
我感兴趣的文件,从而将它们放到中间服务器,从那里我可以通过 Samba 共享或直接获取文件scp
。我也以相反的方式工作,我将文件放到中间人身上,通过 SSH 连接到它,然后通过 SFTP 连接到目的地并将put
它们放入适当的文件夹中。
我的目标是缩短这个时间。不幸的是,我的机器是 Windows(我使用 KiTTy 和/或 Cygwin),我无法以任何方式修改中间服务器(或目标服务器)。我愿意使用命令行或 GUI 程序,只要它有效并且免费。
有任何想法吗?
答案1
本质上,没有 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 套件)。我猜 sshconfig
文件的默认位置不同(我必须谷歌搜索),但我确信它的工作原理大致相同。
请注意,要使此功能正常工作,您只需要nc
在中间服务器(第一跳)上使用“netcat()”。它是 linux/UNIX[1] 上随处可见的工具;如果您首先可以将其复制到那里,那么构建一个应该可以正常工作的静态链接版本是相当容易的。
[1] 请注意,由于存在一些不同的版本,因此可能需要删除 -w 选项或以不同的方式拼写
答案2
我不会将其设置为接受的答案,因为如果没有@sehe 和@Jakub,我永远也找不到它,但是我发现它可以简化一切......
WinSCP 具有使用内置 SSH 隧道的功能。我不知道这个功能是什么时候出现的,但不知为何我以前从未注意到它。
答案3
我的一个建议是使用 putty(从您的 Windows 框)创建一个 socks 代理,然后通过它代理您的 SFTP 客户端(例如 Filezilla sftp)。
您不需要做任何特别的事情,只需打开您的 putty socks5 代理,打开 filezilla,然后将您的文件通过 sftp 传输到目标服务器即可。
(you ==socks5 proxy==> middle server) ==> destination server