В течение многих дней я задавался вопросом, как автоматизировать создание обратного туннеля.
У меня есть много удаленных Raspberry, использующих NAT внутри своих локальных сетей, и один Raspberry, который я использую как сервер, доступный из Интернета.
Я внедрил на своем веб-сайте систему для отправки удаленным Raspberries одиночных команд.
Каждый удаленный Raspberry каждую минуту (crontab) проверяет наличие доступных команд, и если он есть, он загружает команду, создает исполняемый файл и запускает его. Вот код файла crontab:
#! /bin/bash
sudo wget -c --output-document=ipdiscover.php "www.myserver.com/checkforcommands.php";
comando=$(cat ipdiscover.php);
sudo rm "/esegui.sh";
echo "#! /bin/bash" >> /esegui.sh;
echo "" >> /esegui.sh;
echo -e $comando >> /esegui.sh;
echo "exit 0" >> /esegui.sh;
sudo chmod +x /esegui.sh;
sudo /esegui.sh;
sudo rm "ipdiscover.php";
sudo date >>/tmp/crontest.txt;
Эта система работает очень хорошо, но я не могу использовать ее для установки обратного туннеля.
Если на удаленном сервере я запускаю этот код:
sudo /usr/bin/ssh -gNnT -R 2222:localhost:22 pi@publicserverIP;
тогда все работает правильно, но если я запускаю его из скрипта crontab, он не работает.
Я создал сертификаты без пароля и отправил его с удаленной Raspberry на сервер, чтобы не иметь доступа к логину.