通过中间 SSH 服务器使用 SFTP 传输大型 file/directory

Transfer a large file/directory with SFTP via an intermediate SSH server

我想从另一个站点传输一些数据。他们有一个 SSH 服务器,我通过它连接到那个站点。 连接后,我对内部机器(我无法直接从我的机器访问)使用 SFTP 命令并获取数据。

我现在想传输一个大的 bz2 文件。

问题是我使用的 SSH 机器(连接数据)只能容纳大约 50GB。

所以这就是我通常所做的(如下),但现在我想通过 SSH 机器传输此 bz2 文件中的所有子文件夹。

当前步骤如下:

ssh george@ssh.abc.com

sftp george@bigserver.abc.com

cd /temp/george

get file.txt

bye
exit

现在从我的本地机器:

sftp george@ssh.abc.com
get file.txt
bye

如果有帮助的话,我的数据文件中还有一个 UNZIPPD 文件夹。

我想做的事情:

1) 我想通过 SSH 服务器将整个文件夹传输到我的本地计算机,但正如我提到的,SSH 服务器一次只能容纳 50GB。 我也想这样做,这样我就可以启动它,而不必逐个文件地手动执行(就像现在一样)。

2) 也不想中途失去 SSH/SFTP 连接。

任何关于我可以使用的脚本的建议都将不胜感激。

使用

rsync -PvL george@bigserver.abc.com:/temp/george/file.txt .

它使用 ssh,而且如果连接中断,您可以重新运行该命令并从您离开的地方继续

ssh(至少在 openssh 实现中),允许您设置端口转发,连接时:

ssh -L 4444:bigserver.abc.com:22 george@ssh.abc.com

这将在本地打开端口 4444。

现在,连接到 localhost:4444 实际上将通过您的 SSH 隧道转发:

sftp -P 4444 george@localhost

但是请注意,您必须加倍确保主机密钥符合您的预期,因为您的本地 SSH 不需要 bigserver 的 SSH 密钥。

1st - sftp 有 -r 标志来获取命令以递归方式获取目录。

2nd - 查看 ssh 转发(即标记 -R 和 -L 到 ssh 命令)。这个想法是使用 ssh.abc.com 作为代理。试试这个作为参考:http://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples.html.

3rd - 如果你在远程机器上有 tar 你可能想在服务器上创建一个 tar tar 让它建立 ssh 连接然后在 tar它的本地方面。 http://www.cyberciti.biz/faq/howto-use-tar-command-through-network-over-ssh-session/。可能对 ssh 隧道有用。