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

时间:2018-11-29 16:35:24

标签: docker ssh google-compute-engine

背景

  • 我正在运行一个名为host的Google Compute Engine VM。
  • 在名为container的计算机上运行着一个Docker容器。
  • 我使用名为user@gmail.com的帐户连接到VM。
  • 我需要通过sshcontainer连接到host,而没有提示输入user密码。

问题:

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

设置:

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

ssh

然后,我在AskUbuntu上遵循this answer中描述的步骤。 我在user上为host设置了密码:

user@host:~$ sudo passwd user

我在PasswordAuthentication中将yes设置为sshd_config,然后重新启动sshd

user@host:~$ sudo nano /etc/ssh/sshd_config
user@host:~$ sudo systemctl restart sshd

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

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

密钥已成功复制到主机,该主机已添加到known_hosts文件,并且我能够从容器连接到主机而无需提示输入密码(正如我在密码输入过程中所输入的那样) ssh-copy-id执行)。

现在,如果我脱离主机,花一些时间再重新连接,我发现user/.ssh/authorized_keys文件包含Google生成的某些密钥,但是没有任何密钥< / strong>(允许容器连接到主机的主机)。

让我感到不解的是,我们比以往任何时候都一贯使用此过程,而且从未遇到过这样的问题。同一主机上的某些帐户仍具有来自不再存在的容器的密钥!

有人对此行为有任何想法吗?您是否知道有什么解决方案可以让我在需要的时间内一直保留密钥?

2 个答案:

答案 0 :(得分:1)

accounts守护程序似乎正在执行此任务。您可以参考this discussion线程以获取更多有关此的详细信息。

您可能会发现OS Login API是一个更简单的管理选项。启用后,您可以使用单个gcloud commandAPI call添加SSH密钥。

答案 1 :(得分:0)

如果有人仍在为此寻找解决方案,我通过将 SSH 密钥存储在 Compute Engine 元数据 https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys

中解决了这个问题