web-dev-qa-db-ja.com

繰り返しrsyncコマンドでsshセッションを再利用する

可能性のある重複:
すでに確立されているSSHチャネルを使用

SSHプロキシのチェーンを介してアクセスできるリモートサーバーがあります。結果のチャネルは幅が広く、十分に高速ですが、セットアップには数秒かかります。

このサーバーに対して定期的にrsyncを実行し、小さな変更を比較的大きなファイルツリーに同期させます。

rsync -r source_dir remote_Host:target_dir、ほとんどの時間は接続の確立に費やされています。比較のために、そのホストへのインタラクティブ接続の確立には、ほぼ同じ時間がかかります。

接続の遅延を回避するために、いくつかのrsync呼び出しでSSH接続を何らかの方法で再利用する方法はありますか?

問題は、リモートホストへのファイルの連続的レプリケーションを望まないことです。ファイルツリーはレプリケーションの時点で一貫している必要があるため、自分でrsyncイベントをトリガーしたいと思います。

私は他のものを使用することにオープンです。 git、一定の再接続遅延を回避し、リモートホストのリスニングポートを開く必要がない限り。

28
9000

はい、ControlMasterおよびControlPathオプションを参照してください。

マスター接続は次の方法で開始できます。

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構成からpam_motdを削除することで無効にすることができます)

41