两个远程之间的 rsync 文件,只能从“中间”访问

两个远程之间的 rsync 文件,只能从“中间”访问

编辑#1

根据 roaima 的回答,我尝试过(此处使用user1= user2

[user3@M3]$ ssh -R 50000:M2:22 user1@M1 rsync -e "ssh -p 50000" -avz /absolute_path1/ user2@localhost:/absolute_path2/
Permission denied, please try again.
Permission denied, please try again.
user2@localhost: Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.3]

密钥对可能有问题。可以配置 6 个公私钥(M3->M1 等)
命令运行需要其中哪些(如果有)?
任何对都需要与其他对相同吗?


我有3台机器,M1(远程),M2(家里),M3(家里,在同一个路由器后面)。可能的 ssh 连接(客户端->服务器)是:M3->M1(仅通过 VPN)、M3->M2。我在这两种情况下都使用 ssh 密钥对。

  1. M3没有SSH服务器,因此M1->M3和M2->M3是不可能的。
  2. 我无法在M2中使用VPN,因此M2->M1是不可能的。
  3. 我不知道M1->M2是否可能。

我的意思是 rsync user1@M1-> user2@M2(即,user1@M1作为源和user2@M2目标),反之亦然。在一种特定情况下,user1=user2,但一般情况是目标。
它们有可能吗? 只有其中之一吗? 如何?
为了实现这一点,是否必须具有 M1->M2 访问权限? 如果是这样,我怎样才能实现这一目标?

我好像离它很近了。

  1. 尝试 rsync M1->M2,我执行了user3@M3(没有user1@M3or user2@M3):

     [user3@M3]$ ssh -R localhost:50000:<M2 ip>:22 <M1 ip> 'rsync -e "ssh -p 50000" --perms -vur --dry-run <M1 dir> localhost:<M2 dir>'
     Enter passphrase for key '<user3 $HOME>/.ssh/id_rsa':
     Connection closed by <M1 ip> port 22
    

    请注意,是 M3 中的代理要求提供密钥对密码(因为user3仅存在于M3),并且我已正确输入密码。

  2. 尝试 rsync M2->M1,我在以下位置执行user3@M3

     [user3@M3]$ ssh -R localhost:50000:<M1 ip>:22 <M2 ip> 'rsync -e "ssh -p 50000" --perms -vur --dry-run <M2 dir> localhost:<M1 dir>'
     Enter passphrase for key '<user2 $HOME>/.ssh/id_rsa':
     <user3>@<M2 ip>'s password:
     Permission denied, please try again.
     ...
    

    请注意,M2 中不存在 user3,因此永远不会成功。我必须找到传递 user1 的正确方法。为了这...

  3. 尝试 rsync M2->M1,我执行user3@M3添加user2

     [user3@M3]$ ssh -R localhost:50000:<M1 ip>:22 <user2>@<M2 ip> 'rsync -e "ssh -p 50000" --perms -vur --dry-run <M2 dir> localhost:<M1 dir>'
     Host key verification failed.
     rsync: connection unexpectedly closed (0 bytes received so far) [sender]
     rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.3]
    

请注意,使用user1代替user2或反之亦然并不能解决问题,因为它们在这里是相同的。

我会尝试首先能够 ssh M1->M2 或反之亦然,如果这有助于理解事情是如何工作的。
我怎样才能做到这一点?

有关的:

  1. 如何在两个遥控器之间同步文件?
  2. 如何在两个远程服务器之间同步文件?
  3. 尝试通过使用 ssh 密钥的反向端口转发在两个远程服务器之间运行 rsync
  4. 如何在具有显式端口和不同用户名的两个遥控器之间 rsync 文件?
  5. Aws ec2 - 如何在两个远程设备之间同步文件?
  6. https://serverfault.com/questions/411552/rsync-remote-to-remote
  7. https://serverfault.com/questions/249421/rsync-from-one-remote-to-another
  8. https://superuser.com/questions/797473/creating-a-connection- Between-3-computers
  9. SSH - 如何建立三台计算机隧道?

答案1

M3没有SSH服务器,因此M3->M1和M3->M2是不可能的。

嗯?发起连接的是客户端,所以我通常将这种关系写为客户端->服务器。

如果中间没有服务器,那么显然要尝试的是在 M3 上使用远程 src 和远程 dest 在中间运行 rsync(是吗?)。不幸的是,rsync 无法应对远程两端。但是您可以设置从 M3 连接到任一端的隧道,然后从另一端将 rsync 指向隧道...

userm3@m3 $ ssh -L 2222:m2:22 userm2@m2

然后你可以通过m3从m1访问m2:

userm1@m1 $ ssh -p 2222 userm2@m3

(但是您的授权密钥和任何主机特定的密钥对都会因此而混淆)

答案2

让我们试着从中挑出骨头

三机

  • M1,远程,用户1
  • M2,家庭局域网,用户2
  • M3,家庭局域网,用户3

连接

  • M3可以达到M1
  • M3可以达到M2

您想要将数据从 M1 传输到 M2,并可能再次传输回来。

我假设虽然M2也在家庭局域网上,但它无法到达M3。由于您想用于rsync在 M1 和 M2 之间传输数据,我假设它已安装在两个系统上。

明显的尝试来自 M2,rsync user1@M1: user2@M2:但这是不可能的(rsync当前只能处理一个不同的远程目标)。

我们现在可以将其直接映射到 StackExchange 上的另一个问题,如何在两个遥控器之间同步文件?,询问如何实施

rsync -vuar host1:/var/www host2:/var/www

我的答案鉴于那里提供了这个解决方案:

ssh -R localhost:50000:host2:22 host1 'rsync -e "ssh -p 50000" -vuar /var/www localhost:/var/www'

host1而这又可以通过替换M1host2来映射回您的场景M2。在 M3(可以访问两个远程系统的系统)上运行此命令:

ssh -R localhost:50000:M2:22 user1@M1 rsync -e "ssh -p 50000" -avz /source/path/on/M1/ user2@localhost:/target/path/on/M2

您连接到sshfromM3user1@M1。该连接建立了一条从M1的 TCP/IP 端口 50000 到机器 上的端口 22 的通道M2(经过原始计算机 )M3。然后,您执行一个rsync命令,使用该通道“直接”连接到 M2。 (我稍微更改了标志;rsync -avz这是比原始问题中使用的更好的默认设置。)

相关内容