Автоматическое переподключение SSH-соединений с определенным «экранным» сеансом

10

У меня обычно есть несколько окон терминала, каждое из которых подключено через ssh к удаленному серверу. В каждом окне я работаю, используя экранную программу gnu, чтобы обеспечить постоянство интерактивных процессов в случае отключения.

В настоящее время, когда соединение ssh обрывается (например, когда я перевожу свой клиентский компьютер на ночь), мне приходится вручную и нудно перезапускать ssh-сессию внутри каждого окна, а затем в каждом окне утомительно возобновлять определенный сеанс экрана (например, «screen - r 3453 "в одном окне", screen -r 3462 "в другом и т. д.)

Есть ли элегантный способ автоматизировать это? В частности:

  • переподключите сессию ssh, если она сбрасывается, как только обнаруживается интернет-соединение

  • запустить конкретный экземпляр экрана для окна терминала, как только ssh переподключится

Спасибо за любые советы по этому

ГДж.
источник

Ответы:

10

Вы можете запустить это: ssh -t hostname screen -r 3453восстановить. Если вы хотите сделать это в цикле, я использую следующее в скрипте.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

Это работает лучше всего, если у вас есть настройка ssh-ключей, чтобы вы могли войти без ввода пароля. Я также рекомендую вам взглянуть на tmux, более современную реализацию экрана. Я фактически использую вышеупомянутый скрипт с экраном. Возможно, вы также захотите использовать именованный сеанс экрана, а не просто использовать pid, как в своем примере.

Джейсон Аксельсон
источник
Спасибо! Для чего именно "-o BatchMode = yes"?
ГДж.
Это позволит вам не запрашивать пароль. Из 'man ssh_config': «Запросы парольной фразы / пароля будут отключены. Эта опция полезна в сценариях и других пакетных заданиях, где нет ни одного пользователя, предоставляющего пароль». Так что используйте его, только если у вас уже есть ssh-ключи.
Джейсон Аксельсон
5

Не нужно взламывать петли bash. Тебе нужно заглянуть в автосш . Я не использовал его много себя, но я понимаю, что вы просто заменить sshс autosshвашей командой.

Редактировать: На самом деле, autossh поставляется со скриптом, rscreenкоторый называется, предназначенный именно для этой цели.

Райан К. Томпсон
источник