使用ssh隧道复制目录

以下命令按预期工作。

ssh [email protected] "ssh [email protected] 'cat test.txt'" > /home/shantanu/test.txt 

我需要做的是复制整个目录,而不是一个单一的文件。

是否有可能使用SSH隧道的rync?

你可以pipe道焦油。

例如。

 ssh [email protected] "ssh [email protected] 'tar cf - test_directory'" | tar xf - 

您可以使用scp来复制单个或多个文件,也可以使用带有ssh传输的rsync

 scp -r localdirectoryname username@hostname:/remotepath 

 rsync -av localdirectory username@hostname:/remotepath 

这两个程序也相反,远程部分作为起点,本地作为目的地。

请参阅man scpman rsync

编辑

如果您确实需要中间服务器,则可以使用ssh端口转发:

在一个shell中,使用此命令build立一个端口转发:

 ssh -NL 10022:10.199.199.91:22 [email protected] 

这将本地计算机上的端口10022连接到10.199.199.91上的端口22,但不会打开一个shell,而只是阻塞,直到您终止它。

之后,在另一个shell / xterm上,您可以使用其中一个

 scp -r -P 10022 localpath soak@localhost:/remotepath 

但必须注意,在input凭据时, soak@localhost实际上指向[email protected]

编辑2,现在具有rsync

正如你所特别提到的rsync,这里是如何使用rsync而不是scp。 它需要启用与scp变体相同的端口转发:

 rsync -av --rsh="ssh -p 10022" localpath soak@localhost:/remotepath 

并再次记住,您实际上连接到[email protected]

另一种方法是使用SSH端口转发 。

首先,在计算机上运行以下命令:

 $ ssh -N -f -L 2302:10.199.199.191:22 [email protected] 

这分配了一个套接字来侦听本地主机上的端口2302。 每当一个连接连接到这个端口,它将被转发到10.199.199.191:22

所以你可以将10.199.199.191上的一个文件夹复制到你的机器上:

 $ scp -r -P 2302 soak@localhost:/path/to/folder /path/to/destination/dir 

也可以使用ssh的ProxyCommand。

不朽 :

 Host internal.hostname.tld internal User merdely HostName internal.hostname.tld ProxyCommand ssh [email protected] nc %h %p 2> /dev/null