我有一台运行Asterisk服务器的Google Compute Engine 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是否有密码所以我可以尝试在那里更改?对此有何建议?
答案 0 :(得分:7)
看起来您已手动编辑了/etc/sudoers
文件,因此在您通常sudo
访问时,由于解析错误,您将无法直接执行此操作。
以下是解决这种情况的方法。
<强> 1。保存当前启动盘
https://console.cloud.google.com/project/[PROJECT]/compute/instancesDetail/zones/[ZONE]/instances/[VM-NAME]
<强> 2。修复/etc/sudoers
在启动盘上
sudo
访问/etc/sudoers
文件第3。恢复原始VM实例
如何在将来避免这种情况
始终使用命令visudo
而不是任何文本编辑器直接编辑/etc/sudoers
文件,该文件将在保存之前验证文件的内容。
答案 1 :(得分:2)
我也遇到了这个问题,在尝试gcloud解决方法时,Nakilon也报告了相同的问题。
我们最终要做的是配置一个启动脚本,该脚本删除了损坏的sudoers文件。
因此,在您的metadata
中输入以下内容:
#/bin/sh
rm "/etc/sudoers.d/broken-config-file"
echo "ok" > /tmp/ok.log
答案 2 :(得分:1)
正如您可能想到的那样,需要修复/ etc / sudoers文件。由于没有人对该实例具有root访问权限,因此您无法从实例内部执行此操作。
解决此问题的最佳方法是edit the disk from another instance。执行此操作的基本步骤是:
然后新磁盘将具有固定的sudoers文件。
答案 3 :(得分:1)
由于我也碰到了这个问题,如果您有另一个实例或任何可以使用gcloud权限运行的地方,您可以运行:
gcloud compute --project "<project id>" ssh --zone "europe-west1-b" "<servername>"
我在一台以gcloud为root的服务器上运行了这个,所以你也以root身份登录到另一个盒子!然后解决您的问题。 (如果你没有盒子,只需用正确的gcloud特权旋转一个微型)可以省去磁盘等的麻烦。
答案 4 :(得分:1)
正如上面的评论中提到的,我在 gcp VM 中遇到了如下相同的错误。
sudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
解决这个问题
我有 ssh 到另一个虚拟机并成为 root 然后我对我们的主虚拟机运行了 gcloud ssh 命令(您在那里收到 sudo 错误。)
gcloud compute --project "<project id>" ssh --zone "europe-west1-b "<servername>"
还有 BOOM!,现在以 root 身份登录 VM。
现在您可以相应地访问/更改 /etc/sudoers
文件。
我发现这个 hack 比重新创建虚拟机/磁盘更好。
希望这对某人有所帮助!
答案 5 :(得分:0)
可以从开发人员控制台Google Cloud Shell以root身份连接到VM。确保VM正在运行,启动shell并使用以下命令:
gcloud compute ssh root@<instance-name> --zone <zone> [--project <project-id>]
在Compute Engine VM Instances屏幕中找到instance-name
。 project-id
是可选的,但如果要连接到与启动shell的项目不同的项目中的实例,则需要{。}}。
然后,您可以修复此问题以及可能阻止您使用sudo
的其他问题。