Como o sshd releu seu arquivo de configuração (sem matar as conexões ssh)?


8

Como faço para o servidor ssh reler seu arquivo de configuração ( /etc/sshd_config), sem interromper as conexões ssh existentes?

EDIT: Se eu executar, kill -HUP <SSHD_PID>eu mato a conexão.


Você já tentou enviar um sinal de desligamento kill -HUP <PID of sshd>:? De acordo com man sshd: sshd rereads its configuration file when it receives a hangup signal, SIGHUP. (Você pode encontrar o PID sshdcom ps -ef|grep sshdSe houver mais de um. sshdProcesso, envio HUPa todos eles.)
jaume

(ver a minha edição mais recente)
kjo

6
Sim, você está certo, se você HUP um sshdprocesso que possui uma conexão aberta, sshdtermina. No entanto, o envio de um sinal HUP para o principal sshd, ou seja, o pai sshdque bifurca um novo daemon para cada conexão de entrada, terá o efeito desejado. No OS X, no entanto, não há nenhuma principal sshd: sshdé iniciado por launchdmeio launchproxyde opção -i, que diz sshdque ele é executado a partir de inetde iniciado sob demanda, quando launchdrecebe um pedido. Com essa configuração, toda conexão SSH é iniciada sshdcom a versão mais recente do seu arquivo de configuração.
jaume

Respostas:


5

O sshd não "relê" seu arquivo de configuração, ele se reinicia (consulte man sshd (8)), no entanto, não deve matar o filho / conexões se você enviou o SIGHUP ao PARENT de todos eles. É quando você está falando sobre o sshd que se liga à porta 22, como no "usual" do Linux / FreeBSD / etc. [existem exceções e razões de administrador de sistema para seguir a rota do tipo MacOSX]

No entanto, o MacOSX lançou como aquele que escuta e manipula a porta 22 (da minha 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)

É o launchd que pode precisar ser "reiniciado" no macosx ou instruído sobre portas diferentes para ouvir o sshd, pois o launchd gera um novo sshd para cada conexão da porta 22 que entra.

verifique o seguinte:

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$

Enviei um ssh para meu roteador e voltei para demonstrar o problema, e você notará que os dois processos já são "de propriedade" de mim. Compare isso com um sistema Linux (meu roouter) onde você notará o terceiro sshd "real" que pertence ao 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

A linha a seguir verifica primeiro a configuração e obtém o PID do processo principal, mantendo todos os outros (testados no Linux, zsh):

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

NÃO funciona no macOS ... Não há sshdprocesso.
Per Lundberg

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.