Linux

遠端伺服器上沒有 tty,也沒有指定 askpass 程序

  • April 18, 2018

當我嘗試使用 ssh 在遠端伺服器上執行腳本時,出現“不存在 tty 且未指定 askpass 程序”錯誤。

我收到錯誤的主命令行是:

sudo /usr/sbin/userdel $user_id

請在我的命令行中建議需要修改的內容。

注意:我無法修改遠端伺服器上的 sudoers 文件。

您應該傳遞ssh-t選項,因此它會在遠端端分配一個 tty(終端)來執行您的腳本。

需要提示輸入密碼的命令(例如sudo)需要一個終端,因此它們可以控制終端 I/O,例如阻止輸出鍵入的字元,因此您的密碼不會在您鍵入時出現。

當你執行時ssh $host(沒有命令),SSH 客戶端會自動分配一個終端(所以-t不需要),但是如果你用一個命令執行它,比如ssh $host /path/to/scriptthen 它不會分配一個終端,因為對於大多數命令來說,終端是不需要,只需重定向標准文件描述符(stdin、stdout、stderr)就足夠了……-t即使您將命令行傳遞給該選項,該選項也會更改該行為並分配終端。

請參閱SSH 手冊頁中-t 選項的文件。在該頁面上查找對 pty 或偽終端的其他引用(順便說一句,他們稱其為 pty/偽終端而不是 tty,因為終端未連接到真實設備,例如鍵盤/顯示器或串列埠……出於這些目的,它的含義大致相同。)

引用自:https://unix.stackexchange.com/questions/438420