VPS ของฉันไม่ได้ถูกรีบูทเป็นเวลาประมาณ 3 เดือน มันถูกโฮสต์บนเซิร์ฟเวอร์ที่มีประเภทการจำลองเสมือน OpenVZ และระบบปฏิบัติการคือ Ubuntu 16.04 ด้วยเหตุผลบางอย่างฉันรีบูต VPS และหลังจากนั้นฉันไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน ssh ข้อความที่ฉันได้รับคือ:
ssh: connect to host srvname.com port 22: Connection refused
ดังนั้นฉันจึงเปิด Serial Console บน VPS และเริ่มตรวจสอบ ... ฉันได้ลบและติดตั้งใหม่openssh-server
โดยไม่ประสบความสำเร็จ ฉันใช้เวลาสองชั่วโมงในการอ่านบทความคำถามและคำตอบเกี่ยวกับปัญหาที่คล้ายกันบนอินเทอร์เน็ต
ในที่สุดฉันก็จัดการที่จะเข้าใจว่าไดเรกทอรี/var/run/sshd
ไม่ได้ถูกสร้างขึ้นในระหว่างการเริ่มต้นระบบ และเมื่อฉันสร้างมันด้วยตนเองฉันสามารถเริ่มบริการ SSH ได้โดยไม่มีปัญหาใด ๆ แต่ในการรีบูตครั้งต่อไปปัญหายังคงอยู่ ดังนั้นคำถามของฉันคือ:
อะไรคือสาเหตุของปัญหานี้ ทำไม
/var/run/sshd
ไม่สร้างในช่วงเริ่มต้นระบบ?ฉันจะแก้ไขปัญหาในวิธีที่เหมาะสมได้อย่างไร ฉันพบวิธีแก้ปัญหาชั่วคราวที่กล่าวถึงในตอนท้ายของบทความนี้
ปัญหานี้อาจเกี่ยวข้องกับโฮสต์ OpenVZ ของ VPS หรือไม่ ฉันควรขอให้ผู้ให้บริการโฮสติ้งแก้ปัญหาหรือไม่
การส่งออกของsystemctl status ssh.service
, sshd -Ddp 22
และjournalctl -xe
เป็น:
# systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit-hit) since вт 2019-01-15 12:58:08 EET; 22s ago
Process: 407 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=255)
яну 15 12:58:07 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
яну 15 12:58:07 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 12:58:07 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 12:58:08 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Start request repeated too quickly.
яну 15 12:58:08 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
# $(which sshd) -Ddp 22
debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g 1 Mar 2016
debug1: private host key #0: ssh-rsa SHA256:...
debug1: private host key #1: ssh-dss SHA256:...
debug1: private host key #2: ecdsa-sha2-nistp256 SHA256:...
debug1: private host key #3: ssh-ed25519 SHA256:...
Missing privilege separation directory: /var/run/sshd
# journalctl -xe
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has begun starting up.
яну 15 13:21:21 srvname sshd[1688]: Missing privilege separation directory: /var/run/sshd
яну 15 13:21:21 srvname systemd[1]: ssh.service: Control process exited, code=exited status=255
яну 15 13:21:21 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:21 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:21 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 13:21:22 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has finished shutting down.
яну 15 13:21:22 srvname systemd[1]: Starting OpenBSD Secure Shell server...
-- Subject: Unit ssh.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has begun starting up.
яну 15 13:21:22 srvname sshd[1691]: Missing privilege separation directory: /var/run/sshd
яну 15 13:21:22 srvname systemd[1]: ssh.service: Control process exited, code=exited status=255
яну 15 13:21:22 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 13:21:22 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has finished shutting down.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Start request repeated too quickly.
яну 15 13:21:22 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
เนื้อหาของ/usr/lib/tmpfiles.d/sshd.conf
และ/etc/init/ssh.conf
คือ:
# cat /usr/lib/tmpfiles.d/sshd.conf
d /var/run/sshd 0755 root root
# cat /etc/init/ssh.conf | sed '/^#/ d'
description "OpenSSH server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
umask 022
env SSH_SIGSTOP=1
expect stop
console none
pre-start script
test -x /usr/sbin/sshd || { stop; exit 0; }
test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
mkdir -p -m0755 /var/run/sshd
end script
exec /usr/sbin/sshd -D
ข้อมูลเพิ่มเติมเกี่ยวกับระบบ:
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
# uname -a
Linux srvname 2.6.32-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018 x86_64 x86_64 x86_64 GNU/Linux
# apt show openssh-server | grep 'Version'
Version: 1:7.2p2-4ubuntu2.6
วิธีแก้ปัญหาชั่วคราว:
ฉันพบว่า/var/run
เป็นลิงก์สัญลักษณ์/run
ฉันไม่ทราบว่าทำไมถึงเป็นสิ่งจำเป็น แต่เมื่อฉันแก้ไขเนื้อหาของไฟล์/usr/lib/tmpfiles.d/sshd.conf
จาก:
d /var/run/sshd 0755 root root
ไปที่:
d /run/sshd 0755 root root
ทุกอย่างเป็นไปด้วยดีเมื่อระบบเริ่มทำงานบริการ SSH เริ่มต้นตามปกติและฉันสามารถลงชื่อเข้าใช้ผ่าน SSH ได้