シャットダウンコマンドを送信した後、sshセッションが終了しない


12

Debianサーバーをオフにするか再起動するコマンドを送信すると、シェルはハングしたままになり、応答しなくなります(コマンドを入力できなくなります)。

ここに画像の説明を入力してください

Ubuntuで同じアクションを実行すると、セッションが正常に終了するため、拘束された端末がそこにぶら下がっていません。Debianでこれと同じ動作をさせるために、インストールする必要のあるパッケージや構成変更を行う必要はありますか?


sudo shutdown -h now(電源オフの場合)、またはsudo reboot(再起動の場合)でも同じ動作が発生しますか?
eyoung100 2015

はい、それはそれらでも起こります。
Programster

2
注:<enter>、チルダ、ピリオド(〜。)を入力すると、ハングしたsshセッションの1つを終了できます。
ケンスター2015

回答:


11

これは私のために働きました:

apt-get install libpam-systemd dbus

またUsePAM yes、sshの設定を確認してください。

grep -i UsePAM /etc/ssh/sshd_config

残念ながら、ソリューションを有効にするには再起動する必要があります...

上の詳細な説明serverfaultの


以前の解決策が機能しなかったubuntu 16.04でも同じ問題が発生しましたが、これは機能しました。
Programster

7

これは、systemd現在バグ#751636で追跡されている問題のようです。

ホストがシャットダウンまたは再起動さsystemdれると、sshセッションが終了する前にネットワークがシャットダウンする場合があります。

いくつかの解決策がありますが、具体的なものはありません:

  1. を使用acpid/acpi-support-baseして電源イベントを処理し、以下を追加します/etc/acpi/powerbtn-acpi-support.sh

    else
    -       # Normal handling.
    -       /sbin/shutdown -h -P now "Power button pressed"
    +
    +       if [ -x /bin/systemctl ] ; then
    +           echo "\nPower button pressed\nThe system is going down for system halt NOW!" |\
    +            /usr/bin/wall -n
    +           /bin/systemctl --force poweroff
    +       else
    +           # Normal handling.
    +           /sbin/shutdown -h -P now "Power button pressed"
    +       fi
    +
    fi
    

    次にエイリアスを作成します~/.bashrc

    alias reboot='echo "The system is going down for system reboot NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force reboot'
    
    alias poweroff='echo "The system is going down for system halt NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force poweroff'
    
  2. /etc/systemd/system/ssh-user-sessions.service次のように作成します:

    [Unit]
    Description=Shutdown all ssh sessions before network
    After=network.target
    
    [Service]
    TimeoutStartSec=0
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/true
    ExecStop=/usr/bin/killall sshd
    

知られているバグを知っておくのは良いことです。2番目の解決策を試しましたが、rebootコマンドを送信してもうまくいかないようです。実行可能にしてみました。
Programster

1
systemdデーモンをリロードします。これsystemctl daemon-reloadも、systemdサービスをすぐにアクティブ化 systemctl start ssh-user-sessions.serviceするため、および起動時にサービスを有効にするためですsystemctl enable ssh-user-sessions.service
ニューロン

最初の2つのコマンドを実行するとうまくいきました。3番目のコマンドを実行すると、次の結果が得られThe unit files have no [Install] section. They are not meant to be enabled using systemctl.ましたが、必要ではないようです。
Programster

ええ、ユニットファイルには"[Install]"、ユニットのインストール情報を含むセクションが含まれている可能性があることを忘れていました。このセクションはsystemd実行時に解釈されません。それはによって排他的に使用される有効無効のコマンドsystemctl単位のインストール中のツール。
ニューロン

ファイルにを[Install]続けて追加したところ、エラーがスローされず、再起動後にサービスが有効になりました。これを行うことで何か問題がありますか?WantedBy=multi-user.targetsystemctl enable ssh-user-sessions.service
Programster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.