web-dev-qa-db-ja.com

放棄されたsshセッションに接続または表示できますか?

企業ネットワーク上の任意のホストからsshを実行できるredhatの仮想インスタンスを実行しています。一部のスクリプトの実行中にsshセッションが切断され、切断された可能性があります。 whoコマンドは、ローカルでドロップされた接続をリストします。 sshで再接続すると、まったく新しいセッションが開始されます。元のセッションに接続する方法はありますか?できない場合は、殺せますか? rootと物理的なアクセス権があります。元のセッションでは画面を使用していませんでした。

14
jms

リモートで screen を使用してから、sshで戻ったときに、screenのそのインスタンスに再接続します。

しかし、それ自体ではsshセッションに再接続することはできません。スクリーン(またはそれを促進するためにスクリーンのようなもの)を使用する必要があります。

この質問 を見て、少なくとも1つの他のオプションと、そのオプション(tmux)と画面の違いを確認してください。その質問の答えを読んだ後...私は実際に言うでしょう tmux の方が良い

ああ、はい、プロセスを(フォークされたbashを含めて)kill停止できます。skillを使用してユーザーを名前で強制終了することもできますが、そのユーザーがrootであるかどうかは疑わしいです...できないものを殺そうとするかもしれません。

回答が数回更新されました

11
xenoterracide

デフォルトでは、破棄されたsshセッションに再接続することはできません。ただし、sshセッション内でプロセスを設定できます。新しいsshセッションを再確立した後で、sshセッションに再接続できます。

使用したいのは、screen、またはさらに優れた、byobuと呼ばれる使いやすい画面ラッパーです。

画面では、同じsshセッションで複数の仮想端末セッションを実行できます。 チュートリアル および ヘルプページ が利用可能です。

byob は、ctrl-aからのキーの組み合わせの代わりに単純なファンクションキーで新しい画面を簡単に開くことができるラッパーです。また、名前を付けることができる開いているすべての仮想端末のステータス行も表示されます。

もう1つの素晴らしい機能は、SSH接続が切断されている間、すべての画面が表示され続けるという事実です。もう一度sshを介して接続し、byobuを呼び出すだけで、すべてが以前と同じです。

ついにいくつかの スクリーンショット byobuの。

4
txwikinger

前述のように、おそらくscreenが最善の策です。セッションが切断された場合でも、実行は継続されます。 「screen -list」と入力して利用可能なセッションを表示し、「screen -r」と入力して必要なセッションを表示します。ちょっとしたヒントですが、全体をコピーして貼り付けるのではなく、セッション文字列をタブ補完することができます。

ただし、画面が煩わしい場合があります。私のクライアントでは、コンソールで簡単に上にスクロールして履歴を表示することはできません。予想とは少し異なる動作をします。長時間実行しているプロシージャが強制終了されないようにする場合は、「Nohup」を使用します。接続が失われたときにprocがシャットダウンされるのを防ぎます。ただし、監視したい場合は、必ずproc出力をファイルに送信してください。また、bashスクリプトがある場合は、Nohupの前で「bash」を明示的に呼び出す必要があると思います。例...

Nohup bash ./myscript.sh> output.log 2>&1&

つまり、Nohupは、procの強制終了を防ぐために、スクリプトにbash固有のものがある場合、bashが明示的にbashを呼び出すようにします。エラーになり、最後に「&」がバックグラウンドでプロシージャを実行します。

3
kāgii