我需要在远程主机之间执行rsync(后面的原因),rsync不支持这种情况(参见手册页)。但是,我认为应该可以使用ssh隧道。到目前为止,我无法让它工作,我想我做错了什么。请看下面的代码段:
ssh -R localhost:50000:remotesource:22 user@localpc -f -N
sleep 5 #To wait for the tunnel to establish
ssh user@remotedestination rsync -e "ssh -p 50000" --progress --append-verify user@localpc:~/sourcefiles ~/destdir'
这在rsync内部ssh的身份验证期间基本挂起。只是为了测试它,我连接到远程目标并试图通过隧道ssh到remotesource,这是有效的!有没有什么rsync做的不同我忘了这里?
为什么我要这样做?尽管普遍存在好奇心,但遥控器是一台计算机,我只能从中提取不推送数据,而远程目标只有一个共享帐户。由于存在频繁的连接问题,我想编写脚本以在发生错误时重新启动rsync。为此,我需要通过密钥文件进行身份验证(没有安装sshpass或类似的)。但我肯定不会将我的私钥存储在共享帐户的主目录中。因此,我希望通过我的本地PC进行身份验证。
我希望有人可以指出我的错误,我不明白:-)谢谢!
答案 0 :(得分:1)
我认为你在这里打结了!
创建端口转发到端口22的唯一时间有助于在防火墙周围进行路由。它无法帮助您避免身份验证。在任何情况下,您的隧道只接受来自" localpc"所以你的rsync在" remotedestination"上运行无法使用它。
如果您不希望将凭据泄漏到远程目的地的#34;共享帐户中,并且无法进行交互式密码输入,那么事情就有点棘手了。您可以使用authorized_keys限制的密钥,但这仍然不完全安全。您可以使用ssh -A
将您的ssh-agent连接转发到" remotedestination",但具有相同用户访问权限的窃听者也可以使用该套接字(此方法至少相当隐蔽,如果您&# 39;实际上并不是面对真正的黑客的间谍。)
可能最安全的方法是使用ssh -A
代理转发来启动来自" remotesource"的传输。
或者,如果数据不大或增量更新不是该点,您可以尝试scp
。这可以处理远程源和目标,甚至可以直接将数据直接从源移动到目标,如果可以的话。缺点是它总是会尝试复制所有数据。