ระบบปฏิเสธ SSH และติดอยู่ที่ 'บูตเครื่อง' หลังจากการติดตั้ง systemd


12

ฉันมีปัญหาซึ่งสามารถทำซ้ำได้บน Linux Ubuntu VMs (14.04 LTS) ที่สร้างขึ้นใน Azure

หลังจากติดตั้ง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

เป็นระบบที่แขวนหรือมันก็ไม่ได้เริ่มต้นภูตเปลือกความปลอดภัยหรือไม่ คำถามระบุหนึ่ง; ร่างกายของโพสต์บอกเป็นนัยว่ามันอาจจะเป็นอย่างอื่น
DopeGhoti

@DopeGhoti ไม่มีทางที่ฉันจะตรวจสอบสิ่งที่เกิดขึ้นเนื่องจากฉันไม่สามารถเชื่อมต่อกับเครื่องจากระยะไกลได้ ฉันจะอัปเดตคำถามเพื่อให้ชัดเจนยิ่งขึ้น
Alex

คำตอบ:


15

ฉันสงสัยว่ามี/etc/nologinไฟล์อยู่ (ซึ่งเนื้อหาจะเป็น "ระบบกำลังทำการบูท") ซึ่งจะไม่ถูกลบออกหลังจากการติดตั้ง systemd

[อัพเดต] สิ่งที่ส่งผลต่อคุณคือข้อผิดพลาดที่รายงานบน BTS ของ Ubuntuเมื่อเดือนธันวาคมปีที่แล้ว เป็นเพราะ/var/run/nologinไฟล์ (= /run/nologinเนื่องจาก/var/runเป็น symlink ไป/run) ที่ไม่ถูกลบเมื่อสิ้นสุดการติดตั้ง systemd

/etc/nologinเป็นไฟล์ nologin มาตรฐาน /var/run/nologinเป็นไฟล์ทางเลือกที่อาจใช้โดยnologinโมดูล PAM ( man pam_nologin)

โปรดทราบว่าไม่มีnologinไฟล์ใดที่ส่งผลกระทบต่อการเชื่อมต่อโดยผู้ใช้รูทเฉพาะผู้ใช้ปกติเท่านั้นที่ได้รับการป้องกันจากการเข้าสู่ระบบ


ฉันทำซ้ำปัญหาไม่มีไฟล์ / etc / nologin อยู่ เซสชัน SSH ที่ใช้งานอยู่ได้รับการบำรุงรักษาอย่างไรก็ตามมีการปฏิเสธเซสชันใหม่จนกว่าฉันจะรีสตาร์ทเครื่อง
Alex

ฉันยังตรวจสอบ/etc/shadowและบัญชีไม่ได้ล็อค
อเล็กซ์

@Alex ตอบรับการปรับปรุง
xhienne

10

@ xhienne ให้ทิศทางที่ถูกต้องแก่ฉัน

หลังจากค้นหาผ่านระบบไฟล์ฉันพบไฟล์/run/nologin(@xhienne แนะนำ / etc / nologin) การลบซึ่งแก้ปัญหาได้

เงื่อนไขมีอยู่ใน /usr/lib/tmpfiles.d/systemd.conf

ฉันจะรวมขั้นตอนนี้ในสคริปต์ของฉัน

sudo rm /run/nologin

ดีใจที่ได้ผล ฉันได้อัพเดตคำตอบแล้ว
xhienne

2
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 กระจายข้อผิดพลาดที่ดูเหมือนว่าจะมีปัญหาที่เกี่ยวข้องเปิด: Bug 21080 - เข้าสู่ระบบปิดใช้งานโดย SSH / วิ่ง / nologin หลังจากรีบูต

หลังจากที่ประสบปัญหานี้ค่อนข้างบ่อยในการค้นหาติดตามช่วยระบุวิธีแก้ปัญหาที่อาจจะมีความเหมาะสมมากขึ้นกว่าเพียงแค่ลบที่วิ่ง / / เข้าสู่ระบบไฟล์

นี่คือข้อมูลบางส่วนที่เกี่ยวข้องกับการสืบค้นข้อมูลในตัวติดตามบั๊กนั้น:

$ 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=
Before=getty@tty1.service 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 user@983.service shutdown.target user@1000.service 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-user- session.service daemon

นี่คือความจริงที่เกิดขึ้นในกรณีของฉันดังนั้นวิธีแก้ปัญหาต่อไปนี้จะแก้ไขเงื่อนไขการเข้าสู่ระบบที่ถูกแบนชั่วคราว:

$ sudo systemctl start systemd-user-sessions.service

หลังจากทำสิ่งนี้ไฟล์/ run / nologinจะไม่มีอยู่อีกต่อไปและหนึ่งสามารถ SSH จากระบบอื่น อย่างไรก็ตามโปรดทราบว่าสิ่งนี้ไม่น่าเชื่อถือเนื่องจากบางครั้งผู้ใช้ไม่สามารถเข้าถึงคอนโซลของระบบที่ได้รับผลกระทบ


0

ฉันมีปัญหาเดียวกันนี้แน่นอน แต่ฉันคิดว่าหลายสถานการณ์สามารถสร้างได้

ในกรณีของฉันการเปิดใช้งานการเข้าถึงระยะไกลอีกครั้งฉันต้องร้องขอ KVM เพื่อเข้าถึงเซิร์ฟเวอร์ระยะไกลของเราโดยตรงจากนั้น

# 1. Start SSH service
/etc/init.d/ssh start

# 2. Remove the nologin file
rm /run/nologin

แต่ที่หน้าจอ KVM ฉันสามารถเห็นได้ว่ามันถูกบูตเข้าสู่โหมดฉุกเฉิน!

ก่อนหน้านี้ฉันทำการเปลี่ยนแปลงดิสก์ / พาร์ติชัน (เพิ่ม inodes) ซึ่งสร้าง UUID ใหม่และลืมเพิ่มไฟล์ / etc / fstab

หลังจากออกคำสั่ง:

blkid

... และคัดลอกการวาง UUID ใหม่บนไฟล์ fstab ฉันสามารถรีบูตเซิร์ฟเวอร์อีกครั้งโดยไม่มีปัญหาและการเข้าถึง SSH ระยะไกลก็ใช้ได้หลังจากนั้น


0

ใน / etc / ssh / sshd_config ตั้ง UsePAM เป็น no

UsePAM no

สิ่งนี้จะทำอะไรและผลที่ตามมาจะเป็นอย่างไร
Kusalananda

คำตอบนี้ดูเหมือนจะไม่นำไปใช้กับสถานการณ์นี้ - มันไม่ได้อธิบายว่าทำไมผู้ใช้เห็นข้อความ "ระบบกำลังบูท" หรืออธิบายว่าการติดตั้ง systemd สร้างการกำหนดค่าที่เสียหายได้อย่างไร
Jeff Schaller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.