我使用的所有计算机都运行 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 参数,您可以自动化整个过程。