通过中间 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 隧道有用。
我想从另一个站点传输一些数据。他们有一个 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 隧道有用。