以下命令按预期工作。
ssh [email protected] "ssh [email protected] 'cat test.txt'" > /home/shantanu/test.txt
我需要做的是复制整个目录而不是单个文件。
是否可以将 rync 与 SSH 隧道一起使用?
答案1
答案2
您可以使用scp
它复制单个或多个文件,也可以使用rsync
ssh 传输:
scp -r localdirectoryname username@hostname:/remotepath
和
rsync -av localdirectory username@hostname:/remotepath
这两个程序也反过来工作,以远程部分作为原点,本地作为目的地。
参见man scp
和man 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