当我尝试使用 ssh 在远程服务器上运行脚本时,出现“不存在 tty 且未指定 Askpass 程序”错误。
我收到错误的主命令行是:
sudo /usr/sbin/userdel $user_id
请建议我的命令行中需要修改哪些内容。
注意:我无法修改远程服务器上的 sudoers 文件。
答案1
您应该传递ssh
该-t
选项,以便它在远程端分配一个 tty(终端)来运行您的脚本。
需要提示输入密码的命令(例如sudo
)需要终端,因此它们可以控制终端 I/O,例如防止输出键入的字符,这样您在键入密码时就不会出现密码。
当您运行时ssh $host
(不使用命令),SSH 客户端将自动分配终端(因此不需要-t
),但是如果您使用命令运行它,例如ssh $host /path/to/script
then 它将不会分配终端,因为对于大多数命令来说,终端是不需要,只需重定向标准文件描述符(stdin、stdout、stderr)就足够了...该-t
选项会更改该行为并分配终端,即使您将命令行传递给它也是如此。
请参阅文档-t 选项在 SSH 手册页中。在该页面上查找对 pty 或伪终端的其他引用(顺便说一句,他们称其为 pty/伪终端而不是 tty,因为终端未连接到真实设备,例如键盘/显示器或串行端口...出于这些目的,其含义大致相同。)