как создать цикл с выполнением после завершения команды?

Прошу прощения за простой и глупый вопрос
есть железка с 3g, находится в отдаленном уголке. зная стабильность нашего мобильного интернета — связь может иногда рваться
к железке нужен постоянный доступ
для этого создаётся реверсивный шелл по ssh
ssh -R localhost:2222:localhost:22 root@myhost

в башскриптинге я полный ноль и времени разбираться к сожалению нет
думаю, нужен цикл, с выполнением этой команды. как сделать так чтобы она выполнялась в случае дисконнекта?

заранее благодарю
  • Вопрос задан
  • 2797 просмотров
Решения вопроса 1
@RainWarrior
autossh
Держит дополнительное соединение, по которому посылает Keep-alive для проверки. Есть в репозиториях убунту и дебиана
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sledopit
@sledopit
В общем случае:
while :
do
ssh -R localhost:2222:localhost:22 root@myhost
done

Однако, именно в данном случае есть более изящное решение:
есть программа autossh, созданная именно для таких условий (автоматический реконнект после потери соединения).
Просто ставите пакет, в команде меняется ssh на autossh и будет так, как вы хотите (:
Ответ написан
gouranga
@gouranga
На сколько я помню там есть inittab. Пишете туда что-то типа
tn:2345:respawn:/usr/bin/ssh -n -R localhost:2222:localhost:22 root@myhost

и делаете kill -1 1.
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
cat > /usr/bin/connect-somewhere.sh
#!/bin/bash
while :; do ssh -R localhost:2222:localhost:22 root@myhost; date; sleep 20; done

chmod +x /usr/bin/connect-somewhere.sh

И в /etc/crontab:
* * * * * root flock -n /var/lock/somelock.lock -c /usr/bin/connect-somewhere.sh

Запускайте и не парьтесь. Открытая сессия по ssh не даст выполнятся циклу дальше. Когда сессия отвалится по тайм-ауту — скрипт выведет дату (конечно, лучше в лог), подождет 20 секунд, попробует подключиться заново. Крон не даст этой штуке умереть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы