为重复的 rsync 命令重用 ssh 会话

900*_*000 32 ssh rsync

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

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

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

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

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

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

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

Sté*_*las 46

是的,请参阅ControlMasterControlPath选项。

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

mkdir ~/.ssh/ctl
ssh -nNf -o ControlMaster=yes -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" user@host
Run Code Online (Sandbox Code Playgroud)

然后将 rsync 与:

rsync -e "ssh -o 'ControlPath=$HOME/.ssh/ctl/%L-%r@%h:%p'" ...
Run Code Online (Sandbox Code Playgroud)

然后

ssh -O exit -o ControlPath="$HOME/.ssh/ctl/%L-%r@%h:%p" user@host
Run Code Online (Sandbox Code Playgroud)

终止主连接。

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

  • 需要注意的是,OpenSSH 客户端还支持与“-o ControlMaster=yes”含义相同的“-M”命令行选项和与“-”含义相同的“-S <path>”命令行选项o ControlPath=<路径>`。至少 OpenSSH 5.1p1 就是这种情况。 (13认同)
  • 只是补充一点,您可以使用“ControlPersist”来使连接超时,因此无需退出。 (4认同)