Для ваших целей вы программируете crontab на полдень, а затем засыпаете с произвольным интервалом от 0 до 120 секунд (два часа).
Итак, строка crontab для запуска команды каждый день в полдень:
* 12 * * * command.sh
, а затем вы запускаете command.sh с:
sleep $(( RANDOM % (120*60) ))
, альтернатива делает:
at noon + $(( RANDOM % 120 )) minutes tomorrow
в начале скрипта каждый день. Излишне говорить, что последняя не самая лучшая идея, поскольку со временем она обязательно потерпит неудачу.
Туннели SSH полезны для пересечения незащищенных сетей, обеспечивая шифрование между концами -и -при соединении двух конечных точек, находящихся в разных сетях.
Насколько я могу судить (благодаря комментариям ), у вас есть:
Локальный хост -А :ваш localhost
,в вашей локальной сети (, вероятно, за брандмауэром/NAT)
Общедоступный хост -B :сервер aws
Не -общедоступный хост -C :в ограниченной удаленной сети (, вероятно, за брандмауэром/NAT)
Не -общедоступный хост -D :, который вы называете deviceIP
, который прослушивает порт 80
и находится в удаленной ограниченной сети
Если вы хотите подключить свой хост A к хосту D, позволяя вашему браузеру подключаться к нему через порт 80
, вам нужно:
Туннель от хоста -A к хосту -B, который:
Позволяет хосту -Прослушивать порт8080
Отправляет трафик с этого порта через туннель
На хосте -B (aws
), перенаправляет трафик, идущий из туннеля, на локальный (т.е. на хосте -B )порт15872
(Я взял из ваших комментариев; вы можете выбрать любой доступный порт; просто убедитесь, что вы используете один и тот же код во всех командах)
# Execute on host-A
$ ssh -L 8080:localhost:15872 user@host-B
Туннель от хоста -C к хосту -B, который:
Позволяет хосту -B прослушивать порт15872
Отправляет трафик с этого порта через туннель
На хосте -C (ваш сервер Linux )перенаправляет этот трафик на порт 80
на хосте -D
# Execute on host-C
$ ssh -R *:15872:host-D:80 user@host-B
Таким образом, запросы к хосту -A на порту 8080
будут туннелироваться на хост -B, перенаправляться на порт 15872
на том же хосте -B, туннелироваться на хост -C и перенаправляется с хоста -C на порт 80
хоста -D.
Вы не перенаправляете веб-сервер на свой браузер -вы перенаправляете запросы из своего браузера на веб-сервер. Вам нужен прямой прокси, а не обратный.
Это создаст прослушивающий сокет на клиентском порту 8080 и направит его через туннель ssh
на deviceIP
порт 80 :
ssh -L 8080:deviceIP:80 user@aws