GNU/Linux >> Linux の 問題 >  >> Linux

Ctrl-c Sshセッションでの処理?

長時間実行されるコマンドを実行する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 ?つまり、この場合、ループを停止して、リモートシェルでの作業を続行できるようにしますか?

承認された回答:

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

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

    rawモードを設定すると、通常は信号を送信する文字( Ctrl-C など)が意味されます。 およびCtrl- )代わりに、入力ストリームに挿入されます。 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-Cと入力した場合 、ssh Connection to remotehost closedを発行しなくても、SIGINTが送信され、すぐに終了します。 メッセージ。

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

関連:SSHを使用してMagento 1.9.xキャッシュをフラッシュする方法は?
Linux
  1. 切断後もリモートSSHセッションとプロセスを実行し続けるための5つの方法

  2. Ssh – Sshアクセス試行のログ?

  3. SSH セッションを維持する

  1. リモートSSHアクセスを許可しますか?

  2. リモート SSH セッションからローカル クリップボードにデータを送信する方法

  3. リモート ssh コマンドで変数を渡す

  1. 開いているリモート SSH セッションをログアウトするにはどうすればよいですか?

  2. SSH リモート アクセス VPN トンネル

  3. リモート(VPN経由)のsshセッションから1を初期化すると、ssh接続が強制終了されます