Конец сеанса OpenSSH 6.7 [дубликат]

У меня есть сервер, на котором запущены Debian и sshd, и в случае, если мне нужно перезагрузить сервер, мой сеанс SSH зависает на стороне клиента до тех пор, пока не истечет время ожидания TCP. Я предполагаю, что это связано с тем, что когда sshd завершается, он не закрывает явно открытые сеансы SSH с хостом. Что мне сделать, чтобы sshd сначала отключил всех, а затем завершил себя как обычно? Пока я не вижу параметра в man sshd_config , который связан с поведением при завершении работы.

16
задан 17 July 2015 в 12:34
6 ответов

Kai išjungiate arba perkraunate sistemą, systemd bando kuo greičiau sustabdyti visas paslaugas. Tai reiškia, kad reikia nutraukti tinklą ir nutraukti visus dar gyvus procesus - paprastai tokia tvarka. Taigi, kai „systemd“ užmuša išsišakojusius SSH procesus, kurie tvarko jūsų SSH seansus, tinklo ryšys jau yra išjungtas ir jie niekaip negali maloniai uždaryti kliento ryšio.

Pirmiausia jums gali kilti mintis tiesiog užmušti visus SSH procesus kaip pirmąjį. žingsnis išjungimo metu, ir yra nemažai „systemd“ paslaugų failų, kurie tai daro.

Tačiau, žinoma, yra tvarkingesnis sprendimas (kaip tai „turėtų būti daroma“): systemd-logind .
systemd-logind seka aktyvių vartotojų seansus (vietinius ir SSH) ir visus juose pagimdytus procesus priskiria vadinamosioms „skiltelėms“. Tokiu būdu, kai sistema bus išjungta, systemd gali tiesiog SIGTERM viską, kas yra vartotojo griežinėliuose (įskaitant šakotą SSH procesą, kuris perduoda tam tikrą seansą), tada tęsti paslaugų ir tinklo uždarymą.

systemd-logind reikalingas PAM modulis, kad gautumėte pranešimus apie naujus vartotojo seansus, o norint patikrinti jo būseną, turėsite dbus naudoti loginctl , todėl įdiekite abu šiuos elementus:

apt-get install libpam-systemd dbus

Įsitikinkite, kad / etc / ssh / sshd_config iš tikrųjų naudos modulį su UsePAM taip .

32
ответ дан 4 January 2021 в 09:06

Tai reikia nustatyti kliento, o ne serverio pusėje. Redaguokite savo ~ / .ssh / config , kad būtų

ServerAliveInterval 15
ServerAliveCountMax 5

. Tai reiškia, kad po 15 sekundžių neveikimo jūsų klientas išsiųs pranešimą serveriui. Jei negaus jokio atsakymo, bandys dar kartą iki 5 kartų, o kai vis tiek negaus atsakymo, sesiją uždarys.

10
ответ дан 4 January 2021 в 09:06

У меня работает с lshd. Таким образом, решение будет

apt install lsh-server
apt remove openssh-server
0
ответ дан 4 January 2021 в 09:06

Вы можете указать параметры, о которых говорила Дженни Д. в своем ответе, только для одной команды ssh, например

ssh -t -o ServerAliveInterval=1 -o ServerAliveCountMax=1 user@host sudo poweroff

если вы делаете это часто, вы можете написать сценарий.

2
ответ дан 4 January 2021 в 09:06

Об этом сообщается в этой ошибке Debian , вам нужно только правильно настроить сценарии выключения, поставляемые с пакетом, потому что автоматически они не копируются по умолчанию:

cp /usr/share/doc/openssh-client/examples/ssh-session-cleanup.service /etc/systemd/system/
systemctl  enable ssh-session-cleanup.service
7
ответ дан 4 January 2021 в 09:06

к сожалению, сервер не позволил мне ответить в потоке, потому что с годами слишком мало очков. Но мне не нужен спам в других блогах, чтобы получить разблокировку ^^... так что выделенный ответ:

Как упоминал Rfraile

cp /usr/share/doc/openssh-client/examples/ssh-session-cleanup.service /etc/systemd/system/
systemctl  enable ssh-session-cleanup.service

работает. Чтобы использовать его без перезагрузки экземпляр/сервер, необходимо выполнить дополнительные задачи:

systemctl daemon-reload
systemctl start ssh-session-cleanup.service

, чтобы сервис был зарегистрирован и запущен, а systemd остановил его для перезагрузки/остановки.

0
ответ дан 4 January 2021 в 09:06

Теги

Похожие вопросы