URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 4902
[ Назад ]

Исходное сообщение
"Как сделать, чтобы ssh в скрипте не завершался?"

Отправлено КриоМух , 26-Янв-24 21:35 
Добрый день, Уважаемые!

Помогите пожалуйста, решить вопрос.
Мне надо чтобы на компе в фоновом режиме всегда был активен проброс порта через ssh. Т.е. чтобы я его не руками заупскал, а автоматом это делалось, а если связь порвалась - то чтобы восстанавливалось.
Примерно так:
/etc/rc.local

#!/bin/sh

/usr/bin/su - user -c /home/user/scripts/my.1080.sh &

/home/user/scripts/my.1080.sh

#!/bin/sh
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

while true
do
    /usr/bin/netstat -an | /usr/bin/grep "127.0.0.1.1080"
    if [ $? -ne 0 ] ; then
        /usr/bin/ssh -D 1080 -p 12345 my@10.2.0.3
    fi
    sleep 1
done

Всё бы ничего, но если я скрипт этот руками запускаю, то всё ок, он вываливается в удалённую ssh консоль, порт проброшен, всё ок.
А вот если это происходит через /etc/rc.local или через cron, то видно что порт поднимается и убирается. Я так понимаю, что как таковой консоли нет, к которой он этот ssh сеанс успешно установленный привязать может и сразу поэтому завершается.

Подскажите пожалуйста, как эту херомантию реализовать?


Содержание

Сообщения в этом обсуждении
"Как сделать, чтобы ssh в скрипте не завершался?"
Отправлено Аноним , 26-Янв-24 22:17 
> Подскажите пожалуйста, как эту херомантию реализовать?

А разьве autossh такого не умеет?


"Как сделать, чтобы ssh в скрипте не завершался?"
Отправлено КриоМух , 27-Янв-24 00:09 
> А разьве autossh такого не умеет?

Добрый вечер Уважаемый!

Спасибо огромное, теперь буду эту тулзу знать. Она решает, только не получается её автоматически сделать. Та же самая проблема, которую я описал в первом сообщении.

Если запускаю

autossh -M 20000:7 -p 20022 -D 1080 my@10.2.0.3

из консоли, то всё ок. А вот добавив в конец & или -f в опции autossh, вcё перестаёт работать. На удалённой машине в этот момент вижу успешная авторизация (по ключу она тут), и что потом клиент просто вышел.

Я так понял, что типа не создаётся сеанс под работу этой команды, и в итоге пока писал это, почитал про сам ssh и в ключи добавил -fNT
итоговая команда которая решает весь вопрос:

autossh -M 20000:7 -f -p 20022 -D 1080 -fNT my@10.2.0.3

Спасибо за наводку Товарищ Аноним!


"Как сделать, чтобы ssh в скрипте не завершался?"
Отправлено Stellarwind , 09-Фев-24 17:14 
Запускать в screen / tmux не пробовали?

"Как сделать, чтобы ssh в скрипте не завершался?"
Отправлено anan , 29-Янв-24 09:41 
Как вариант? попробуйте запускать через screen.


"Как сделать, чтобы ssh в скрипте не завершался?"
Отправлено КриоМух , 29-Янв-24 13:25 
> Как вариант? попробуйте запускать через screen.

Да, но хочется "без рук". Сейчас autossh выше сообщением в /etc/rc.local добавил и всё. Автоматом всегда работает. При подвисании автопереключается тут же. В общем отличное решение.


"Как сделать, чтобы ssh в скрипте не завершался?"
Отправлено Аноним , 29-Янв-24 10:38 
>[оверквотинг удален]
>  sleep 1
> done
>

> Всё бы ничего, но если я скрипт этот руками запускаю, то всё
> ок, он вываливается в удалённую ssh консоль, порт проброшен, всё ок.
> А вот если это происходит через /etc/rc.local или через cron, то видно
> что порт поднимается и убирается. Я так понимаю, что как таковой
> консоли нет, к которой он этот ssh сеанс успешно установленный привязать
> может и сразу поэтому завершается.
> Подскажите пожалуйста, как эту херомантию реализовать?

echo "tmux new-session -d 'ssh -D 1080 -p 12345 my@10.2.0.3'" >> /etc/rc.local


"Как сделать, чтобы ssh в скрипте не завершался?"
Отправлено gg , 31-Янв-24 22:56 
/usr/bin/ssh -D 1080 -p 12345 my@10.2.0.3 < /dev/null