¿Cómo hacer que sshd vuelva a leer su archivo de configuración (sin matar las conexiones ssh)?

8

¿Cómo puedo hacer que el servidor ssh vuelva a leer su archivo de configuración ( /etc/sshd_config), sin eliminar las conexiones ssh existentes?

EDITAR: si corro kill -HUP <SSHD_PID>, mato la conexión.

kjo
fuente
¿Has intentado enviar una señal de colgar kill -HUP <PID of sshd>? De acuerdo con man sshd: sshd rereads its configuration file when it receives a hangup signal, SIGHUP. (Puede encontrar el PID de sshdwith ps -ef|grep sshd. Si hay más de un sshdproceso, envíelo HUPa todos.)
jaume
(ver mi última edición)
kjo
66
Sí, tiene razón, si HUP un sshdproceso que tiene una conexión abierta, sshdfinaliza. Sin embargo, enviar una señal HUP al principal sshd, es decir, el padre sshdque bifurca un nuevo demonio para cada conexión entrante, tendrá el efecto deseado. Sin embargo, en OS X, no hay main sshd: sshdse inicia a launchdtravés launchproxyde la opción -i, que indica sshdque se ejecuta desde inetdy se inicia bajo demanda, cuando launchdrecibe una solicitud. Con esta configuración, cada conexión SSH se sshdconfigura de nuevo con la versión más reciente de su archivo de configuración.
jaume

Respuestas:

5

sshd no "vuelve a leer" su archivo de configuración, se reinicia solo (consulte man sshd (8)), sin embargo, no debería matar al niño / conexiones si envió el SIGHUP al PADRE de todos ellos. Es entonces cuando habla de sshd que se une al puerto 22, como en el "usual" con Linux / FreeBSD / etc. [hay excepciones y razones del administrador de sistemas para seguir la ruta de tipo MacOSX]

SIN EMBARGO MacOSX se ha lanzado como el que escucha y maneja el puerto 22 (desde mi máquina 10.10.4):

BlackYos:~ hvisage$ sudo lsof -i :22
Password:
COMMAND  PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd    1    root   57u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
launchd    1    root   58u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
launchd    1    root   62u  IPv6 0xdb59a664c78cd671      0t0  TCP *:ssh (LISTEN)
launchd    1    root   66u  IPv4 0xdb59a664c78d2e21      0t0  TCP *:ssh (LISTEN)
launchd    1    root   67u  IPv6 0xdb59a664c78cd671      0t0  TCP *:ssh (LISTEN)
launchd    1    root   68u  IPv4 0xdb59a664c78d2e21      0t0  TCP *:ssh (LISTEN)
ssh     1262 hvisage    3u  IPv4 0xdb59a664e59313b1      0t0  TCP blackyos:51628->hvs:ssh (ESTABLISHED)
sshd    1272    root    4u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
sshd    1272    root    5u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
sshd    1274 hvisage    4u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)
sshd    1274 hvisage    5u  IPv4 0xdb59a664e4b34941      0t0  TCP blackyos:ssh->hvs:39093 (ESTABLISHED)

Es launchd que podría necesitar "reiniciarse" en macosx, o contarle sobre diferentes puertos para escuchar sshd, ya que launchd generará un nuevo sshd para cada conexión de puerto 22 que entre.

verifique lo siguiente:

BlackYos:~ hvisage$ sudo ps -ef |grep -i ssh
  501  1263     1   0  6:46PM ??         0:00.06 /usr/bin/ssh-agent -l
    0  1272     1   0  6:46PM ??         0:00.40 sshd: hvisage [priv]
  501  1274  1272   0  6:46PM ??         0:00.03 sshd: hvisage@ttys004
  501  1262   570   0  6:46PM ttys001    0:00.05 ssh -v hvs
  501  1303  1275   0  6:50PM ttys004    0:00.00 grep -i ssh
BlackYos:~ hvisage$

Me he enviado a mi enrutador y viceversa para demostrar el problema, y ​​notarás que los dos procesos ya son "de mi propiedad". Compare esto con un sistema Linux (mi enrutador) donde notará el tercer sshd "real" que es propiedad de root:

hvisage@hvs:~$ ps -ef |grep -i ssh
root      4053     1  0 Jul11 ?        00:04:22 /usr/sbin/sshguard -i /var/run/sshguard.pid -l /var/log/auth.log -w /etc/sshguard/whitelist -a 40 -p 420 -s 1200
root     16244 30219  0 18:46 ?        00:00:00 sshd: hvisage [priv]
hvisage  16249 16244  0 18:46 ?        00:00:00 sshd: hvisage@pts/0
hvisage  16563 16250  0 18:52 pts/0    00:00:00 grep -i ssh
root     30219     1  0 Aug09 ?        00:00:00 /usr/sbin/sshd
hvisage@hvs:~$
Hvisage
fuente
1

La siguiente línea verifica primero la configuración y obtiene el PID del proceso principal manteniendo todos los demás (probado en Linux, zsh):

if /usr/sbin/sshd -t; then kill -HUP `ps aux | grep "/usr/sbin/sshd" | grep -v grep | awk '{ print $2 }'`; fi
Thomas
fuente
NO funciona en macOS ... No hay sshdproceso.
Según Lundberg el
-2

Simplemente:

~# kill -HUP $(pidof sshd)
Efímero
fuente
NO funciona en macOS ... No hay sshdproceso.
Según Lundberg el