Мои сеансы SSH, похоже, прекращаются, хотя это не моя главная проблема - главная проблема в том, что мои предыдущие сеансы все еще живы, еще хуже, хотя одна из них работает, не visudo
давая мне доступа к ней!
who
показывает несколько сеансов, кроме моего текущего, который, как я знаю, отключен, как я могу прекратить старые, чтобы освободить их ресурсы?
fuser -k /dev/pts/0
или любой другой терминал, который будет отображаться вwho
выводе. Немного странно, что все эти игнорируемые SIGHUP. Они работали наscreen
сессии или что-то?who
больше нет), спасибо!Ответы:
Чтобы решить непосредственную проблему, что файл sudoers заблокирован, вы можете просто удалить файл блокировки. Обычно это `/etc/sudoers.tmp"; проверьте man-страницу для проверки visudo. Если вы удалите файл блокировки, вы можете снова запустить visudo.
Чтобы удалить все сеансы, которые все еще остаются в подвешенном состоянии, сначала найдите pid вашего текущего сеанса. Затем, если ваш собственный pid - 12345, сделайте
Возможно, вы захотите сделать это без окончательного
| sh
предварительного, просто чтобы проверить PID, которые вы планируете убить.Если вы работаете в Linux, вы можете вместо этого использовать
убить ваш самый старый сеанс SSH. Продолжайте делать это, пока ваш текущий сеанс не останется единственным.
Вы также можете установить
ServerAliveInterval 15
в вашей ,.ssh/config
чтобы послать сообщения KEEPALIVE каждые 15 секунд , когда никакие данные не были переданы.man ssh_config
для дополнительной информации.источник
grep -v 12345
служит часть синтаксиса? пройти все что не содержит12345
?grep -v 12345
означает «удалить любое совпадение строк12345
из совпадения». Следовательно, вы должны сначала определить PID вашего собственного сеанса и использовать этот PID вместо12345
.who
илиtop
все равно показывает старое количество подписанных пользователей, даже оно должно показывать только 1. Как это можно принудительно обновить?Если вы перечисляете процессы так, что видите их команды и аргументы (как, например,
ps -f
из procps, то вы должны увидеть процессы sshd, называемые, например:Терминал (
pts/7
) является ключевой частью здесь - если вы сравните его с вашим текущим терминалом (tty
), вы можете увидеть, какой из них является активным сеансом. Конечно, есть и другие способы сделать это (например, посмотреть PID запущенной оболочки и найти ее в дереве процессов), но это, вероятно, самый простой способ. Затем вы можете использовать что-то вроде этого:Затем вы можете передать PID для уничтожения,
xargs
но всегда убедитесь, что вы не уничтожаете основнойsshd
процесс, который обрабатывает новые соединения .В связи с этим следует иметь в виду, что в общем случае анализируемый
ps
вывод подвержен ошибкам (особенно в различных системах) из-за изменчивости его форматов вывода (здесь это в значительной степени смягчается за счет использования-o pid= -o command=
).источник
Это убьет сессии, висящие на 2+ дня. Это можно поставить как cron.
Это убьет все, кроме вашего (последний активный сеанс). Запустите это из терминала.
источник