使用 ssh 隧道复制目录

使用 ssh 隧道复制目录

以下命令按预期工作。

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

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

是否可以将 rync 与 SSH 隧道一起使用?

答案1

您可以用管道输送焦油。

例如。

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

答案2

您可以使用scp它复制单个或多个文件,也可以使用rsyncssh 传输:

scp -r localdirectoryname username@hostname:/remotepath

rsync -av localdirectory username@hostname:/remotepath 

这两个程序也反过来工作,以远程部分作为原点,本地作为目的地。

参见man scpman rsync

编辑

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

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

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

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

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

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

但必须注意,在输入您的凭证时soak@localhost实际上指向。[email protected]

编辑 2,现在具有 rsync

正如您特别询问的有关 rsync 的问题,以下是如何使用 rsync 代替 scp。它需要启用与scp变体相同的端口转发:

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

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

答案3

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

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

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

这分配了一个套接字来监听 localhost 上的端口 2302。每当有连接连接到此端口时,它将被转发到10.199.199.191:22

因此,您可以使用以下命令将文件夹复制10.199.199.191到您的机器上:

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

答案4

ssh 的 ProxyCommand 也可用。

不死

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

相关内容