ubuntu 16에서 사용자 정의 빌드 openssh-hpn-sshd의 무제한 활성화 상태

ubuntu 16에서 사용자 정의 빌드 openssh-hpn-sshd의 무제한 활성화 상태

openssh(OpenSSH_7.2p2-hpn14v11)의 hpn 버전을 컴파일했는데 sshd 자체가 제대로 작동합니다. 문제는 systemd가 서비스를 제대로 시작할 수 없기 때문에 2-3분마다 sshd를 다시 시작한다는 것입니다. 동일한 버전의 Ubuntu 패키지로 교체하면 제대로 작동합니다. 가상 머신에 새로 설치하여 테스트하기도 했습니다. 마찬가지였습니다. 내가 뭘 잘못했나요?

 ● ssh.service - OpenBSD Secure Shell server 
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) 
Active: activating (start) since Wed 2016-09-28 20:18:49 EDT; 42s ago 
Main PID: 24279 (sshd) 
Tasks: 9 
Memory: 6.8M 
CPU: 164ms 
CGroup: /system.slice/ssh.service ├─20041 sshd: 
root@pts/0 ├─20047 
-bash ├─24279 
/usr/sbin/sshd -D ├─24628 
└─24629 pager
Sep 28 20:18:49 hostname systemd[1]: Starting OpenBSD Secure Shell server... Sep 28 20:18:49 hostname sshd[24279]: Server listening on 0.0.0.0 port 22
cat /lib/systemd/system/ssh.service
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service


Logs:
    Sep 29 02:22:03 xxx sshd[15007]: Server listening on 0.0.0.0 port 22.
    Sep 29 02:22:03 xxx sshd[15007]: Server listening on :: port 22.
    Sep 29 02:23:33 xxx systemd[1]: ssh.service: Start operation timed out. Terminating.
    Sep 29 02:23:33 xxx systemd[1]: Failed to start OpenBSD Secure Shell server.
    Sep 29 02:23:33 xxx systemd[1]: ssh.service: Unit entered failed state.
    Sep 29 02:23:33 xxx systemd[1]: ssh.service: Failed with result 'timeout'.
    Sep 29 02:23:33 xxx systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
    Sep 29 02:23:33 xxx systemd[1]: Stopped OpenBSD Secure Shell server.
    Sep 29 02:23:33 xxx systemd[1]: Starting OpenBSD Secure Shell server...
    Sep 29 02:23:33 xxx sshd[15775]: Server listening on 0.0.0.0 port 22.
    Sep 29 02:23:33 xxx sshd[15775]: Server listening on :: port 22.

답변1

우분투는 systemd가 시작될 때 이를 알려주는 systemd 방식을 포기합니다. Type=notifySystemd 패치 없이 OpenSSH를 사용할 수 없다는 것은 옵션에서 분명합니다 . 가능한 해결책은 두 가지가 있습니다.

  1. 줄을 Type=notify다음으로 변경 Type=forking하고 새 줄을 추가하면 PIDFile=/var/run/sshd.pid다음 ExecStart과 같이 변경되어야 합니다 /usr/sbin/sshd $SSHD_OPTS.

    Type=forking
    PIDFile=/var/run/sshd.pid
    ExecStart=/usr/sbin/sshd $SSHD_OPTS
    
  2. 다음을 사용하여 OpenSSH를 구축하세요.수리하다데비안/우분투에서:


From fe97848e044743f0bac019a491ddf0138f84e14a Mon Sep 17 00:00:00 2001
From: Michael Biebl <[email protected]>
Date: Mon, 21 Dec 2015 16:08:47 +0000
Subject: Add systemd readiness notification support

Bug-Debian: https://bugs.debian.org/778913
Forwarded: no
Last-Update: 2016-01-04

Patch-Name: systemd-readiness.patch
---
 configure.ac | 24 ++++++++++++++++++++++++
 sshd.c       |  9 +++++++++
 2 files changed, 33 insertions(+)

diff --git a/configure.ac b/configure.ac
index f822fb3..6cafb15 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4319,6 +4319,29 @@ AC_ARG_WITH([kerberos5],
 AC_SUBST([GSSLIBS])
 AC_SUBST([K5LIBS])

+# Check whether user wants systemd support
+SYSTEMD_MSG="no"
+AC_ARG_WITH(systemd,
+   [  --with-systemd          Enable systemd support],
+   [ if test "x$withval" != "xno" ; then
+       AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no])
+       if test "$PKGCONFIG" != "no"; then
+           AC_MSG_CHECKING([for libsystemd])
+           if $PKGCONFIG --exists libsystemd; then
+               SYSTEMD_CFLAGS=`$PKGCONFIG --cflags libsystemd`
+               SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd`
+               CPPFLAGS="$CPPFLAGS $SYSTEMD_CFLAGS"
+               SSHDLIBS="$SSHDLIBS $SYSTEMD_LIBS"
+               AC_MSG_RESULT([yes])
+               AC_DEFINE(HAVE_SYSTEMD, 1, [Define if you want systemd support.])
+               SYSTEMD_MSG="yes"
+           else
+               AC_MSG_RESULT([no])
+           fi
+       fi
+   fi ]
+)
+
 # Looking for programs, paths and files

 PRIVSEP_PATH=/var/empty
@@ -5121,6 +5144,7 @@ echo "                   libedit support: $LIBEDIT_MSG"
 echo "  Solaris process contract support: $SPC_MSG"
 echo "           Solaris project support: $SP_MSG"
 echo "         Solaris privilege support: $SPP_MSG"
+echo "                   systemd support: $SYSTEMD_MSG"
 echo "       IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
 echo "           Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
 echo "                  BSD Auth support: $BSD_AUTH_MSG"
diff --git a/sshd.c b/sshd.c
index 837409b..868df9e 100644
--- a/sshd.c
+++ b/sshd.c
@@ -85,6 +85,10 @@
 #include <prot.h>
 #endif

+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#endif
+
 #include "xmalloc.h"
 #include "ssh.h"
 #include "ssh1.h"
@@ -2117,6 +2121,11 @@ main(int ac, char **av)
            unsetenv("SSH_SIGSTOP");
        }

+#ifdef HAVE_SYSTEMD
+       /* Signal systemd that we are ready to accept connections */
+       sd_notify(0, "READY=1");
+#endif
+
        /* Accept a connection and return in a forked child */
        server_accept_loop(&sock_in, &sock_out,
            &newsock, config_s);

답변2

2019년 10월 28일 현재 Ubuntu 19.04에서 openssh-8.1p1을 컴파일하려면 이 작업이 여전히 필요합니다.

여기에서 필수 패치의 최신 버전을 찾을 수 있습니다.https://salsa.debian.org/ssh-team/openssh/blob/master/debian/patches/systemd-readiness.patch

pkg-config( apt-get install pkg-config) 도 설치해야 합니다 . 그렇지 않으면 패치에 필요한 라이브러리가 ./configure --with-systemd인식되지 않습니다 .libsystemd-dev

답변3

sshdOpenSSH 서버가 "활성" 상태에 멈추는 또 다른 이유가 있습니다.

즉, 원인은 관련 OpenSSL 모듈이 초기화되지 못하게 하는 "엔트로피 고갈"일 수 있습니다.

"엔트로피 소진"이 실제로 문제인지 확인하려면 먼저 다음 명령을 실행하여 OpenSSH 서비스를 중지하여 더 이상 "활성" 상태에 머물지 않도록 하십시오.

systemctl stop ssh

...중지한 후 sshd다음 명령을 실행하여 다시 시작하세요.

/usr/sbin/sshd -ddd

...그리고 다음 메시지에 대한 디버그 출력을 살펴보세요.
참고: 이 -ddd옵션은 OpenSSH 서비스 시작 중에 자세한 디버그 출력을 활성화합니다.

무작위: 속도 제한으로 인해 N개의 무작위 경고가 누락되었습니다.

명령을 실행한 후 이 메시지가 나타나면 /usr/sbin/sshd -ddd엔트로피 풀이 소진되어 OpenSSH 서비스의 SSL 모듈을 초기화하지 못했음을 의미합니다.

이 문제를 해결하려면 다음 명령을 실행하십시오.

apt-get install haveged

..이것은 더 빠른 엔트로피 소스를 설치합니다. 다음에 대해 더 자세히 읽을 수 있습니다.haveged 여기.

이렇게 하면 영구적으로 수정됩니다.

관련 정보