ssh LocalCommand Weird - なぜバックグラウンドでrsyncを実行するのですか?

ssh LocalCommand Weird - なぜバックグラウンドでrsyncを実行するのですか?

SSHを使用してターゲットサーバーに接続するときは、rsyncを使用してファイルをターゲットサーバーにコピーします。これを行うには、SSH設定ファイルに次のものがあります。

ControlMaster auto
ControlPath ~/.ssh/%r@%h:%p
...
...
host dns
   LocalCommand rsync --update -a -e "ssh -o PermitLocalCommand=no" ~/.cfg/ dns:.cfg/ &
...
...

ControlMasterビットは、SSHを介してサーバーに一度接続した後、後続のSSH接続でパスワードを要求しないことを意味します。したがって、rsyncはパスワードを要求せずに実行されます。

奇妙なことに、構成ファイルのLocalCommand行の末尾に&がないと機能しません。これはなぜ必要ですか? &がないとパスワードを入力してログインを中断し、CTRL / Cを押すとCTRL / Cによって中断され、接続が失敗するためrsyncエラーが発生します。 rsyncコピーは1秒もかかり、中断されます。いいえrsyncには時間がかかるためです。

これを行う方法を見つけるのに長い時間がかかりました。最初はうまくいかず、私が言ったように中断されました。その後、rsyncコマンドをスクリプトに入れて呼び出しましたが、それでも中断されます。スクリプトから端末を起動してrsyncを実行すると、正常に動作することがわかりました。その後、一歩遅れてrsyncの後に&をスクリプトに入れると効果があり、上記の結果が出ました。

大きな問題ではなく、動作方法に満足していますが、知りたいです。なぜ必要& 。

これはすべてLinuxで行われ、xubuntu / ubuntuは両端で実行されます。

ベストアンサー1

答えることもできるこのブログ投稿:

最後に、ControlMasterには、最初に遭遇したときにかなり混乱する可能性があるいくつかの迷惑な点があります。すべてのSSHセッションは、最初のSSHセッションで開始された単一のTCP接続を介して多重化されるため、最初のセッションは他のすべてのセッションが完了するまでアクティブなままにする必要があります。この問題は、マスターサーバーとして機能するリモートセッションからログアウトすると明らかな「停止」として表示され、SSHはローカルプロンプトを再起動する代わりにそのまま残ります。 Ctrl-Cを押すか、このセッションを終了すると、このサーバーに設定されている他のすべてのセッションが失われるため、これを行わないでください。代わりに、他のすべてのセッションからログアウトすると、マスターサーバーはローカルプロンプトに戻ります。

SSHオプションをリストするために-S noneを追加して、同様の問題を解決しました。

LocalCommand rsync --update -a -e "ssh -o PermitLocalCommand=no -S none" ~/.cfg/ dns:.cfg/

おすすめ記事