SSH 密钥不断从 Google Compute Engine VM 中删除

UJI*_*JIN 6 ssh google-compute-engine docker

背景:

  • 我正在运行一个名为host.
  • 有一个名为 的机器上运行的 Docker 容器container。
  • 我使用名为user@gmail.com.
  • 我需要通过连接ssh从container到host,而不被提示输入user密码。

问题:

在从容器成功连接到主机后的几分钟内user/.ssh/authorized_keys,Google 本身的某个进程会对其进行“修改”。据我了解,此过程附加了一些连接到 VM 所需的 ssh 密钥。但就我而言,该过程似乎覆盖了我从容器生成的密钥。

设置:

我连接到host使用 Google Compute Engine GUI,按下 SSH 按钮。

ssh

然后我按照AskUbuntu 上这个答案中描述的步骤进行操作。我为useron设置了密码host:

user@host:~$ sudo passwd user
Run Code Online (Sandbox Code Playgroud)

我设置PasswordAuthentication为yesin sshd_config,然后重新启动sshd:

user@host:~$ sudo nano /etc/ssh/sshd_config
user@host:~$ sudo systemctl restart sshd
Run Code Online (Sandbox Code Playgroud)

我使用 进入 Docker 容器bash,生成密钥,然后将其复制到主机上:

user@host:~$ docker exec -it container /bin/bash
(base) root@container-id:# ssh-keygen
(base) root@container-id:# ssh-copy-id user@host 
Run Code Online (Sandbox Code Playgroud)

密钥成功复制到主机,主机被添加到known_hosts文件中,我能够从容器连接到主机而不会被提示输入密码(正如我在ssh-copy-id执行过程中给出的那样)。

现在,如果我从主机分离,等一段时间后再次附加,我会发现该user/.ssh/authorized_keys文件包含一些由 Google 生成的密钥,但没有我的密钥的踪迹(允许容器连接到主机的密钥))。

比一切都更让我困惑的是,我们之前一直使用这个过程,我们从来没有遇到过这样的问题。同一主机上的某些帐户仍然具有来自不再存在的容器的密钥!

有没有人对这种行为有任何想法?你知道有什么解决方案可以让我在需要时保留密钥吗?

Dav*_*vid 2

看起来帐户守护进程正在执行此任务。您可以参考此讨论主题以获取有关此内容的更多详细信息。

您可能会发现操作系统登录 API是一个更简单的管理选项。启用后,您可以使用单个gcloud 命令或API 调用来添加 SSH 密钥。