我有一个谷歌计算引擎虚拟机实例,上面运行着一个星号服务器。当我尝试运行时收到此消息sudo
:
sudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
是否有root密码,所以我可以尝试在那里更改它?对此有何建议?
我有一个谷歌计算引擎虚拟机实例,上面运行着一个星号服务器。当我尝试运行时收到此消息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.保存当前启动盘
转到 Developers Console 中的实例视图
找到您的虚拟机实例并单击其名称;您现在应该查看一个 URL,例如
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
文件,这将在保存文件之前验证文件的内容。
我也遇到了这个问题,并且在尝试 gcloud 解决方法时遇到了 Nakilon 报告的相同问题。
我们最终做的是配置一个启动脚本来删除损坏的 sudoers 文件。
所以在你的输入metadata
中是这样的:
#/bin/sh
rm "/etc/sudoers.d/broken-config-file"
echo "ok" > /tmp/ok.log
正如您可能发现的那样,这需要修复 /etc/sudoers 文件。由于没有人对实例具有 root 访问权限,因此您将无法从实例内部执行此操作。
解决此问题的最佳方法是从另一个实例编辑磁盘。执行此操作的基本步骤是:
然后,新磁盘将具有固定的 sudoers 文件。
由于我也遇到了这个问题,如果您有另一个实例或任何可以使用 gcloud 权限运行的地方,您可以运行:
gcloud compute --project "<project id>" ssh --zone "europe-west1-b" "<servername>"
我在以 gcloud 为 root 的服务器上运行它,所以你也以 root 身份登录到另一个盒子!然后解决你的问题。(如果您没有盒子,只需使用正确的 gcloud 权限旋转微型)即可省去磁盘等的麻烦。
正如上面评论中提到的,我在 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 到另一个 vm 并成为 root 然后我运行 gcloud ssh 命令到我们的主 vm(你得到 sudo 错误。)
gcloud compute --project "<project id>" ssh --zone "europe-west1-b "<servername>"
和 BOOM!,现在在 VM 中以 root 身份登录。
现在您可以相应地访问/更改/etc/sudoers
文件。
我发现这个 hack 比重新创建 vm/disks 更好。希望这对某人有帮助!
可以从开发人员控制台 Google Cloud Shell 以 root 身份连接到 VM。确保 VM 正在运行,启动 shell 并使用以下命令:
gcloud compute ssh root@<instance-name> --zone <zone> [--project <project-id>]
在instance-name
Compute Engine 虚拟机实例屏幕中可以找到。project-id
是可选的,但如果您连接到与启动 shell 的项目不同的项目中的实例,则为必需。
然后,您可以修复此问题和其他可能阻止您使用sudo
.
尝试通过 gcloud SSH 到问题实例时出现 Permission denied 错误。使用@Jorick 上面提到的启动脚本是可行的。它的说明在这里。您必须停止并重新启动 VM 实例才能执行启动脚本。我稍微修改了脚本:
rm -f /etc/sudoers.d/google_sudoers >& /tmp/startup.log
重新启动后,从云控制台启动 SSH 会话并检查您是否能够查看文件内容(sudo more /etc/sudoers.d/google_sudoers
例如)。如果这有效,您的问题已经解决。