web-dev-qa-db-ja.com

SSHセッションがシャットダウン/再起動時にハングする

Debianとsshdを実行するサーバーがあり、サーバーを再起動する必要がある場合は、SSHセッションがTCPタイムアウトになるまでクライアント側でハングします。これは、sshdは終了されますが、ホストへの開いているSSHセッションを明示的に閉じません。sshdを最初に全員から切断し、次に通常どおりに終了するにはどうすればよいですか?これまでのところ、パラメーターが表示されません。 man sshd_configこれは、閉鎖された動作に関連しています。

14
Vesper

システムをシャットダウンまたは再起動すると、systemdはすべてのサービスをできるだけ早く停止しようとします。これには、ネットワークを停止し、まだ生きているすべてのプロセスを通常はこの順序で終了することが含まれます。そのため、systemdがSSHセッションを処理しているフォークされたSSHプロセスを強制終了すると、ネットワーク接続はすでに無効になっており、クライアント接続を正常に閉じる方法がありません。

シャットダウン時の最初のステップとして、すべてのSSHプロセスを強制終了することを最初に考えるかもしれませんが、それを行うsystemdサービスファイルはかなりたくさんあります。

しかし、当然のことながら、より適切な解決策があります(それが「想定される」方法):systemd-logind
systemd-logindは、アクティブなユーザーセッション(ローカルおよびSSHセッション)を追跡し、それらの中で生成されたすべてのプロセスをいわゆる「スライス」に割り当てます。このように、システムがシャットダウンすると、systemdはユーザースライス(特定のセッションを処理するフォークされたSSHプロセスを含む)内のすべてをSIGTERMして、サービスとネットワークのシャットダウンを続行できます。

systemd-logindでは、新しいユーザーセッションの通知を受け取るためにPAMモジュールが必要です。また、dbusを使用してそのステータスを確認するには、loginctlが必要であるため、両方をインストールします。

apt-get install libpam-systemd dbus

/etc/ssh/sshd_configが実際にUsePAM yesでモジュールを使用することを確認してください。

32
n.st

これは、サーバー側ではなくクライアント側で設定する必要があるものです。 ~/.ssh/config 含有すること

ServerAliveInterval 15
ServerAliveCountMax 5

つまり、非アクティブ状態が15秒続くと、クライアントはサーバーにメッセージを送信します。応答がない場合は、最大5回再試行し、それでも応答がない場合は、セッションを閉じます。

9
Jenny D

この動作はこれについて報告されています Debian Bug 、パッケージに付属のシャットダウンスクリプトを正しく設定する必要があるのは、デフォルトでは自動的にコピーされないためです。

cp /usr/share/doc/openssh-client/examples/ssh-session-cleanup.service /etc/systemd/system/
systemctl  enable ssh-session-cleanup.service
6
Rfraile

Jenny Dが1つのsshコマンドについてだけ、彼女の回答で話していたオプションを指定できます。

ssh -t -o ServerAliveInterval=1 -o ServerAliveCountMax=1 user@Host Sudo poweroff

それを頻繁に行う場合は、スクリプトを作成できます。

1
Diego Medaglia

悲しいことに、serverfaultは何年も前からスレッドの原因で回答することができませんでした。しかし、ロックを解除するために他のブログをスパムする必要はありません^^ ...専用の回答として:

Rfraileが述べたように

cp /usr/share/doc/openssh-client/examples/ssh-session-cleanup.service /etc/systemd/system/
systemctl  enable ssh-session-cleanup.service

動作します。インスタンス/サーバーを再起動せずにそれを使用するには、追加のタスクを実行する必要があります。

systemctl daemon-reload
systemctl start ssh-session-cleanup.service

そのため、サービスは登録および開始され、systemdは再起動/シャットダウンのためにサービスを停止する必要があります。

0
Reiner030

Lshdで動作します。だから解決策は

apt install lsh-server
apt remove openssh-server
0
god