Linux
遠端伺服器上沒有 tty,也沒有指定 askpass 程序
當我嘗試使用 ssh 在遠端伺服器上執行腳本時,出現“不存在 tty 且未指定 askpass 程序”錯誤。
我收到錯誤的主命令行是:
sudo /usr/sbin/userdel $user_id
請在我的命令行中建議需要修改的內容。
注意:我無法修改遠端伺服器上的 sudoers 文件。
您應該傳遞
ssh
該-t
選項,因此它會在遠端端分配一個 tty(終端)來執行您的腳本。需要提示輸入密碼的命令(例如
sudo
)需要一個終端,因此它們可以控制終端 I/O,例如阻止輸出鍵入的字元,因此您的密碼不會在您鍵入時出現。當你執行時
ssh $host
(沒有命令),SSH 客戶端會自動分配一個終端(所以-t
不需要),但是如果你用一個命令執行它,比如ssh $host /path/to/script
then 它不會分配一個終端,因為對於大多數命令來說,終端是不需要,只需重定向標准文件描述符(stdin、stdout、stderr)就足夠了……-t
即使您將命令行傳遞給該選項,該選項也會更改該行為並分配終端。請參閱SSH 手冊頁中-t 選項的文件。在該頁面上查找對 pty 或偽終端的其他引用(順便說一句,他們稱其為 pty/偽終端而不是 tty,因為終端未連接到真實設備,例如鍵盤/顯示器或串列埠……出於這些目的,它的含義大致相同。)