重用 ssh 会话来执行重复的 rsync 命令

重用 ssh 会话来执行重复的 rsync 命令

可能的重复:
使用已建立的 SSH 通道

我有一个可以通过 SSH 代理链访问的远程服务器。生成的通道足够宽且快,但设置需要几秒钟。

我想定期rsync针对该服务器运行,将较小的更改同步到相对较大的文件树。

当我简单地这样做时rsync -r source_dir remote_host:target_dir,大部分时间都花在建立连接上。相比之下,建立与该主机的交互式连接大约需要相同的时间。

有没有办法以某种方式在多次rsync调用中重用 SSH 连接,以避免连接延迟?

问题是我不想要连续的将文件复制到远程主机;文件树在复制时必须保持一致,因此我想自己触发 rsync 事件。

我愿意使用其他东西,例如git,只要我避免持续的重新连接延迟并且不必在远程主机上打开侦听端口。

答案1

是的,请参阅ControlMasterControlPath选项。

您可以通过以下方式启动主连接:

mkdir ~/.ssh/ctl
ssh -nNf -o ControlMaster=yes -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" user@host

然后使用 rsync :

rsync -e "ssh -o 'ControlPath=$HOME/.ssh/ctl/%L-%r@%h:%p'" ...

然后

ssh -O exit -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" user@host

终止主连接。

(顺便说一下,某些版本的 ubuntu 有一个烦人的问题特征因为它们会/etc/motd在每次登录(包括非交互式 ssh 会话)时进行重建,如果其中一部分涉及检查更新是否可用,则可能需要很长时间。 IIRC,您可以通过pam_motd从 pam 配置中删除来禁用它)

相关内容