/ var / run / sshd가 누락되어 재부팅 후 SSH 서버 작동이 중지됨


23

내 VPS가 약 3 개월 동안 재부팅되지 않았습니다. OpenVZ 가상화 유형의 서버에서 호스팅되며 운영 체제는 Ubuntu 16.04입니다. 어떤 이유로 VPS를 재부팅 한 후 ssh를 통해 서버에 연결할 수 없었습니다.받은 메시지는 다음과 같습니다.

ssh: connect to host srvname.com port 22: Connection refused

그래서 VPS에서 시리얼 콘솔을 열고 조사를 시작했습니다 ... 나는 openssh-server성공적으로 제거하고 다시 설치했습니다 . 인터넷에서 비슷한 문제에 관한 기사, 질문 및 답변을 읽는 데 2 ​​시간을 보냈습니다.

마지막으로 /var/run/sshd시스템 시작 중에 디렉토리 가 생성되지 않았다는 것을 이해했습니다 . 그리고 일단 수동으로 생성하면 아무런 문제없이 SSH 서비스를 시작할 수 있지만 다음에 재부팅 할 때 문제가 남아 있습니다. 그래서 내 질문은 :

  • 이 문제의 원인은 무엇입니까? /var/run/sshd시스템 시작 중에 왜 생성되지 않습니까?

  • 올바른 방법으로 문제를 해결하려면 어떻게해야합니까? 이 게시물 끝에 언급 된 일시적인 해결책을 찾았습니다.

  • 문제가 VPS의 OpenVZ 호스트와 관련이 있습니까? 호스팅 제공 업체에 해결을 요청해야합니까?


의 출력 systemctl status ssh.service, sshd -Ddp 22journalctl -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를 통해 로그인 할 수 있습니다.


링크 된 질문에 설명 된대로 재부팅 직전에 버전 업그레이드로 인해 재부팅 후이 문제가 갑자기 나타날 수 있습니다 . 교훈 : 커널이이를 지원할 수 있는지 확실하지 않으면 업그레이드하지 마십시오.

답변:


24

나는 이것이 내 경우와 같이 일부 VPS 개인에 의해 사용되는 현재 버전의 시스템 및 오래된 커널의 버그라는 것을 알았습니다. 런치 패드에서 볼 수 있듯이이 버그는 때때로 나타납니다. Bug # 45234 , Bug # 1811580 ; 또는 ServerFault : 부팅 할 때마다 / var / run / sshd가없는 이유는 무엇입니까?

이 문제에 대한 해결 방법은 거의 없으며 /var/run/sshdSSH 서버를 실행하기 전에 다른 방법으로 만들 수 있습니다 . 가능한 해결책은 다음과 같습니다.


해결 방법 1 :/usr/lib/tmpfiles.d/sshd.conf 다음과 같은 방법으로 수정 하십시오.

d /run/sshd 0755 root root

질문에서 언급했듯이에 /var/run대한 심볼릭 링크 /run는 최종 결과가 동일합니다. /var/run/sshd가 생성됩니다. 이유를 모르겠지만 작동합니다.


해결 방법 2 :/var/run/sshd SSH 서버를 만들고 다시 시작하는 Cron 작업을 사용하십시오 .crontab 이 목적으로 루트를 사용할 수 sudo crontab -e있습니다. 다음 항목을 실행 하고 추가하십시오.

@reboot mkdir -p -m0755 /var/run/sshd && systemctl restart ssh.service

현재이 솔루션을 사용하고 있으므로 테스트되었습니다.


해결 방법 3 : 버그 보고서 # 45234에 대한 이 주석표시된 것처럼/etc/rc.local 위와 동일한 작업을 수행하는 데 사용하십시오 .


1
고마워, 그것은 ssh를 해결하지만 systemd가 깨지는 더 넓은 문제는 아닙니다. systemd-tmpfiles --create을 실행 해 모든 오류를 참조
paulzag

1
당신은 맞습니다, @paulzag, 그러나 제 경우에는 일반적인 문제가 오래된 커널이라고 확신합니다. 나는 systemd-tmpfiles --create서버에 현명한 오작동이 없기 때문에 이러한 오류를 무시하기로 결정했습니다 . 현재의 문제는 동안 재부팅 후 운영 SSH 서비스를 활용하는 방법에 관한 문제가 종사 원하는 경우 해결책 : 찬성 투표 할 수 있습니다.
pa4080

나를 위해 일 "해결 방법 1"... 감사합니다 ... 업 투표 ...
Biswadeep 사카

2
해당 파일은 패키지 관리자가 관리하므로 직접 수정하는 대신 재정의 /usr/lib/tmpfiles.d/sshd.conf 하는 것이 좋습니다. 그렇게하려면 간단히 다음과 같이 변경하십시오 /etc/tmpfiles.d/sshd.conf. 이것은 sshd.confin 보다 우선합니다 /usr/lib. tmpfiles.d (5)의이 섹션을 참조하십시오 . OpenVZ VPS를 사용하는 것에 관계없이 훌륭한 답변은
바로이

1
대안 1이 작동 하는 이유 ; 당신은 사용 방지하고 무엇 심볼릭 링크, 에 문제를 갖는를하고 PrivSep의 디렉토리가 왜 생성되지 않습니다. 이 글타래 의 4 번째 메시지는 이것 에 대해 약간의 조명을줍니다. 물론, 관련 이 있지만 여기에도 동일한 내용이 적용됩니다. /var/runsystemd-tmpfilessystemd-tmpfiles-clean
ZeroKnight

1

/(루트 파일 시스템) 권한이 변경되지 않았 는지 확인할 수 있습니까? 해야 할 root:root아래 두 줄과 같은 :

drwxr-xr-x  25 root root      4096 дек 21 06:45 ..
drwxr-xr-x  25 root root      4096 дек 21 06:45 .

소유자가 루트가 아닌 다른 사용자 인 경우 시스템 시작 중에 시스템으로 모든 임시 파일을 작성하지 못하게됩니다. 다음 명령으로 확인할 수도 있습니다.

systemd-tmpfiles --create

루트 폴더 ( /)에 다른 권한이있는 경우 다음 명령을 사용하여 변경하십시오.

chown root: /

0

유용한 정보를 주신 모든 분들께 감사드립니다. Xenial Lubuntu에서 ssh-server의 문제는 실제로 Melebius & Stefan이 제안한 '/'의 소유권과 관련이 있습니다. ssh.service를
수동으로 작성 /var/run/sshd및 재시작 일시적으로 ssh-server. sshd.conf이 시스템에서는 편집 이 도움이되지 않았습니다. 그런 다음 마지막 제안에 따라 루트 폴더 소유권을 확인했습니다.

' ls -alF /'그리고 확실하게 실수로 로컬 사용자 / 그룹으로 변경되었습니다. 터미널에서 발행 : ' sudo chown root:root /'편집 내용과 상관없이 내 시스템을 수정했습니다 sshd.conf. 그래서 원래 상태로 복원했습니다 d /var/run/sshd 0755 root root.


0

단일 컴퓨터 (18.04.02 LTS, OpenSSH 7.6p1)에서 sshd의 여러 인스턴스를 실행할 때 내 컴퓨터 에서이 문제가 발생합니다.

문제는 sshd (예 : 명령 줄 또는 sshd_config파일)에 "권한 분리 디렉토리"의 위치를 ​​변경하기 위해 제공된 스위치가 없다는 것 입니다. 디렉토리는 /var/emptyOpenSSH 7.6p1 소스 코드에 따라에 있어야합니다.

우분투 패키지는 이것을으로 재 매핑했습니다 /run/sshd.

init.d두 서비스 스크립트가 디렉토리를 만들려고 할 때 부팅시 스크립트에 "스레드 안전"문제가 있습니다. 우분투와 OpenSSH에게 sshd에서 하드 코딩 된 "권한 분리 디렉토리"경로 이름 문제를 해결하도록 요청했습니다. 파일을 업로드 할 수 있으면 8.0p1 OpenSSH 소스 코드를 기반으로하는 고정 된 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.