Убить фоновый SSH при выходе оболочки

Я пытаюсь создать SSH из моего сценария профиля bash, который работает в фоновом режиме для совместного использования (через его управляющий сокет). Проблема, с которой я столкнулся, – это надежный способ гарантировать, что SSH не будет работать, как только TTY будет закрыт (или более непосредственно, как только родительская оболочка bash выйдет).

Я знаю, что оболочка может запускать команды (для завершения SSH), когда она выходит изящно, но я пытаюсь обрабатывать все возможные сценарии, когда оболочка не получает возможности закрыть все.

Умеет ли я это сделать?

Лучшая идея у меня была

ssh -o PermitLocalCommand=yes -o LocalCommand='cat >/dev/null; kill $PPID' $HOST & 

Но это не сработает, потому что мне нужна команда только для фона после ее успешного запуска. Кроме того, я не могу использовать -fN вместо оболочки & потому, что SSH -f только фоны после завершения LocalCommand .

Также я пытаюсь избежать выполнения любой команды на удаленном хосте. В противном случае я мог бы, вероятно, сделать что-то вроде ssh -fN $HOST 'cat >/dev/null'

3 Solutions collect form web for “Убить фоновый SSH при выходе оболочки”

Если ваша оболочка является оболочкой входа, вы можете остановить основное соединение SSH из файла ~ / .bash_logout:

 ssh -O exit hostname 

Если оболочка не является оболочкой входа, вы можете установить ловушку в файле ~ / .bashrc сразу после нереста SSH:

 ssh -fN hostname trap 'ssh -O exit hostname' EXIT 

Я ненавижу это, когда я отвечаю на свой вопрос.

Решение, которое я придумал, заключается в использовании ControlPersist=3600 при запуске процесса master ssh. Таким образом, если оболочка не выходит изящно и убивает ssh, тогда она отключится после часа бездействия. Хотя я все еще использую ловушку при выходе, чтобы закрыть ssh вниз чисто.

 ssh -o ControlMaster=yes -o ControlPersist=3600 -o ControlPath=/tmp/ssh-%u-%h-%p-%r -Nf $HOST trap "ssh -o ControlPath=/tmp/ssh-%u-%h-%p-%r $HOST -O exit" exit 

Сохранять сеансы SSH после отключения

Я не знаю, это то, что вы ищете, но это помогло мне сохранить мою программу после выхода из оболочки ssh.

  • Ошибка ssh-agent на сервере ubuntu 10.04 LTS
  • Использование sys-сервера без пароля на CentOS 6
  • apt-get через ssh-tunnel, если разрешен только порт 22
  • как ssh обнаруживает имена хостов в сети?
  • Прочитайте первую строку вывода команды. Команда соединяет меня с удаленным терминалом
  • Использование ssh -t работает, но с использованием ProxyCommand ssh -W не
  • `ssh -X` запрашивает определенный X-дисплей?
  • Как узнать причину, по которой висят процессы ssh?
  • Пользователь отказал в доступе ssh в списке AllowUsers
  • Использовать HAProxy для туннелирования SSH через https
  • Невозможно нажать git update и запустить команды Unix при подключении через SSH
  • Linux и Unix - лучшая ОС в мире.