題 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會立即殺死它。


3
2018-06-08 21:17


起源




答案:


您的crontab腳本中有幾個錯誤。

  1. 造成斷開連接的原因是腳本不僅需要執行權限,還需要suid位集(sudo 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 -t 到了 SSH 命令(是,兩次)因為這會抑制無法分配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

3
2018-06-09 10:00



謝謝你!事實證明這是為我修復它的雙重'-t -t'。 - Dwebtron