Linux 在两个远程主机之间复制数据-它是如何工作的?

Linux 在两个远程主机之间复制数据-它是如何工作的?,linux,shell,aix,Linux,Shell,Aix,我需要将数据从主机A复制到主机C。它们之间没有连接。唯一的办法是A B然后B C。 为了以更快的方式实现这一点,我在B(中间服务器)上使用了以下命令: 这是可行的,但我不理解这里的一些东西,我真的很想理解。 此命令中隐藏的是严格复制的数据吗 我看到了正常的ssh连接,只在两个主机名上更改目录和打包/解包文件,然后在另一个主机名上用管道分隔。 执行后没有文件存储在主机名_B上,此处也没有使用scp。 在AIX上完成,但在Linux上也可以 它们不是被管道分开的,而是与管道连接在一起的。它的基本B连

我需要将数据从主机A复制到主机C。它们之间没有连接。唯一的办法是A B然后B C。 为了以更快的方式实现这一点,我在B(中间服务器)上使用了以下命令:

这是可行的,但我不理解这里的一些东西,我真的很想理解。 此命令中隐藏的是严格复制的数据吗

我看到了正常的ssh连接,只在两个主机名上更改目录和打包/解包文件,然后在另一个主机名上用管道分隔。 执行后没有文件存储在主机名_B上,此处也没有使用scp。
在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
    on
    A上的
    tar
  • A
    上的SSH服务器通过Unix套接字将输出发送到第一个
    SSH
    命令
  • 第一个ssh命令将所有内容通过管道(或流)传输到它的
    stdout
    ,其中
    (管道)命令将其拾取
  • pipe命令将第一个
    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
    on
    A上的
    tar
  • A
    上的SSH服务器通过Unix套接字将输出发送到第一个
    SSH
    命令
  • 第一个ssh命令将所有内容通过管道(或流)传输到它的
    stdout
    ,其中
    (管道)命令将其拾取
  • pipe命令将第一个
    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”)