通过中间SSH服务器使用SFTP传输大型文件/目录

时间:2015-02-08 18:30:46

标签: ssh sftp

我想从其他网站传输一些数据。他们有一个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连接。

对我可以使用的脚本的任何建议都将非常感激。

3 个答案:

答案 0 :(得分:2)

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密钥。

答案 1 :(得分:1)

使用

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

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

答案 2 :(得分:0)

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

第二 - 看看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

第3 - 如果你在远程机器上有tar,你可能想在服务器上创建一个tar,将它定位到ssh连接,然后在本地端解压缩。 http://www.cyberciti.biz/faq/howto-use-tar-command-through-network-over-ssh-session/。可能对ssh隧道很有用。