![如何在家用计算机和另一个网络内的计算机之间进行 rsync?](https://linux22.com/image/834087/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AE%B6%E7%94%A8%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%92%8C%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%BD%91%E7%BB%9C%E5%86%85%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B9%8B%E9%97%B4%E8%BF%9B%E8%A1%8C%20rsync%EF%BC%9F.png)
我使用的所有计算机都运行 Ubuntu。为了在家工作,我通过 SSH 从家里的计算机连接到实验室计算机,如下所示:
# First a port knock is needed
joe@homepc> telnet ssh.university.edu 9000
# Next SSH to one of the external SSH servers of university
# This logs me into one of many SSH servers serving as interface
joe@homepc> ssh [email protected]
# Finally SSH to my lab PC inside university network
student7@university999> ssh joedude@labpc
# And I am in my labpc
joedude@labpc>
我如何使用rsync
将 上的目录labpc
与我的 上的目录同步homepc
?此外,如果有某种方法可以自动执行所有这些操作,以便我只需从家用电脑使用一个命令即可进行 rsync,那就太棒了。
答案1
有几种方法可以解决这个问题,但是,因为我们想在你的家用电脑上运行 rsync 命令,所以我认为最好的方法是创建一个从你的家用电脑到 labpc 的隧道,如下所示:
joe@homepc> ssh -L 2222:127.0.0.1:2222 [email protected]
student7@university999> ssh -L 2222:127.0.0.1:22 joedude@labpc
现在,在您的家用电脑上,您应该能够直接通过 ssh 进入实验室电脑:
joe@homepc> ssh -p 2222 joedude@localhost
一旦它正常工作,您就可以建立一个 rsync 脚本。
我将以下几行添加到 ~/.ssh/config
# Tunnel to labpc
Host labpc_tun
User joedude
Port 2222
# ProxyCommand ... TODO: set up tunnel automatically
HostName 127.0.0.1
现在,您应该可以执行此操作(在单独的窗口中,完成前两次 ssh 登录后):
joe@homepc> rsync labpc_tun:/path-on-labpc/ /path-on-homepc/
在此之后,您还可以进行更多改进,但我会等到您完成第一部分后再考虑需要多少自动化。要完全自动化,您需要使用 ssh-keygen 来允许无需密码的 ssh 登录。您还可以为第一个传出的 ssh 段向 .ssh/config 添加更多内容。使用 .ssh/config 中的 ProxyCommand 参数,您可以自动化整个过程。