Завершение сеансов SSH

Мои сеансы SSH, кажется, падают, хотя это не моя главная проблема. Основная проблема заключается в том, что мои предыдущие сеансы все еще живы, а еще хуже, но один из них работает visudo препятствуя мне получить доступ к нему!

who показывает несколько сеансов, кроме моего текущего, который, как я знаю, отключен, как я могу закончить старые, чтобы освободить их ресурсы?

  • Как предотвратить запуск ssh-агента в CentOS?
  • Подавить баннер для `ssh` или` scp`
  • Как отключить SSLv3 на SSH-сервере OpenSSH, чтобы избежать POODLE?
  • Как поместить туннель в туннель?
  • Как SSH через промежуточный сервер
  • Тайм-аут соединения SSH через пару секунд, когда мой второй интерфейс закрыт
  • rsync все файлы удаленной машины через SSH без пользователя root?
  • Как понять ssh-keygen и ssh-copy-id?
  • 2 Solutions collect form web for “Завершение сеансов SSH”

    Чтобы решить ближайшую проблему, файл sudoers заблокирован, вы можете просто удалить файл блокировки. Обычно это будет `/etc/sudoers.tmp ', проверьте контрольную страницу для visudo для проверки. Если вы удалите файл блокировки, вы можете снова запустить visudo.

    Чтобы удалить все сеансы, которые все еще остаются висящими, сначала найдите pid вашего текущего сеанса. Затем, если ваш собственный pid равен 12345, сделайте

     ps -ef | grep sshd | grep -v root | grep -v 12345 | grep -v grep | awk '{print "sudo kill -9", $2}' |sh 

    Вы можете сделать это без финального | sh | sh сначала просто проверить PID, которые вы планируете убить.

    Если вы работаете в Linux, вы можете вместо этого использовать

     pkill -o -u YOURUSERNAME sshd 

    чтобы убить ваш самый старый сеанс SSH. Продолжайте делать это, пока ваш текущий сеанс не останется единственным.

    Вы также можете установить ServerAliveInterval 15 в свой .ssh/config для отправки сообщения keepalive каждые 15 секунд, когда данные не были отправлены. man ssh_config для получения дополнительной информации.

    Если вы перечислите процессы так, чтобы вы увидели их команду и аргументы (например, ps -f из procps), вы должны увидеть процессы sshd, например:

     sshd: user@pts/7 

    Терминал ( pts/7 ) является ключевой частью здесь – если вы сравните его с вашим текущим терминалом ( tty ), вы увидите, какой из них является активным сеансом. Конечно, есть и другие способы сделать это (например, посмотреть на PID текущей запущенной оболочки и найти ее в дереве процессов), но это, пожалуй, самый простой. Затем вы можете использовать что-то в этом направлении:

     # current tty name TTY=$(tty | cut -f3- -d/) # PIDs of other sshd processes ps -o pid= -o command= -C sshd \ | grep sshd:.*@ \ | grep -v "@$TTY" \ | sed "s/ sshd.*//" 

    Затем вы можете xargs PID для уничтожения с помощью xargs но всегда убедитесь, что вы не убиваете основной процесс sshd который обрабатывает новые соединения .

    Следует иметь в виду, что в целом анализ разбора ps выводится с ошибкой (особенно в разных системах) из-за изменчивости его выходных форматов (здесь в значительной степени смягчается использование -o pid= -o command= ) ,

    Linux и Unix - лучшая ОС в мире.