背景:
host
的Google Compute Engine VM。 container
的计算机上运行着一个Docker容器。 user@gmail.com
的帐户连接到VM。ssh
从container
连接到host
,而没有提示输入user
密码。问题:
从容器成功连接到主机几分钟后,user/.ssh/authorized_keys
会通过Google本身的某些过程进行“修改”。据我了解,此过程会附加一些连接到VM所需的ssh密钥。但就我而言,该过程似乎会覆盖我从容器生成的密钥。
设置:
我按下SSH按钮,使用Google Compute Engine GUI连接到host
。
然后,我在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>(允许容器连接到主机的主机)。
让我感到不解的是,我们比以往任何时候都一贯使用此过程,而且从未遇到过这样的问题。同一主机上的某些帐户仍具有来自不再存在的容器的密钥!
有人对此行为有任何想法吗?您是否知道有什么解决方案可以让我在需要的时间内一直保留密钥?
答案 0 :(得分:1)
accounts守护程序似乎正在执行此任务。您可以参考this discussion线程以获取更多有关此的详细信息。
您可能会发现OS Login API是一个更简单的管理选项。启用后,您可以使用单个gcloud command或API call添加SSH密钥。
答案 1 :(得分:0)
如果有人仍在为此寻找解决方案,我通过将 SSH 密钥存储在 Compute Engine 元数据 https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys
中解决了这个问题