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 немедленно убивает ее.

14
задан Dwebtron
14.03.2023 3:29 Количество просмотров материала 3305
Распечатать страницу

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 2023-03-15 11:17

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх