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 位元(須藤 chmod 4755 /pah/to/script如果您正在以 root 身分執行 shell 腳本。

  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 -tSSH命令(是的,兩次),因為這可以抑制無法指派 tty 的錯誤。

  4. 雖然我確信之前的錯誤是存在的,但有一個錯誤是可能造成麻煩,我不確定,也沒有時間嘗試:你有兩個-p命令中的標誌,我不確定 shell 是否正確解釋了它們。如果我是你,我會把SSH命令及其所有選項,在單引號或雙引號內,只是為了嘗試。

如果您要使用加密金鑰,則可能會避免先前的反對意見和使用開放密碼,在這種情況下,您可以將.ssh/配置將以下行歸檔:

   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

相關內容