9

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

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

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

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

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

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

2 ответа2

8

Вы можете запустить это: 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, как в своем примере.

5

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .