为什么会弹出此错误:“需要交互式身份验证”?

tec*_*sk8 12 command-line bash ssh systemd

我不明白为什么每次我想运行命令时都会弹出此错误systemctl。我知道我必须使用 来运行它sudo,它运行得很好,但我很好奇,为什么会发生这种情况?以前没有发生过这种情况,除了配置我的/etc/ssh/sshd_config文件之外,我没有做任何特别的事情。

\n

在此之前,如果我运行systemctl不带 的命令sudo,则会显示一条文本响应,请求我的用户的密码

\n

这是以前的样子

\n

但现在,这个请求不再弹出了!这是为什么?

\n
user@machine:~$ systemctl restart sshd\nFailed to restart sshd.service: Interactive authentication required.\nSee system logs and \'systemctl status sshd.service\' for details.\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行systemctl status sshd命令时,我收到此错误:Couldn\'t open /etc/securetty: No such file or directory。这是什么意思?\n顺便说一句,我的机器上有 Ubuntu 20.04 LTS。

\n
user@machine:~$ systemctl status sshd\n\xe2\x97\x8f ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n     Active: active (running) since Fri 2021-05-21 19:47:32 UTC; 2h 51min ago\n       Docs: man:sshd(8)\n             man:sshd_config(5)\n   Main PID: 14021 (sshd)\n      Tasks: 5 (limit: 38329)\n     Memory: 1.7G\n     CGroup: /system.slice/ssh.service\n             \xe2\x94\x9c\xe2\x94\x8014021 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups\n             \xe2\x94\x9c\xe2\x94\x8020182 ssh-server new -c 256 -s -l LANG=en_US.UTF-8\n             \xe2\x94\x9c\xe2\x94\x8020183 -bash\n             \xe2\x94\x9c\xe2\x94\x8046248 systemctl status sshd\n             \xe2\x94\x94\xe2\x94\x8046249 pager\n\nMay 21 20:58:15 machine sshd[19925]: Disconnected from user user 217.138.209.001 port 2222\nMay 21 21:13:40 machine sudo[20203]: pam_unix(sudo:auth): Couldn\'t open /etc/securetty: No such file or directory\nMay 21 21:13:49 machine sudo[20203]: pam_unix(sudo:auth): Couldn\'t open /etc/securetty: No such file or directory\nMay 21 21:13:49 machine sudo[20203]: pam_unix(sudo:auth): authentication failure; logname=user uid=1000 euid=0 tty=/dev/pts/1 ruser=user rhost=  use>\nMay 21 21:13:51 machine sudo[20203]: pam_unix(sudo:auth): Couldn\'t open /etc/securetty: No such file or directory\nMay 21 21:13:55 machine sudo[20203]: pam_unix(sudo:auth): Couldn\'t open /etc/securetty: No such file or directory\nMay 21 21:38:02 machine su[34300]: pam_unix(su:auth): Couldn\'t open /etc/securetty: No such file or directory\nMay 21 21:38:05 machine su[34300]: pam_unix(su:auth): Couldn\'t open /etc/securetty: No such file or directory\nMay 21 21:38:05 machine su[34300]: (to root) robin on pts/1\nMay 21 21:38:05 machine su[34300]: pam_unix(su:session): session opened for user by user(uid=1000)\n
Run Code Online (Sandbox Code Playgroud)\n

Ste*_*art 17

当您使用时sudo systemctl,您正在将 systemd 作业安排为rootroot总是允许安排 systemd 作业,因此这将始终有效。

但是,当您在systemctl没有 sudo 的情况下运行时,您将以systemd当前用户的身份安排作业。 systemd询问polkit您是否可以这样做。 polkit将检查其策略配置并将:

  1. 批准您(无需密码)
  2. 需要作为您的用户进行身份验证(确认是人在发出请求,并且此人坐在终端前)。
  3. 需要以其他人的身份进行身份验证...可能root:(不允许用户运行该作业,因此它会要求您提供管理员密码)。

两者polkitsudo尽力阻止验证脚本。这就是为什么没有--password选择sudo并且sudo不接受的原因echo 'password' | sudo lspolkit类似,但更复杂,更难理解。这种对脚本身份验证的厌恶是因为特权作业应该由用户或其他特权进程明确命令。我们通常不希望非特权进程/脚本指挥特权工作。

polkit尝试对您进行身份验证时,它将通过polkit-agent. 如果您看到身份验证窗口占据您的屏幕,这通常是polkit-agent您的桌面环境提供的。但要连接到适当的polkit-agent,它需要了解一些有关您的信息$DISPLAY$XAUTHORITY以便提示出现在正确的会话中。

就您而言,您已ssh进入机器,因此没有显示。在这种情况下,它“回退”到文本代理上,但似乎存在一个问题,即您的代理正在对您进行用户身份验证,而不是 root,或者它正在对您进行身份验证,但后来意识到您没有安排systemd工作的权限。该securetty消息表明它实际上没有一个干净的环境来对您进行身份验证(例如,另一个进程可能会拦截您的标准输入,或者它无法验证您是真人而不是脚本)。

不管是什么原因,根本原因是您ssh进入了该机器并且没有安排 systemd 作业的权限。

您有两个选择:

  1. 使用sudo systemctl。这是最简单的解决方案,但如果出于某种原因这是不可接受的(即您正在编写作业systemd脚本并且不想添加到:NOPASSWD/etc/sudoers,那么请务必提及它。

  2. 创建规则以允许您以用户身份polkit运行作业。这里systemd有一个很好的答案描述了如何做到这一点。