リモートSSHセッションを「保存」しますか?

リモートSSHセッションを「保存」しますか?

スクリプトでこれを実行しようとしています。リモートホストでいくつかのコマンドを実行する必要があります。現在私はこれをしています:

ssh root@host 'bash -s' < command1
ssh root@host 'bash -s' < command2
ssh root@host 'bash -s' < command3

ただし、これはサーバーに繰り返し接続する必要があるため、コマンド処理の間に時間がかかることを意味します。私は次のようなものを探しています:

varSession=$(ssh root@host 'bash -s')
varSeesion < command1
varSeesion < command2
varSeesion < command3

今回もスクリプトを通じてこれらのコマンドを実行する必要があります。見てみましたが、screenスクリプトで利用できるかどうかはわかりません。

ベストアンサー1

あなたは使用することができControlMasterますControlPersistコマンドの終了後も接続を維持できます。

と一緒に使用する場合は、ControlMaster初期クライアント接続が閉じられた後にデフォルト接続がバックグラウンドで開かれていることを指定します(将来のクライアント接続を待機)。に設定すると、noデフォルト接続はバックグラウンドに配置されず、初期クライアント接続が終了した直後に終了します。yesまたは に設定すると、デフォルトの0接続はバックグラウンドで無期限に保持されます(ssh -O exit""などのメカニズムによって終了または閉じられるまで)。秒単位の時間に設定するか、に記録された形式に設定されている場合、 sshd_config(5)バックグラウンドマスター接続は指定された時間の間アイドル状態(接続されているクライアントなし)を維持した後に自動的に終了します。

したがって、最初のSSHコマンドは接続用の制御ファイルを設定し、残りの2つのコマンドは制御ファイルを介して接続を再利用します。次のものが必要~/.ssh/configです。

Host host
    User root
    ControlMaster auto
    ControlPath /tmp/ssh-control-%C
    ControlPersist 30   # or some safe timeout

そして、スクリプトに他の変更は必要ありません。

おすすめ記事