Linux 在两个远程主机之间复制数据-它是如何工作的?
我需要将数据从主机A复制到主机C。它们之间没有连接。唯一的办法是A B然后B C。 为了以更快的方式实现这一点,我在B(中间服务器)上使用了以下命令: 这是可行的,但我不理解这里的一些东西,我真的很想理解。 此命令中隐藏的是严格复制的数据吗 我看到了正常的ssh连接,只在两个主机名上更改目录和打包/解包文件,然后在另一个主机名上用管道分隔。 执行后没有文件存储在主机名_B上,此处也没有使用scp。Linux 在两个远程主机之间复制数据-它是如何工作的?,linux,shell,aix,Linux,Shell,Aix,我需要将数据从主机A复制到主机C。它们之间没有连接。唯一的办法是A B然后B C。 为了以更快的方式实现这一点,我在B(中间服务器)上使用了以下命令: 这是可行的,但我不理解这里的一些东西,我真的很想理解。 此命令中隐藏的是严格复制的数据吗 我看到了正常的ssh连接,只在两个主机名上更改目录和打包/解包文件,然后在另一个主机名上用管道分隔。 执行后没有文件存储在主机名_B上,此处也没有使用scp。 在AIX上完成,但在Linux上也可以 它们不是被管道分开的,而是与管道连接在一起的。它的基本B连
在AIX上完成,但在Linux上也可以 它们不是被管道分开的,而是与管道连接在一起的。它的基本B连接到A,对文件进行tar,并将文件流式传输到主机C,在主机C上执行tar xf,以便解压文件。好的,它们不是由管道分隔的,而是与管道连接的。它的基本B连接到A,对文件进行tar,并将文件流式传输到主机C,在主机C上执行tar xf,以便解压文件。好的,它们不是由管道分隔的,而是与管道连接的。它的基本B连接到A,对文件进行tar,并将文件流式传输到主机C,在主机C上执行tar xf,以便解压文件。好的,它们不是由管道分隔的,而是与管道连接的。它的基本B连接到A,对文件进行tar,并将文件流式传输到主机C,在主机C上执行tar xf,以便解压文件。
foo | bar
表示“从foo
获取所有正常输出,并将其作为输入传递到bar
”(“正常”,因为还有“错误”输出)
无论foo
或bar
是什么,只要第一个将其输出写入stdout
(也称为“文件句柄1”),第二个可以读取stdin
(或文件句柄0)
SSH做了一些类似的事情,但涉及套接字。因此,它连接到另一台计算机上的SSH服务器(通过),并将远程计算机上运行的命令的stdin/out/err
重定向到本地执行的SSH
命令的stdin/out/err
因此,如果您执行sshuser@hostecho Hello
,然后SSH将命令echo Hello
发送到远程SSH服务器,远程SSH服务器将“本地”(即在运行SSH服务器的同一台计算机上)执行该命令。结果(Hello
)将通过SSH服务器通过管道传输到运行SSH
命令的计算机的套接字连接中,该命令已设置管道以将数据重定向到其stdout
因此,我们:
A上的tar
onA上的tar
A
上的SSH服务器通过Unix套接字将输出发送到第一个SSH
命令stdout
,其中
(管道)命令将其拾取ssh
的输出传递给第二个ssh
通过Unix套接字将数据发送到B
上的ssh服务器B
上的远程SSH服务器将数据作为stdin
管道传输到第二个tar
命令tar cf --pipe>> SSH(A) --socket>> ssh hostA --pipe>> ssh hostB --socket>> SSH(b) --pipe>> tar xf
其中,
--pipe>
是同一台计算机上进程之间的管道,--socket>
是两台不同计算机之间的Unix套接字连接。foo | bar
表示“从foo
获取所有正常输出,并将其作为输入传递到bar
”(“正常”,因为还有“错误”输出)
无论foo
或bar
是什么,只要第一个将其输出写入stdout
(也称为“文件句柄1”),第二个可以读取stdin
(或文件句柄0)
SSH做了一些类似的事情,但涉及套接字。因此,它连接到另一台计算机上的SSH服务器(通过),并将远程计算机上运行的命令的stdin/out/err
重定向到本地执行的SSH
命令的stdin/out/err
因此,如果您执行sshuser@hostecho Hello
,然后SSH将命令echo Hello
发送到远程SSH服务器,远程SSH服务器将“本地”(即在运行SSH服务器的同一台计算机上)执行该命令。结果(Hello
)将通过SSH服务器通过管道传输到运行SSH
命令的计算机的套接字连接中,该命令已设置管道以将数据重定向到其stdout
因此,我们:
A上的tar
onA上的tar
A
上的SSH服务器通过Unix套接字将输出发送到第一个SSH
命令stdout
,其中
(管道)命令将其拾取ssh
的输出传递给第二个ssh
通过Unix套接字将数据发送到B
上的ssh服务器B
上的远程SSH服务器将数据作为stdin
管道传输到第二个tar
命令tar cf --pipe>> SSH(A) --socket>> ssh hostA --pipe>> ssh hostB --socket>> SSH(b) --pipe>> tar xf
其中,
--pipe>
是同一台计算机上进程之间的管道,--socket>
是两台不同计算机之间的Unix套接字连接。foo | bar
表示“从foo
获取所有正常输出,并将其作为输入传递到bar
”(“正常”,因为还有“错误”输出)
无论foo
或bar
是什么,只要第一个将其输出写入stdout
(又称“文件句柄1”)