Ubuntu

執行“apt-get install”時,SSH 會話永遠不會關閉

  • March 7, 2016

問題

apt-get install在非互動式 SSH 會話中執行時,會話永遠不會關閉。例子:

ssh user@target "sudo apt-get -y install my_package"

my_package確實安裝正確,但 SSH 會話只是懸空打開。

問題

是否有任何標誌可以通過 SSH 開始apt-get工作?


附加資訊

語境

遠端安裝用於在集成伺服器上自動部署包。一旦我們將一些程式碼更改推送到儲存庫,一個作業就會拉入程式碼,建構包,並在集成時部署它以檢查一切是否正常(就部署而言)。

已經嘗試過和注意事項

  • 執行的相同 SSH 會話apt-get update乾淨地關閉。請注意,這apt-get update不是互動式的,而是apt-get install。這可能表明互動性是一個問題。
  • ssh user@target "sudo apt-get install my_package && echo Hello"永遠不會到達的命令echo
  • debconf抱怨它找不到一個好的前端(顯示,Readline),它回退到 Teletype(儘管 Readline 可用)。
  • 關於 debconf 的前端,通過-tSSH 強制 TTY 並沒有幫助。也沒有DEBIAN_FRONTEND=noninteractive
  • 一切都是在 Ubuntu 12_04 LTS 上完成的。

以下關於 SF 的答案起到了作用:

從 cron bash 腳本執行時 ssh 無法執行遠端命令

-t標誌強制進行偽 tty 分配,除非本地沒有 TTY。但是像 in 一樣通過兩次國旗-t -t只是假裝這樣做。這解決了問題。

請參閱 SSH 文件:

-t 強制偽 tty 分配。這可用於在遠端機器上執行任意基於螢幕的程序,這非常有用,例如在實現菜單服務時。多個 -t 選項強制分配 tty,即使 ssh 沒有本地 tty。

現在,為什麼這有效?事實證明,debconf不再抱怨日誌中的前端。所以我相信根據需要進行雙重-t設置(引誘?)debconf,這允許apt-get install完成乾淨地結束 SSH 會話。

引用自:https://serverfault.com/questions/489939