Как сделать так, чтобы sshd перечитал свой конфигурационный файл (не убивая соединения ssh)?


8

Как я могу заставить сервер ssh перечитать свой файл конфигурации ( /etc/sshd_config), не убивая существующие соединения ssh?

РЕДАКТИРОВАТЬ: Если я запускаю, kill -HUP <SSHD_PID>я уничтожаю соединение.


Вы пробовали отправки зависания сигнала: kill -HUP <PID of sshd>? По man sshd: sshd rereads its configuration file when it receives a hangup signal, SIGHUP. (Вы можете найти PID sshdс помощью ps -ef|grep sshd. Если существует более одного sshdпроцесса, отправьте HUPвсем им.)
jaume

(см. мое последнее редактирование)
kjo

6
Да, вы правы, если вы HUP sshdпроцесс, который имеет открытое соединение, sshdзавершается. Однако отправка сигнала HUP на главный сервер sshd, то есть на родительский sshdузел, который разветвляет нового демона для каждого входящего соединения, будет иметь желаемый эффект. В OS X, однако, нет main sshd: sshdзапускается с launchdпомощью launchproxyопции -i, которая сообщает, sshdчто запускается inetdи запускается по требованию, когда launchdполучает запрос. При такой настройке каждое SSH-соединение получает только что sshdнастроенную новую версию своего конфигурационного файла.
Jaume

Ответы:


5

sshd не «перечитывает» его файл конфигурации, он перезапускается сам (см. man sshd (8)), однако он не должен убивать дочерние элементы / соединения, если вы отправили SIGHUP РОДИТЕЛЯМ их всех. Именно тогда вы говорите о sshd, который связывается с портом 22, как в «обычном» случае с Linux / FreeBSD / etc. [существуют исключения и причины сисадмина, по которым следует следовать маршруту типа MacOSX]

ОДНАКО MacOSX запускается как тот, который слушает и обрабатывает порт 22 (с моей машины 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)

Он запускается, возможно, потребуется «перезапустить» в macosx или сообщить о разных портах для прослушивания sshd, так как launchd будет порождать новый sshd для каждого входящего соединения через порт 22.

проверьте следующее:

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$

Я отправил ssh'd на свой маршрутизатор и обратно, чтобы продемонстрировать проблему, и вы заметите, что эти два процесса уже "принадлежат" мне. Сравните это с системой Linux (мой рутер), где вы заметите третий «настоящий» sshd, принадлежащий 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

Следующая строка сначала проверяет конфигурацию и получает PID основного процесса, сохраняя все остальные (протестировано в Linux, zsh):

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

НЕ работает на macOS ... Нет sshdпроцесса.
За Лундберг

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.