可能的重复:
使用已经建立的 SSH 通道
我有一个可通过 SSH 代理链访问的远程服务器。由此产生的通道足够宽且足够快,但设置它需要几秒钟。
我想定期运行rsync
此服务器,将小的更改同步到相对较大的文件树。
当我通过 简单地做时rsync -r source_dir remote_host:target_dir
,大部分时间都花在建立连接上。相比之下,与该主机建立交互式连接所需的时间大致相同。
有没有办法以某种方式在多次rsync
调用中重用 SSH 连接,以避免连接延迟?
问题是我不想将文件连续复制到远程主机;文件树在复制时必须保持一致,所以我想自己触发 rsync 事件。
我愿意使用其他东西,例如git
,只要我避免不断的重新连接延迟并且不必在远程主机上打开侦听端口。
Sté*_*las 46
是的,请参阅ControlMaster
和ControlPath
选项。
您可以通过以下方式启动主连接:
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 配置中删除来禁用它)