我有一个服务器“B”,它可以将SCP文件传入/传出服务器“A”,也可以将SCP文件传入/传出服务器“C”。
即。 A< -----> B< -----> ç
服务器“A”和服务器“C”无法相互联系。只有服务器B可以同时到达。 我想在服务器B上没有(或最小)存储的情况下将文件从A传输到C.
是否有办法将文件从A传输到C而不将其存储在B中或使用最少的步骤?
感谢。
答案 0 :(得分:4)
来自scp(1)
:
<强>描述强>
...两个远程主机之间的复制 也是允许的。
scp host1:foo.txt host2:foo.txt
答案 1 :(得分:1)
你可以用隧道做到这一点:
# Open a tunnel to server C
$ ssh -L 2222:<server C>:22 -N -l user <server B> &
# Copy the file to server C
$ scp <file> -P 2222 localhost:<remote filename>
请注意,在步骤2之后隧道仍在运行。
答案 2 :(得分:1)
如果您愿意,可以在没有scp的情况下执行此操作。登录机器&#39; B&#39;并运行:
ssh userA@A 'cat /source/file' | ssh userC@C 'cat > /dest/file'
您应该设置其中一个或两个ssh实例以使用密钥进行登录,这样您就不会同时通过两个ssh实例提示输入密码。
如果您希望文件复制过程更加防错,或者您希望一次传输多个文件,则可以使用tar
:
ssh userA@A 'cd /source/dir && tar cf - file1 file2...' |
ssh userC@C 'cd /dest/dir && tar xvf -'
如果你宁愿从A运行命令,那么这样的事情应该有效:
tar cf - file... | ssh userB@B 'ssh userC@C "cd /dest/dir && tar xvf -" '