Azureで作成されたLinux Ubuntu VM(14.04 LTS)で再現可能な問題が発生しました。
systemd
スクリプトを介してパッケージをインストールした後、システムは新しいSSH接続を無期限に拒否します。
システムが起動中です。
xxx.xxx.xxx.xxx によって接続が終了しました。
ただし、アクティブなSSH接続は変更されません。/etc/nologin
システムにファイルがありません。
私が見ることができる唯一のオプションは、問題を解決するためのハードリセットだけです。しかし、どのように避けることができますか?
これは私が使用するスクリプトです。
#!/bin/bash
# Script input arguments
user=$1
server=$2
# Tell the shell to quote your variables to be eval-safe!
printf -v user_q '%q' "$user"
printf -v server_q '%q' "$server"
#
SECONDS=0
address="$user_q"@"$server_q"
function run {
ssh "$address" /bin/bash "$@"
}
run << SSHCONNECTION
# Enable autostartup
# systemd is required for the autostartup
sudo dpkg-query -W -f='${Status}' systemd 2>/dev/null | grep -c "ok installed" > /home/$user_q/systemd-check.txt
systemdInstalled=\$(cat /home/$user_q/systemd-check.txt)
if [[ \$systemdInstalled -eq 0 ]]; then
echo "Systemd is not currently installed. Installing..."
# install systemd
sudo apt-get update
sudo apt-get -y install systemd
else
echo "systemd is already installed. Skipping this step."
fi
SSHCONNECTION
答え1
/etc/nologin
systemdをインストールした後も削除されないファイル(「システムが起動中です」という内容)があるようです。
[更新]あなたに影響を与えるのはUbuntuのBTSで報告されたバグ去る12月。これは、システムのインストールの終わりにファイルが削除されないためです/var/run/nologin
(=シンボリックリンクで/run/nologin
あるため)。/var/run
/run
/etc/nologin
標準の nologin ファイルです。/var/run/nologin
PAMモジュールで利用可能な代替ファイルですnologin
(man pam_nologin
)。
nologin
これらのファイルはrootユーザーの接続に影響を与えず、通常のユーザーのログインのみを防ぐことに注意してください。
答え2
@xhienneさんが正しい方向を教えてくれました。
ファイルシステムを検索した後/run/nologin
(@xhienneが/etc/nologinを提案)、ファイルを見つけて削除すると問題が解決しました。
このような状況は/usr/lib/tmpfiles.d/systemd.conf
私のスクリプトにこのステップを含めましょう。
sudo rm /run/nologin
答え3
Note: This answer is applicable whether or not systemd was recently installed or not.
The issue was observed even after systemd had been installed a long time.
Mageiaリリースのバグトラッカーに関連する問題が開いているようです。 バグ 21080 - /run/nologin は、再起動後に SSH ログインを無効にします。。
この問題が頻繁に発生する場合、トラッカーを見つけることは、単にトラッカーを削除するよりも適切な解決策を決定するのに役立ちます。/実行/ログイン文書。
以下は、このバグトラッカーの情報クエリに関するいくつかのデータです。
$ ls -l /run/nologin
-rw-r--r-- 1 root root 42 Mar 6 10:11 /run/nologin
$ cat /run/nologin
"System is booting up. See pam_nologin(8)"
$ date
Tue Mar 6 11:10:38 CST 2018
$ uptime
11:15:10 up 1:04, 0 users, load average: 0.07, 0.07, 0.08
$ systemctl status systemd-user-sessions.service
● systemd-user-sessions.service - Permit User Sessions
Loaded: loaded (/usr/lib/systemd/system/systemd-user-sessions.service; static
Active: inactive (dead)
Docs: man:systemd-user-sessions.service(8)
$ systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After systemd-user-sessions.service --no-pager
Requires=system.slice sysinit.target
Requisite=
Wants=
BindsTo=
PartOf=
[email protected] prefdm.service crond.service multi-user.target plymouth-quit-wait.service session-c2.scope display-manager-failure.service systemd-ask-password-wall.service session-c1.scope [email protected] shutdown.target [email protected] user-983.slice user-1000.slice plymouth-quit.service
After=system.slice systemd-journald.socket remote-fs.target network.target systemd-journal-flush.service sysinit.target nss-user-lookup.target basic.target
バグトラッカーと上記の情報は、問題が実際に起動に失敗したために発生したことを示すようです。systemd-usersession.service悪魔。
これが実際に私の場合に起こったことなので、次の回避策で禁止されているログイン状況を一時的に修正しました。
$ sudo systemctl start systemd-user-sessions.service
これをした後、/run/ログインしないでくださいファイルは存在しなくなり、他のシステムからSSHに接続できます。ただし、時にはユーザーが影響を受けるシステムのコンソールにアクセスできないため、信頼できません。
答え4
/etc/ssh/sshd_configでUsePAMをnoに設定します。
UsePAM no