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

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

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

  • Загрузить файл по команде ssh и выполнить команду на удаленной машине
  • Запретить запуск файла сценария удаленно с помощью SSH
  • Возможно ли обходить ретранслятор SSH-сервера?
  • Почему wget не работает через туннель ssh? Что делает прокси-сервер для предотвращения использования ssh-client?
  • Могу ли я создать контейнер Docker из Dockerfile интерактивным способом с выделением некоторого псевдо TTY?
  • Запуск приложения GUI в фоновом режиме и последующее повторное подключение
  • использовать SFTP в сценарии оболочки
  • автоматически запускать автоматический проходной туннель при появлении сети
  • 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 - лучшая ОС в мире.