【问题标题】:authorized_keys getting deleted from Google Cloud VM从 Google Cloud VM 中删除 authorized_keys
【发布时间】:2024-04-18 01:50:02
【问题描述】:

我正在尝试为托管在 Google Cloud VM 中的软件设置 Jenkins。我有一个具有用户帐户 A 和用户帐户 B 的 VM。Jenkins 托管在用户帐户 A 中。所有其他软件都托管在用户帐户 B 中。为了授权 Jenkins ssh 进入 userB@VM_ADDRESS,我将用户 A 的 . ssh/id_rsa.pub 进入用户 B 的 .ssh/authorized_keys。这允许 Jenkins 在我将更改推送到 Github 时通过 ssh 连接到 userB@VM_ADDRESS 以更新我的软件。但是,过了一会儿,由于某种原因,用户帐户 B 中的 .ssh/authorized_keys 被替换/刷新,并且我的密钥消失了,来自 Jenkins 的 ssh 将因权限被拒绝而失败。我应该如何解决这个问题?还是我做 Jenkins 错了?

我在https://groups.google.com/g/gce-discussion/c/iHqRb2KlMZg/m/x59xV4pYAQAJ?pli=1 看到了这个帖子,这似乎是一个类似的问题,但读完后我仍然不知道我需要做什么。

【问题讨论】:

    标签: jenkins google-cloud-platform ssh authorized-keys


    【解决方案1】:

    元数据中的 SSH 密钥会定期重新部署。为了解决这个问题,不要在系统中手动执行复制/粘贴,而是复制密钥并(将其添加到计算引擎元数据中](https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys)


    但是,我不确定这是遵循的好方法。为什么不使用帐户 A 登录,因为它是“现实”并对软件执行操作?您可以将账户 A 和账户 B 放在同一个 Linux 组中,或者在最后执行 chown 更改新文件的所有者。

    这个棘手的问题背后的要求是什么?


    更新 1:

    使用账户A的密钥登录用户B,就像是在冒充。最后,您不知道是用户帐户 A 还是 B 对您的文件执行了操作。

    无论如何,在 linux 中你有 3 级权限 UGA(用户、组、全部),这就是为什么当你执行 ls -la 时你会有这样的事情:rwxr-xr——这意味着 U(用户)可以做RWX(Read Write eXecute),组只能读取和执行,并且都只能读取。

    因此,如果用户账号A和用户账号B在同一个Group中,可以设置共同的组权限,避免所有(其他人)访问文件。

    【讨论】:

    • Jenkins已经登录A账号,但是没有ssh无法访问B账号,软件在B账号下。
    • 为什么将密钥添加到元数据中不是一个好方法?另外,恐怕我不完全理解您提出的其他替代建议,您能否详细说明一下?
    • 将您已有的密钥添加到实例元数据中,并作为密钥的注释(最后一个字段)将本地用户的用户名(在机器上)放入需要插入密钥的位置。如果我正确理解您的用例,这将如下所示:ssh-rsa AAAABC... userB。基本上取 userA 的 id_rsa.pub 并将最后一个字段更改为 userB 的用户名,以便从实例元数据中将其推送到正确的 authorized_keys
    • 感谢您的更新!我首先尝试元数据方法,因为模拟对我来说并不是一个真正的问题,但是按照 gcp 给出的教程,即使在元数据中添加了 ssh 密钥,它仍然说 publc key permission denied :(
    • @Samson 您是否将注释(ssh-keygen 的-C 字段)正确设置为您要登录的用户的用户名,而不是来自?(用户 B)
    相关资源