У меня обычно есть несколько окон терминала, каждое из которых подключено через ssh к удаленному серверу. В каждом окне я работаю с помощью экранной программы гну, для обеспечения персистентности интерактивных процессов в случае разъединения.
В настоящее время, каждый раз, когда соединение SSH отбрасывает (такой как тогда, когда я поместил свой клиентский компьютер для сна в течение ночи), я должен вручную и утомительно перезапустить ssh сессию в каждом окне, и затем в каждом окне утомительно возобновляют определенную экранную сессию (например, "экранируют-r 3453" в одном окне, "экранируйте-r 3462" в другом и т.д.),
Существует ли изящный способ автоматизировать это? Конкретно:
повторно подключите ssh сессию, если она отбрасывает, как только Интернет-соединение обнаруживается
выполните определенный экранный экземпляр для окна терминала, как только ssh снова соединяется
Спасибо за любые подсказки относительно этого
Можно выполнить это: 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 как Вы, делают в Вашем примере.
Никакая потребность взломать циклы удара. Необходимо изучить autossh. Я не использовал его очень сам, но мое понимание - то, что Вы просто заменяете ssh
с autossh
в Вашей команде.
Править: На самом деле autossh идет с названным сценарием rscreen
который, кажется, разработан для точно этой цели.