Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从远程服务器到另一个远程服务器的SCP_Linux_Ssh_Scp - Fatal编程技术网

Linux 从远程服务器到另一个远程服务器的SCP

Linux 从远程服务器到另一个远程服务器的SCP,linux,ssh,scp,Linux,Ssh,Scp,我有一个服务器“B”,它可以将SCP文件发送到服务器“a”,也可以将SCP文件发送到服务器“C” i、 e。 A、B、C 服务器“A”和服务器“C”无法相互联系。只有服务器B可以同时访问这两个服务器。 我想将文件从a传输到C,服务器B上没有(或最小)存储空间 有没有一种方法可以将文件从a管道传输到C管道,而无需将其存储在B中或只需最少的步骤 谢谢。您可以通过隧道完成: # Open a tunnel to server C $ ssh -L 2222:<server C>:22 -N

我有一个服务器“B”,它可以将SCP文件发送到服务器“a”,也可以将SCP文件发送到服务器“C”

i、 e。 A、B、C

服务器“A”和服务器“C”无法相互联系。只有服务器B可以同时访问这两个服务器。 我想将文件从a传输到C,服务器B上没有(或最小)存储空间

有没有一种方法可以将文件从a管道传输到C管道,而无需将其存储在B中或只需最少的步骤


谢谢。

您可以通过隧道完成:

# 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> 
#打开到服务器C的隧道
$ssh-l2222::22-N-L用户和
#将文件复制到服务器C
$scp-P 2222本地主机:
请注意,隧道在步骤2之后仍在运行。

来自
scp(1)

说明

。。。两个远程主机之间的拷贝 也允许


如果您愿意,您可以在没有scp的情况下执行此操作。登录到计算机“B”并运行以下操作:

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 -'
如果您希望从运行命令,那么类似的操作应该可以:

tar cf - file... | ssh userB@B 'ssh userC@C "cd /dest/dir && tar xvf -" '

脱离主题,但您可以这样做:尝试过这个,但我认为我们的服务器有一些配置阻止它。您可能正在运行不支持它的旧版本。您可能应该添加选项
-3
,以使文件通过本地主机。根据手册“-3份副本在两个远程主机之间通过本地主机传输。如果没有此选项,数据将直接在两个远程主机之间复制。请注意,此选项将禁用进度表。”
tar cf - file... | ssh userB@B 'ssh userC@C "cd /dest/dir && tar xvf -" '