私のスクリプトは次の行を使用します。
ssh -f -N -M -S <control socket> <host>
これは、初期接続がバックグラウンドでのみ維持され、後続の呼び出しに使用できることを意味しますssh
。
ssh -S <control socket> <host> <command>
ただし、同じ制御ソケットを使用し、「バックグラウンド」呼び出しをすべてのスクリプトに入れる必要があるコマンドを含む複数のスクリプトがある場合は、あるssh
時点で次のメッセージが表示されます。
ControlSocket <control socket> already exists, disabling multiplexing
ssh
明らかにソケットが存在し、後続のコマンドで使用できるため、これはスクリプトの残りの部分には影響しません。ただし、「バックグラウンド」セッションがソケットのオープンに失敗しても終了せず、アクティブなままです。ただ多重化されていないだけです。
[ -S
ソケットが存在することを確認または使用するssh -O check
と、まだ競合状態が発生する可能性が残ります。
「制御ソケットがまだない場合は開いている場合は終了する」にはどうすればよいですか?
ベストアンサー1
あなたが探しているのは、ControlMaster auto
設定ファイルに割り当てるか、コマンドラインから直接使用できると思います-o ControlMaster=auto
。
これにより、接続を開くコマンドと使用コマンドを統合できます(非常に便利ですControlPersist
)。