Comment faire relire par sshd son fichier de configuration (sans tuer les connexions ssh)?


8

Comment puis-je demander au serveur ssh de relire son fichier de configuration ( /etc/sshd_config), sans tuer les connexions ssh existantes?

EDIT: Si je cours, kill -HUP <SSHD_PID>je tue la connexion.


Avez - vous essayé d' envoyer un signal de raccrochage: kill -HUP <PID of sshd>? Selon man sshd: sshd rereads its configuration file when it receives a hangup signal, SIGHUP. (Vous pouvez trouver le PID de sshdwith ps -ef|grep sshd. S'il y a plusieurs sshdprocessus, envoyez-les HUPà tous.)
jaume

(voir ma dernière édition)
kjo

6
Oui, vous avez raison, si vous HUP un sshdprocessus qui a une connexion ouverte, se sshdtermine. Cependant, l'envoi d'un signal HUP au principal sshd, c'est-à-dire au parent sshdqui envoie un nouveau démon pour chaque connexion entrante, aura l'effet souhaité. Sur OS X, cependant, il n'y a pas principale sshd: sshdest commencé par launchdgrâce launchproxyavec l' option -i, qui indique sshdqu'il est exécuté à partir inetdet a commencé à la demande, quand launchdreçoit une demande. Avec cette configuration, chaque connexion SSH obtient une sshdconfiguration fraîchement démarrée avec la dernière version de son fichier de configuration.
jaume

Réponses:


5

sshd ne "relit" pas son fichier de configuration, il redémarre lui-même (se référer à man sshd (8)), cependant, il ne devrait pas tuer l'enfant / les connexions si vous avez envoyé le SIGHUP au PARENT de tous. C'est à ce moment que vous parlez de sshd qui se lie au port 22, comme dans "d'habitude" avec Linux / FreeBSD / etc. [il existe des exceptions et des raisons d'administrateur système pour suivre l'itinéraire de type MacOSX]

TOUTEFOIS, MacOSX a lancé comme celui qui écoute et gère le port 22 (depuis ma machine 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)

C'est launchd qui devra peut-être être "redémarré" sur macosx, ou informé des différents ports à écouter pour sshd, car launchd engendrera un nouveau sshd pour chaque connexion de port 22 qui entre.

vérifiez les points suivants:

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$

J'ai envoyé à mon routeur et en arrière pour démontrer le problème, et vous remarquerez que les deux processus sont déjà "détenus" par moi. Comparez cela à un système Linux (mon roouter) où vous remarquerez le troisième "vrai" sshd appartenant à 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:~$

1

La ligne suivante vérifie d'abord la configuration et obtient le PID du processus principal en gardant tous les autres (testé sous Linux, zsh):

if /usr/sbin/sshd -t; then kill -HUP `ps aux | grep "/usr/sbin/sshd" | grep -v grep | awk '{ print $2 }'`; fi

Ne fonctionne PAS sur macOS ... Il n'y a pas de sshdprocessus.
Per Lundberg

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.