Таким образом, у меня есть система Ubuntu 16.04, это, как предполагается, запускает скрипт SSH, который я записал, каждый раз начальные загрузки системы. Это - мой первый раз, пытаясь заставить это работать, таким образом, это никогда не имеет прежде.
Сценарий очень прост:
while true; do sleep 60; ssh root@ip -i ~/.ssh/key -R xxxx:localhost:22; done
Это в названном файле autossh.sh
.
Чтобы заставить сценарий работать автоматически, я попытался включать его в/etc/rc.local (прежде чем выйдут 0), я попытался добавить его к списку приложений запуска от GUI Ubuntu.
В течение обоих раз я перезагружаю компьютер, я вижу, что сценарий на самом деле работает, но он не отображается, удаленный порт к localhost 22 как команда, как предполагается, делает. Если я выполняю команду вручную, она работает, но она просто не работает после начальной загрузки.
Действительно ли там что-то очевидно, что я отсутствую здесь, это препятствует тому, чтобы этот сценарий работал, как он должен?
1. тильда (~
) решит к Вашему корневому каталогу, но это не имеет значения, в то время как Вы не зарегистрированы. Это не так важно согласно следующему предложению, но хорошо, чтобы быть подчеркнутым. Связанный ответ . Мое предложение здесь состоит в том, чтобы переписать сценарий таким образом:
#!/bin/bash
while true; do sleep 60; ssh root@ip -i "$HOME/.ssh/key" -N -f -R xxxx:localhost:22; done
или лучшее использование /the/full/path/to/
вместо $HOME
.
-f
Запросы ssh для движения в фон непосредственно перед выполнением команды.
-N
не выполняют удаленную команду. Это полезно для просто портов пересылки.
2. ключи SSH читаемы только для их владельца, таким образом, другие пользователи не могут использовать их, и они не могут использоваться в масштабе всей системы. Таким образом, мое предложение состоит в том, чтобы использовать Крон для этой задачи.
Входят в систему с пользователем, который является владельцем ключа SSH и работает crontab -e
(-e
редактирование средств) или использует sudo -u <user-name> crontab -e
(-u
, средства выполняются, как пользователь звонил <user-name>
), и добавьте эту строку внизу:
@reboot /full/path/to/the/script/autossh.sh > /tmp/autossh.log 2>&1
Сохраняют и закрывают Crontab. Эта строка должна выполнить сценарий при системном запуске и запишет журнал .
Ссылки:
man ssh
Обновление: