不能SUDO SU了,#34;没有tty存在且没有指定askpass程序"

时间:2014-09-24 09:24:57

标签: linux ssh sudo

我有一个根服务器,我通过root用户禁用了登录,并创建了另一个位于sudoer列表中的用户。所以,当我想在服务器上工作时,我会这样做:

ssh myusername@IP_ADDRESS

在服务器上:

sudo su

输入我的密码以获取root权限。这个工作正常6个月了。今天我在做sudo su:

时收到此消息
sudo: no tty present and no askpass program specified

黑客正在发生什么?这个错误意味着什么,为什么我会得到它?没有root权限我在服务器上做不了多少。知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:17)

sudo尝试打开/dev/tty进行读写,如果失败则输出该错误。您在评论中表示系统中缺少/ dev / tty。

Sudo有一个选项-S来从标准输入而不是/ dev / tty读取密码。您应该能够运行sudo -S成为root。

关于如何恢复/ dev / tty,重启服务器可能就足够了;系统可能会在启动期间重新创建/ dev中的所有设备。或者,要创建设备,请使用mknod命令,但您需要知道tty设备的正确主要和次要编号。在我可用的Ubuntu系统上,我在/ dev:

中看到了这些条目
crw------- 1 root root      5,   1 Apr 16 18:36 console
crw-rw-rw- 1 root tty       5,   2 Sep 24 15:35 ptmx
crw-rw-rw- 1 root tty       5,   0 Sep 24 14:25 tty

在这种情况下,主号码为5,次号码为0. / dev / console和/ dev / ptmx具有相同的主号码。所以我检查/ dev / console或/ dev / ptmx找到正确的主号码,然后运行:

mknod /dev/tty c major 0

其中"主要"是正确的主要数字。

重新创建/ dev / tty后,请确保权限正确无误:

chmod 666 /dev/tty

答案 1 :(得分:6)

失败,因为sudo尝试提示root密码并且没有分配伪tty。

您必须以root身份登录或在/etc/sudoers (或:sudo visudo)中设置以下规则:

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

然后确保您的用户属于admin群组(或wheel)。

理想情况下(更安全)将root权限限制为特定命令,可以指定为%admin ALL=(ALL) NOPASSWD:/path/to/program

答案 2 :(得分:0)

要检查的一件事是OS是否认为各种进程“都有tty”。如果仍然有问题,那么在运行ssh的shell和运行sudo的shell中都应该这样做。检查的简单方法是命令“ tty”-如果它返回“ not tty”,则说明该外壳没有“控制tty”,即使文件系统中存在/ dev / tty也无法打开它。 >

各种情况都可能导致无法使用控制tty运行Shell,并且其中一些不提供任何可见的警告。例如,最近我在Emacs外壳窗口(Cannot open pty under Mac OS High Sierra)的High Sierra上遇到了一个问题– High Sierra使用的分配pty的机制与早期Mac OS X版本不同,因此如果您的代码没有为此重新配置,它将无法分配pty。