He compilado la versión hpn de openssh (OpenSSH_7.2p2-hpn14v11), sshd en sí funciona bien. El problema es que cada 2-3 minutos systemd reinicia sshd ya que no inicia ese servicio correctamente. Cuando lo reemplazo con el paquete de Ubuntu de la misma versión, funciona como debería. Incluso lo probé en VM con instalación limpia, lo mismo. ¿Qué estoy haciendo mal?
● 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.
Respuesta1
Ubuntu dio marcha atrás para usar systemd, una forma de informarle a systemd cuándo comenzó. Es obvio por la opción Type=notify
, que hace imposible usar OpenSSH sin el parche Systemd. Hay dos posibles soluciones:
Cambie la línea
Type=notify
yType=forking
agregue una nueva línea conPIDFile=/var/run/sshd.pid
yExecStart
debe cambiarse a/usr/sbin/sshd $SSHD_OPTS
:Type=forking PIDFile=/var/run/sshd.pid ExecStart=/usr/sbin/sshd $SSHD_OPTS
Construye tu OpenSSH con elparchede Debian/Ubuntu:
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);
Respuesta2
A partir de hoy, 28/10/2019, esto todavía es necesario en Ubuntu 19.04 al compilar openssh-8.1p1.
Puede encontrar la última versión del parche que necesita aquí:https://salsa.debian.org/ssh-team/openssh/blob/master/debian/patches/systemd-readiness.patch
También debe instalar pkg-config
( apt-get install pkg-config
); de lo contrario, ./configure --with-systemd
no reconocerá la libsystemd-dev
biblioteca que necesita el parche.
Respuesta3
Hay otra razón por la que el sshd
servidor OpenSSH está bloqueado en el estado "activando".
Es decir, la causa podría ser el "agotamiento de la entropía", que impide que se inicialice el módulo OpenSSL relacionado.
Para verificar que el "agotamiento de entropía" es realmente el problema, primero detenga el servicio OpenSSH, para que ya no esté atascado en el estado "activando", emitiendo el siguiente comando:
systemctl stop ssh
...después de que sshd
se haya detenido, emita el siguiente comando para iniciarlo nuevamente:
/usr/sbin/sshd -ddd
...y observe el resultado de depuración del siguiente mensaje:
Por cierto: la -ddd
opción habilita una salida de depuración detallada durante el inicio del servicio OpenSSH.
aleatorio: N uradvertencias aleatorias omitidas debido a la limitación de velocidad
Si este mensaje aparece después de emitir el /usr/sbin/sshd -ddd
comando, significa que el módulo SSL del servicio OpenSSH no puede inicializarse porque el grupo de entropía se ha agotado.
Para solucionar este problema, emita el comando:
apt-get install haveged
..que instalará una fuente de entropía más rápida. Puedes leer más sobrehaveged
aquí.
Esto lo convierte en una solución permanente.