GCP-sudo 在 GoogleCloudShell 中有效,但当我 ssh 进入 vm 时无效

GCP-sudo 在 GoogleCloudShell 中有效,但当我 ssh 进入 vm 时无效

我创建了一个全新的 Google Compute Engine VM(Debian 9),并使用 GoogleCloud shell 打开了一个 shell。我可以sudo从该浏览器 shell 窗口访问它。

然后我设置我的 ssh 密钥并 ssh 进入虚拟机。为了便于讨论,我的用户名是“user123”。我使用以下命令 ssh 进入我的 GCP 虚拟机:

ssh [email protected]

其中 1.2.3.4 是我的 GCP 外部 IP 地址。然后我登录了。

因此作为user123用户GoogleCloudShell sudo有效,但当通过登录时远程控制因为user123,我被提示输入密码。

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for user123:

当然,我不想也不需要设置密码,我需要获取 sudo 以允许此user123用户帐户使用 sudo。但登录 GoogleCloudShell 时它可以工作.... 嗯...我会追踪它,但这是我的问题。

注意:因为我有 root 权限GoogleCloudShell(通过 sudo),我应该能够找到我需要做的事情并修复它。

为了允许 sudo 在通过 ssh 登录时工作,我需要采取下一步什么?

答案1

我会给你两个答案。

首先,Cloud Shell 在后台为您管理实例元数据,并允许通过这种方式向项目中添加的所有用户使用无密码 sudo。使用 Google 设置您的用户

https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys https://cloud.google.com/compute/docs/instances/managing-instance-access

通过项目控制台添加所需的用户帐户。这会将该用户传播到项目中的所有主机。

其次,您需要设置无密码 sudo。您可以(使用 visudo)编辑 /etc/sudoers 或在 /etc/sudoers.d 下创建一个新文件并添加如下一行:

user123       ALL = (ALL) NOPASSWD: ALL

你可以看到,Google 正在通过 google-sudoers 组中的组成员身份来执行此操作

timmy@instance-1:~$ sudo cat /etc/sudoers.d/google_sudoers 
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
timmy@instance-1:~$ id
uid=1000(timmy) gid=1001(timmy) groups=1001(timmy),4(adm),30(dip),44(video),46(plugdev),1000(google-sudoers)

答案2

创建 GCP 计算引擎后,您无需执行任何特殊操作即可让 sudo 从 ssh 运行。您显然需要使用 GCP 控制台并添加密钥,正如@TimmyBrowne 在他的帖子中提到的那样。请参阅https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys

将您的 ssh 公钥输入到 GCP Compute Engine 实例后,您就可以通过 ssh 进入您的实例。但您需要使用正确的用户名。

例如,如果我的 GCP 用户名是 fredsmith,并且我的 GCP 外部 IP 是 5.6.7.8,那么我的 ssh 命令将如下所示:

ssh [email protected]

显然,您的私有 ssh 密钥需要与您放入实例的 ssh 元数据中的公钥相匹配。

登录后,您可以运行 sudo,它可以工作,因为 GCP 已经使用您的凭据(fredsmith)设置了此实例,并将您(fredsmith)放入所需的组中,以便 sudo 可以工作,对于 GCP 来说,这似乎是 google-sudoers。

如果您想创建另一个用户并允许该用户拥有 sudo 权限,请参阅@TimmyBrowne 的回答,正如他所描述的。

我仍然不确定为什么我会得到不一致的结果,有时候我可以使用 sudo,而其他时候却不能,因为我的 authorized_keys 文件被删除了,但我没有足够的信息来进一步探究这个问题。

由于 Timmy Browne 确实按照他的理解回答了我的问题,而且似乎是正确的。我会感谢他的回答,但我想发布我的回答,以便如果其他人看到同样的行为,他们可以赞成这个答案,希望我们能找到它。

相关内容