我有一个在Google Compute Engine上运行的Asterisk服务器的VM实例。当我尝试运行sudo
时,会收到以下消息:
sudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
有没有root的密码,这样我就可以尝试在那里更改它了?对此有什么建议吗?
我有一个在Google Compute Engine上运行的Asterisk服务器的VM实例。当我尝试运行sudo
时,会收到以下消息:
sudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
有没有root的密码,这样我就可以尝试在那里更改它了?对此有什么建议吗?
看起来您手动编辑了/etc/sudoers
文件,因此尽管您通常具有sudo
访问权限,但由于解析错误,您将无法直接执行此操作。
以下是修复此问题的方法。
1. 保存当前引导磁盘
转到Google Cloud Console中的实例视图
找到您的VM实例并单击其名称; 您现在应该正在查看类似于此URL的内容:https://console.cloud.google.com/project/[PROJECT]/compute/instancesDetail/zones/[ZONE]/instances/[VM-NAME]
2. 修复引导磁盘上的/etc/sudoers
sudo
访问权限/etc/sudoers
文件3. 恢复原始VM实例
如何避免这种情况再次发生
以后编辑 /etc/sudoers
文件时,应该始终使用命令visudo
,而不是直接使用任何文本编辑器,因为这会在保存之前验证文件的内容。
EDITOR=nano visudo
或者在 screen 中开启 root 会话以进行紧急修复。 - Nakilon我也遇到了这个问题,并且在尝试gcloud解决方法时出现了Nakilon报告的相同问题。
我们最终做的是配置一个启动脚本,删除了破损的sudoers文件。
因此,在您的metadata
中放置类似以下内容:
#/bin/sh
rm "/etc/sudoers.d/broken-config-file"
echo "ok" > /tmp/ok.log
usermod -aG sudo username
。无论如何,这是恢复 root 访问权限的方法 :) - Emma Labbé由于我也遇到了这个问题,如果您有另一个实例或任何可以使用gcloud特权运行的地方,您可以运行:
gcloud compute --project "<project id>" ssh --zone "europe-west1-b" "<servername>"
Permission denied (publickey,gssapi-keyex,gssapi-with-mic). ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
- Nakilonsudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
gcloud compute --project "<project id>" ssh --zone "europe-west1-b "<servername>"
现在,您已经作为VM中的root用户登录。
现在,您可以相应地访问/更改/etc/sudoers
文件。
我发现这种方法比重新创建vm /磁盘更好。
希望这对某些人有所帮助!
您可以从开发者控制台Google Cloud Shell以root身份连接到VM。确保VM正在运行,启动Shell并使用此命令:
gcloud compute ssh root@<instance-name> --zone <zone> [--project <project-id>]
在 Compute Engine VM 实例屏幕中找到 instance-name
。如果您要连接到与启动 shell 的项目不同的项目中的实例,则 project-id
是可选的,但是必需的。
然后,您可以解决可能会阻止您使用 sudo
的此问题和其他问题。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic). ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
- Nakilonrm -f /etc/sudoers.d/google_sudoers >& /tmp/startup.log
重启后,从云控制台启动一个SSH会话,并检查您是否能够查看文件内容(例如使用sudo more /etc/sudoers.d/google_sudoers
)。如果可以正常工作,则问题已经解决。