Похожие вопросы

Какова дата изменения отчетов ls для каталогов в оболочке Bash?
Использование systemd для выполнения интерактивного сценария (whiptail) после многопользовательского.цель, но до экрана входа в систему
Как удалить файл на Linux с? по имени
Пакетное переименование файлов в каталоге с помощью sed
Заменить обратный слеш("") с косой черты("/") в переменную в bash
Попытка распаковать файл внутри подкаталога получение ошибки: внимание: имя файла не совпадает
Выполнить команду из результата grep
Используйте OpenOffice из командной строки для преобразования HTML в RTF
Знак процента ( % ) перед командой оболочки
Как впоследствии выполнить все команды в crontab?
изменение владельца файлов в bash-скрипт
Как перезаписать файл с помощью echo?
утилита командной строки для записи с микрофона
Как я могу перезаписать файл hosts в OS X?
Копирование нескольких файлов в Linux

cronjob Открытие, то сразу закрытие туннеля ssh

Я пытаюсь написать скрипт, который откроет SSH-туннель на общедоступный сервер. У меня все написано и работает правильно, но соединение, похоже, не делает его на мой сервер. Журналы говорят такие вещи, как:

Jun 8 21:00:01 <hostname> CRON[xxxx]: session opened for user <user> by (uid=0)
Jun 8 21:00:01 <hostname> CRON[xxxx]: session closed for user <user>

снова и снова, с 0-1 секунд между ними. Я хочу, чтобы эта связь была открыта.... Как я могу держать это открытым?

мой код выглядит так для cron (Да, я знаю, что он работает каждую минуту):

* * * * * /bin/bash /home/<user>/ssh

My код для регистрации заезда:

sshpass -p <password> ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22

Итак, опять же, как я могу держать это соединение открытым? У меня есть механизм, чтобы убить его в соответствующее время в другом сценарии, но если я не запускаю вышеуказанную команду вручную из командной строки, cron немедленно убивает ее.

5
задан Dwebtron
источник

1 ответов

в скрипте crontab есть несколько ошибок.

  1. тот, который вызывает отключение является тот факт, что сценарий должен не только выполнить разрешение, но и набор битов suid (sudo chmod 4755/pah/to / script)если выполняется скрипт как root.

  2. среды crontab сильно отличаются от пользовательских. Поэтому всегда требуется использовать полные пути в команды:

    /usr/bin/sshpass -p <password> /usr/bin/ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22
    
  3. вы должны добавить флаги - t-t до ssh команда (да, дважды), поскольку это подавляет ошибку, что tty не может быть выделен.

  4. хотя я уверен предыдущих ошибок, которые может причинить неприятности, я не уверен, и нет времени, чтобы попробовать его: у вас есть два - p флаги в вашей команде, и я не уверен, что они правильно интерпретируется оболочкой. На вашем месте я бы разместил ssh команда, со всеми ее опциями, внутри одинарных или двойных кавычек, просто попробовать.

предыдущее возражение и использование открытого пароля можно было бы избежать, если бы вы использовали криптографические ключи, и в этом случае вы могли бы добавить к своему .ssh / config file следующие строки:

   Host ShortName
             HostName The.Full.HostName.com
             User yourname
             Port your-non-standard-port
             IdentityFile /path/to/crypto/keyù
             IdentitiesOnly yes

и тогда однострочник станет

  /usr/bin/ssh -t -t -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -R222<random_number>:localhost:22 ServerName
3
отвечен MariusMatutiae 2015-06-09 11:41:06
источник

Другие вопросы bash cron linux ssh tunnel