编辑#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 密钥对。
- M3没有SSH服务器,因此M1->M3和M2->M3是不可能的。
- 我无法在M2中使用VPN,因此M2->M1是不可能的。
- 我不知道M1->M2是否可能。
我的意思是 rsync user1@M1
-> user2@M2
(即,user1@M1
作为源和user2@M2
目标),反之亦然。在一种特定情况下,user1=user2
,但一般情况是目标。
它们有可能吗?
只有其中之一吗?
如何?
为了实现这一点,是否必须具有 M1->M2 访问权限?
如果是这样,我怎样才能实现这一目标?
我好像离它很近了。
尝试 rsync M1->M2,我执行了
user3@M3
(没有user1@M3
oruser2@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
),并且我已正确输入密码。尝试 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 的正确方法。为了这...
尝试 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 或反之亦然,如果这有助于理解事情是如何工作的。
我怎样才能做到这一点?
有关的:
- 如何在两个遥控器之间同步文件?
- 如何在两个远程服务器之间同步文件?
- 尝试通过使用 ssh 密钥的反向端口转发在两个远程服务器之间运行 rsync
- 如何在具有显式端口和不同用户名的两个遥控器之间 rsync 文件?
- Aws ec2 - 如何在两个远程设备之间同步文件?
- https://serverfault.com/questions/411552/rsync-remote-to-remote
- https://serverfault.com/questions/249421/rsync-from-one-remote-to-another
- https://superuser.com/questions/797473/creating-a-connection- Between-3-computers
- 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
而这又可以通过替换M1
和host2
来映射回您的场景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
您连接到ssh
fromM3
到user1@M1
。该连接建立了一条从M1
的 TCP/IP 端口 50000 到机器 上的端口 22 的通道M2
(经过原始计算机 )M3
。然后,您执行一个rsync
命令,使用该通道“直接”连接到 M2。 (我稍微更改了标志;rsync -avz
这是比原始问题中使用的更好的默认设置。)