SSHセッションでのCtrl-C処理


20

長時間実行されるコマンドを実行するSSHセッションを開始すると、Ctrl+ C(SIGINT)処理はどうなりますか?

SSHセッションが閉じていることがわかりますが、誰が最初にSIGINTを取得するかわかりません:それは...

  1. リモートの長時間実行コマンド?つまり、(a)リモートコマンドのシグナルハンドラーが呼び出されてリモートコマンドを停止します。(b)コマンドを停止したことを検出したシェルは(c)リモートsshdが停止したシェルを検出し、そのため、接続を閉じます

    または

  2. ローカルsshは信号を受信し、接続を閉じます。

(1)は起こっていると思うが、確認したい。

また、この場合のSIGINTのシェル処理で何が起こるかについても不明です。たとえば、私が...

ssh remote 'while true ; do sleep 1 ; date ; done'

およびCtrl+のC場合、リモート接続は切断されます。Ctrl+の後も存続するシェルの下でリモートコマンドを実行する方法はありCますか?つまり、この場合、ループを停止し、リモートシェルで作業を続けることができますか?


3
ctrl-Cを入力して生成されたSIGINTによって、非対話型のssh(ssh remote commandではなくssh remote)が(ローカル側で)殺されます。リモート側は、閉じられたソケットの読み取りまたは書き込みを試行するまで、おそらく(OSに応じて)実行を続けます。ctrl-Cを含むすべてのキーストロークをリモートに渡す場合は、を使用しますssh remote
マークプロトニック

@MarkPlotnick:OKマーク-回答として以下の回答を追加する場合、私はそれを受け入れます...私自身のテストでは、リモコンが信号を受信しないことを確認しました。
ttsiodras 14年

回答:


23

sshは、いくつかの異なる方法で呼び出すことができ、それぞれがのような端末起動信号のわずかに異なる処理をもたらしますCtrl-C

  • ssh remotehostでインタラクティブセッションを実行しremotehostます。クライアント側でsshは、stdinが使用するttyを「raw」モードに設定しようとsshdし、リモートホストでは擬似ttyを割り当てて、シェルをログインシェルとして実行します(例:)-bash

    rawモードの設定手段正常信号を(例えば、送信することになる文字がいることCtrl-CCtrl-\)だけではなく、入力ストリームに挿入されます。sshそのような文字をそのままリモートホストに送信します。ここでは、SIGINTまたはSIGQUITを送信し、通常はコマンドを強制終了して、リモートホスト上のシェルに戻ります。リモートシェルが動作している限り、ssh接続は動作し続けます。

  • ssh -t remotehost command args ...remotehost上記と同様に、リモート側を除いてで対話セッションをyour_shell -c "command args ..."実行します。上記のように、を入力Ctrl-Cすると、リモートホストに送信されます。コマンドはおそらくSIGINTを受信して​​すぐに終了し、その後リモートシェルは終了します。次に、リモートsshdは接続を閉じ、sshレポートしますConnection to remotehost closed.

  • ssh remotehost command args ...で非対話型セッションを実行しremotehostます。クライアント側でsshは、ttyをrawモードに設定しません(パスワードまたはパスフレーズを読み取る場合を除く)。を入力するとCtrl-CsshSIGINTが送信され、Connection to remotehost closedメッセージを発行することなくすぐに終了します。

    your_shell -c "command args ..."プロセスがしますおそらく、リモートホスト上で実行中のまま。終了するか、1つのプロセスが閉じられたsshソケットにデータを書き込もうとすると、(通常)致命的なSIGPIPEシグナルが送信されます。


1
技術的には、リモートコマンドはソケットに直接書き込みません。その標準出力はパイプです。そして、もう一方のsshdはデータを読み取り、暗号化し、ソケットを介して送信します。ただし、最終的な結果は同じです。クライアントが切断するとパイプがなくなるため、コマンドはsigpipeを取得します。
ステファンシャゼラス16年

@StéphaneChazelasありがとう、答えを編集して修正します。
マークプロトニック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.