Попробуйте (для более новых версий) cat / etc / os-release
Если это не сработает, попробуйте (для более старых версий) {{1} } cat / etc / SuSE-release
Пара вещей, которые вы можете попробовать:
chmod +x rev.sh
Иногда ваш путь не полностью установлен во время загрузки или с помощью cronjobs, поэтому замените autossh полным путь, в моей системе мотив
/usr/bin/autossh
@reboot зависит от времени запуска демона cron, поэтому он может быть вызван до того, как будут запущены и запущены другие подсистемы (сеть?)
И ваш пример crontab:
24 12 8 * * * bash /home/user/rev.sh
будет только вызывать 8-го числа каждого месяца. И у него есть дополнительное поле. Попробуйте
24 12 * * * /home/user/rev.sh
Похоже, что когда скрипт выполняется через crontab, он не может найти ваш сертификат.
Когда вы как пользователь выполняете сценарий, он использует сертификат из /home/ubuntu-user/.ssh/... .Однако, когда сценарий выполняется из crontab, он запускается от имени пользователя root. root берет сертификаты из /root/.ssh
. Итак, у вас есть несколько способов заставить его работать, но я думаю, что запуск сценария как ubuntu-user в crontab делает это.
Изменить:
убедитесь, что предоставили полный путь к сертификату
Я не уверен, что использование cron
для запуска скрипта при запуске - это хорошая идея. Альтернативой, которая мне кажется более подходящей, является создание службы SystemD, как описано здесь. Создайте файл с именем /etc/systemd/system/autossh. service
:
[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target
Затем выполните следующую команду от имени root:
systemctl enable autossh.service
поскольку в вопросе не так много данных, я начну с нуля с того, что бы я сделал
Я бы поставил все конфигурации в / etc / ssh / ssh_config:
Host mytunnel
HostName IPofDigitalOcean
User root # Are you sure about this??
IdentityFile /etc/ssh/mytunnel_key
RemoteForward 8081 localhost:22
DynamicForward 8080
Я бы поместил ключ в / etc / ssh / mytunnel_key
, затем я бы попытался с записью cron (лучше бы подойдет служба upstart / systemd), например :
@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel
Попробуйте использовать su
:
su -l user -c /home/user/rev.sh
Поможет ли это решить вашу проблему?
Вам нужно использовать-f и запустить команду при запуске без терминала. Вот пример:
autossh -M 12374 \
-R 2205:127.0.0.1:22 \
-p 2200 \
-f \
user@www.hostname.com \
sleep 31536000
-f помещает его в фоновый режим, но размещение в фоновом режиме означает, что ssh подключится, а затем отключится, как только завершит свою задачу. Итак, вам нужна задача.
sleep 31536000 сообщает ssh о переходе в режим сна в течение 1 года после подключения. В это время ваши туннели останутся в рабочем состоянии.
Если вы не запустите команду, ssh подключится, настроит обратный туннель на порт 2205 и, когда это будет сделано, выйдет. Используя autossh, в случае сбоя подключения он снова подключится и снова перезапустит спящий режим. Даже при действительно стабильном интернет-соединении я сомневаюсь, что год возможен.
Кстати, -в отличие от этих других шутников, я знаю, что это работает, так как я на самом деле проверил это, потому что, конечно же, я делаю что-то подобное, и поскольку теперь это работает очень надежно, я могу дать вам правильный ответ.
-f и «команда»
Вот чего вам не хватает.