我在我的服务器上配置 Ansible,在所有服务器上创建了 Ansible 用户并授予它们 sudo 访问权限,因此每当我使用 Ansible 用户 ssh 到另一台服务器时,它不应该要求我输入密码。我在两台服务器上成功配置了它,但是当我通过更改文件在另一台服务器上进行配置时,/etc/sudoers/
系统变得无响应,然后我重新启动了终端,现在当我尝试以 root 用户登录服务器时,它会抛出错误
$ sudo su
/etc/sudoers: syntax error near line 121 <<< sudo: parse error in /etc/sudoers near line 121 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
答案1
您已经破坏了该sudoers
文件,因此sudo
将拒绝允许任何访问。如果您有 root 密码,则可以使用它来解决问题:
su -
visudo
如果没有,那么您将需要使用救援磁盘启动系统并sudoers
以这种方式重置文件。要复杂得多。
请勿/etc/sudoers
在未使用的情况下手动编辑文件,visudo
因为它会执行语法检查以防止这种情况。
顺便说一句,没有必要使用sudo su
(它用来sudo
获取 root 权限,然后你要求su
已经作为 root 再次给你它们)。sudo -s
或者也许sudo -i
是完全足够的。
答案2
如果您没有 root 密码,但您的用户帐户位于该wheel
组(或sudo
Debian/Ubuntu 的组)中,则还可以尝试一件事:
pkexec visudo
它应该提示您输入密码(比 更详细sudo
),然后允许您编辑/etc/sudoers
文件。
如果您没有任何剩余的活动根会话并且无法获取它们(无论使用sudo
或pkexec
),那么恐怕没有办法在不停机的情况下解决此问题。
我对 Oracle Cloud OPC 不熟悉。但是,由于您显然位于云服务器上并且拥有多个此类服务器,因此解决此问题的最后一种方法是使用云管理界面强制关闭服务器,然后暂时断开虚拟系统磁盘与有问题的云服务器的连接并呈现虚拟磁盘到第二个云服务器作为额外磁盘。然后,您可以将问题服务器的根文件系统安装到/mnt
第二个服务器(“修复服务器”)中,然后运行visudo -f /mnt/etc/sudoers
以修复语法错误。执行此操作后,您将卸载磁盘并断开与修复服务器的连接,然后将其返回给有问题的服务器。
如果云管理界面没有必要的功能来允许您对虚拟机执行此操作,那么您将必须联系您的云运营商(即 Oracle?)以获取支持。他们应该非常熟悉此类问题:您绝对不是第一个因拼写错误而失去云服务器根访问权限的人。