cronjob открывает и НЕМЕДЛЕННО закрывает ssh-туннель

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

Мой код для регистрации:

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

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

решение1

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

  1. Причиной отключений является тот факт, что скрипту требуется не только разрешение на выполнение, но и установленный бит suid (sudo chmod 4755 /пах/к/скрипту)еслиВы запускаете скрипт оболочки как пользователь 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. Вам следует добавить флаги.-т -тксш(да, дважды), поскольку это подавляет ошибку, что tty не может быть выделен.

  4. Хотя я уверен в предыдущих ошибках, есть одна, котораямощьвызвать проблемы, я не уверен и у меня нет времени, чтобы попробовать это: у вас есть два-пфлаги в вашей команде, и я не уверен, что они правильно интерпретируются оболочкой. Если бы я был вами, я бы поместилсшкоманда, со всеми ее параметрами, в одинарных или двойных кавычках, просто чтобы попробовать.

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

   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

Связанный контент