VPS saya tidak di-boot ulang selama sekitar 3 bulan. Di-host di server dengan tipe virtualisasi OpenVZ dan sistem operasinya adalah Ubuntu 16.04. Untuk beberapa alasan, saya reboot VPS dan setelah itu, saya tidak dapat terhubung ke server melalui ssh, pesan yang saya terima adalah:
ssh: connect to host srvname.com port 22: Connection refused
Jadi saya membuka Serial Console di VPS dan mulai menyelidiki ... Saya sudah membersihkan dan menginstal ulang openssh-server
tanpa hasil. Saya menghabiskan dua jam membaca artikel, pertanyaan, dan jawaban tentang masalah serupa di Internet.
Akhirnya saya berhasil memahami bahwa direktori /var/run/sshd
tidak dibuat saat startup sistem. Dan begitu saya membuatnya secara manual saya dapat memulai layanan SSH tanpa masalah, tetapi pada reboot berikutnya masalahnya tetap ada. Jadi pertanyaan saya adalah:
Apa yang bisa menjadi penyebab masalah ini? Mengapa
/var/run/sshd
tidak dibuat saat startup sistem?Bagaimana saya bisa menyelesaikan masalah dengan cara yang tepat? Saya menemukan solusi sementara yang disebutkan di akhir posting ini.
Apakah masalah ini dapat dikaitkan dengan host OpenVZ dari VPS? Haruskah saya meminta penyedia hosting untuk menyelesaikannya?
Output dari systemctl status ssh.service
, sshd -Ddp 22
dan journalctl -xe
adalah:
# 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'.
Isi dari /usr/lib/tmpfiles.d/sshd.conf
dan /etc/init/ssh.conf
adalah:
# 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
Informasi tambahan tentang sistem:
# 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
Solusi sementara:
Saya menemukan itu /var/run
adalah tautan simbolis ke /run
, saya tidak tahu mengapa ini diperlukan, tetapi ketika saya mengubah konten file /usr/lib/tmpfiles.d/sshd.conf
dari:
d /var/run/sshd 0755 root root
untuk:
d /run/sshd 0755 root root
semuanya berjalan dengan baik pada startup sistem, layanan SSH dimulai secara normal dan saya dapat masuk melalui SSH.
Jawaban:
Saya menemukan ini adalah bug dengan versi sekarang dari kernel systemd dan kernel lama yang digunakan oleh beberapa VPS privdes seperti dalam kasus saya. Bug ini muncul dari waktu ke waktu, seperti yang dapat kita lihat di Launchpad: Bug # 45234 , Bug # 1811580 ; atau di ServerFault: Mengapa saya hilang / var / run / sshd setelah setiap boot?
Ada beberapa solusi dari masalah ini, mereka semua datang bersama-sama ke cara alternatif untuk membuat
/var/run/sshd
sebelum menjalankan server SSH. Berikut adalah tiga solusi yang mungkin.Penanganan masalah 1: Ubah
/usr/lib/tmpfiles.d/sshd.conf
dengan cara berikut:Seperti yang disebutkan dalam pertanyaan,
/var/run
adalah tautan simbolis ke/run
, hasil akhirnya identik:/var/run/sshd
dibuat. Saya tidak tahu mengapa, tetapi ini berhasil.Solusi 2: Gunakan pekerjaan Cron yang akan membuat
/var/run/sshd
dan memulai kembali server SSH, Anda dapat menggunakan rootcrontab
untuk tujuan ini - jalankansudo crontab -e
dan tambahkan entri berikut:Saat ini saya menggunakan solusi ini, jadi ini juga diuji.
Solusi 3: Gunakan
/etc/rc.local
untuk melakukan hal yang sama seperti di atas, seperti yang ditunjukkan dalam komentar ini pada laporan bug # 45234.sumber
systemd-tmpfiles --create
menunjukkan, karena saat ini tidak ada kesalahan fungsi yang masuk akal pada server. Secara umum, pertanyaan saat ini adalah tentang bagaimana cara mendapatkan layanan SSH operasional setelah reboot ketika masalah sedang terjadi. Jika Anda ingin, Anda dapat meningkatkan solusi :)/usr/lib/tmpfiles.d/sshd.conf
alih mengubahnya secara langsung, karena file tersebut dikelola oleh manajer paket. Untuk melakukannya, cukup buat perubahan/etc/tmpfiles.d/sshd.conf
; ini akan lebih diutamakan daripadasshd.conf
di/usr/lib
. Lihat bagian ini di tmpfiles.d (5) ./var/run
symlink, yang merupakansystemd-tmpfiles
masalah, dan mengapa dir PrivSep tidak dibuat. Pesan ke-4 terakhir dari utas ini memberi penjelasan tentang ini. Memang, ini masalahsystemd-tmpfiles-clean
, tapi saya merasa hal yang sama berlaku di sini.Bisakah Anda memeriksa apakah
/
izin Anda (sistem file root) tidak diubah? Harusroot:root
seperti dua baris di bawah ini:Jika pemiliknya adalah pengguna lain (dan bukan root) ini akan mencegah pembuatan semua file sementara oleh systemd selama startup sistem. Anda dapat memeriksa juga dengan perintah:
Jika folder root (
/
) memiliki izin berbeda, harap ubah dengan perintah berikut:sumber
Terima kasih semuanya atas informasi yang bermanfaat. Masalah dengan ssh-server di Xenial Lubuntu saya memang terkait dengan kepemilikan '/' seperti yang disarankan oleh Melebius & Stefan.
Secara manual membuat
/var/run/sshd
dan memulai kembali ssh.service sementara ssh-server sementara. Mengeditsshd.conf
tidak membantu dalam sistem ini. Kemudian mengikuti saran terakhir, saya memeriksa kepemilikan folder root dengan:'
ls -alF /
' dan tentu saja, itu tidak sengaja telah diubah menjadi pengguna / grup lokal. Mengeluarkan dari terminal: 'sudo chown root:root /
' memperbaiki sistem saya, terlepas dari edit kesshd.conf
. Jadi saya mengembalikannya ke kondisi semula, yaitud /var/run/sshd 0755 root root
.sumber
Saya mengalami masalah ini pada mesin saya ketika saya menjalankan beberapa contoh sshd pada satu mesin (18.04.02 LTS, OpenSSH 7.6p1).
Masalahnya adalah bahwa tidak ada switch di sshd (yaitu baris perintah atau
sshd_config
file) yang disediakan untuk mengubah lokasi "direktori pemisahan hak istimewa". Direktori harus berada di/var/empty
, sesuai dengan kode sumber OpenSSH 7.6p1.Paket Ubuntu telah memetakannya kembali ke
/run/sshd
.Ada masalah "keamanan utas" di
init.d
skrip saat boot ketika kedua skrip layanan mencoba membuat direktori. Saya telah meminta Ubuntu dan OpenSSH untuk mengatasi masalah nama jalur "privilege separation directory" yang telah dikodekan dalam sshd. Jika saya dapat mengunggah file, saya memperbaikinya berdasarkan kode sumber OpenSSH 8.0p1.sumber