Jak sprawić, aby sshd ponownie odczytał swój plik konfiguracyjny (bez zabijania połączeń ssh)?

8

Jak mogę zmusić serwer ssh do ponownego odczytania pliku konfiguracyjnego ( /etc/sshd_config), bez przerywania istniejących połączeń ssh?

EDYCJA: Jeśli uruchomię kill -HUP <SSHD_PID>, zabiję połączenie.

kjo
źródło
Czy próbowałeś wysyła sygnał rozłączenia: kill -HUP <PID of sshd>? Według man sshd: sshd rereads its configuration file when it receives a hangup signal, SIGHUP. (Możesz znaleźć PID sshdz ps -ef|grep sshd. Jeśli jest więcej niż jeden sshdproces, wyślij je HUPdo wszystkich.)
jaume
(zobacz moją ostatnią edycję)
kjo
6
Tak, masz rację, jeśli HUP sshdproces, który ma otwarte połączenie, zostanie sshdzakończony. Jednak wysłanie sygnału HUP do głównego sshd, czyli do rodzica, sshdktóry prosi nowego demona dla każdego połączenia przychodzącego, przyniesie pożądany efekt. Jednak w systemie OS X nie ma elementu głównego sshd: sshduruchamiany jest launchdza launchproxypomocą opcji -i, która informuje sshd, że jest uruchamiany inetdi uruchamiany na żądanie, gdy launchdotrzyma żądanie. Dzięki tej konfiguracji każde połączenie SSH jest świeżo uruchamiane i sshdkonfigurowane przy użyciu najnowszej wersji pliku konfiguracyjnego.
jaume

Odpowiedzi:

5

sshd nie „ponownie czyta” swojego pliku konfiguracyjnego, uruchamia się ponownie (patrz man sshd (8)), jednak nie powinien zabijać podrzędnych / połączeń, jeśli wysłałeś SIGHUP do ich wszystkich. Właśnie wtedy mówimy o sshd, który łączy się z portem 22, jak w „zwykłym” systemie Linux / FreeBSD / etc. [istnieją wyjątki i powody, dla których należy kierować się ścieżką typu MacOSX]

JEDNAK MacOSX został uruchomiony jako ten, który nasłuchuje i obsługuje port 22 (z mojego komputera 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)

Jest uruchamiany, co może wymagać ponownego uruchomienia na MacOSX lub powiedzenia o różnych portach nasłuchiwania dla sshd, ponieważ uruchomi się pojawi się nowy sshd dla każdego przychodzącego połączenia portu 22.

sprawdź następujące:

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$

Przekazałem ssh do routera iz powrotem, aby zademonstrować problem, a zauważysz, że oba procesy są już „własnością”. Porównaj to z systemem Linux (mój router), w którym zauważysz trzeci „prawdziwy” sshd, którego właścicielem jest 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
źródło
1

Następująca linia najpierw sprawdza konfigurację i pobiera PID głównego procesu zachowując wszystkie pozostałe (testowane w Linux, zsh):

if /usr/sbin/sshd -t; then kill -HUP `ps aux | grep "/usr/sbin/sshd" | grep -v grep | awk '{ print $2 }'`; fi
Tomasz
źródło
NIE działa na macOS ... Nie ma sshdprocesu.
Per Lundberg,
-2

Po prostu:

~# kill -HUP $(pidof sshd)
Efemeryczny
źródło
NIE działa na macOS ... Nie ma sshdprocesu.
Per Lundberg,