Як змусити sshd перечитати його конфігураційний файл (не вбиваючи з'єднання ssh)?


8

Як я можу змусити сервер ssh перечитати його файл конфігурації ( /etc/sshd_config), не вбиваючи наявні ssh-з'єднання?

EDIT: Якщо я запускаю, 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їх усім.)
1313

(дивіться мою останню
редакцію

6
Так, ви маєте рацію, якщо HUP sshdпроцес, який має відкрите з'єднання, sshdприпиняється. Однак відправлення сигналу HUP до основного sshd, тобто батьківського, sshdякий розщеплює новий демон для кожного вхідного з'єднання, матиме бажаний ефект. У OS X, однак, немає головного sshd: sshdзапускається через launchdчерез launchproxyопцію -i, яка повідомляє, sshdщо він запускається з inetdта починається на вимогу, коли launchdотримує запит. За допомогою цього налаштування кожне з’єднання SSH отримує щойно розпочате sshdналаштування з новітньою версією його конфігураційного файлу.
jaume

Відповіді:


5

sshd не перечитає файл конфігурації, він перезавантажиться (див. man sshd (8)), однак він не повинен вбивати дитину / з'єднання, якщо ви надіслали SIGHUP до БРИТЕЛІ всіх. Саме тоді ви говорите про sshd, який прив'язується до порту 22, як у "звичайному" для Linux / FreeBSD / тощо. [є винятки та причини системного адміністрування, чому слід слідувати маршруту типу 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, оскільки startd породжує новий 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$

Я сш'д до маршрутизатора і назад, щоб продемонструвати проблему, і ви помітите, що два процеси вже є "мною". Порівняйте це з системою Linux (мій roouter), де ви помітите третій "справжній" 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.