我正在尝试通过将SSH密钥添加到项目元数据来授予对GCE VM的访问权限。我当前的SSH密钥位于项目元数据中,我可以使用以下方式连接很好:
ssh -i ~/.ssh/<private_key> <username>@<instance_ip>
现在,我生成了另一个密钥:
ssh-keygen -t rsa -f ~/.ssh/<new_key> -C <new_username>
将生成的公钥添加到项目元数据后,然后运行:
ssh -i ~/.ssh/<new_private_key> <new_username>@<instance_ip>
但是我得到Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
和-vvv
标志一起运行,除了密钥被拒绝之外,没有给我太多帮助。
我知道/检查过的事情:
nc <instance_nat_ip> 22
显示“ OpenSSH”等)~./ssh
上的权限不是问题,因为另一个密钥对可以在同一目录中正常工作,此外,两个密钥对仍然具有相同的权限我尝试过的事情:
问题:
ssh-keygen
步骤中指定的用户名是否必须已经存在于远程实例上?即我是否必须在SSH进入实例的同时运行sudo useradd <new_username>
enable-oslogin:TRUE
曾短暂地应用于实例(我不确定,因为我不是创建实例的人),但是它不再存在于实例或项目中元数据。启用该功能,即使只是短暂启用,也会引起一些问题吗?编辑:我在同一项目中使用相同的网络详细信息启动了一个新实例,并且能够使用新密钥通过SSH到该实例。原始实例仍在拒绝密钥
答案 0 :(得分:2)
进行了一些挖掘,发现从元数据服务器传播帐户信息的systemd服务是一个名为google-accounts-daemon
的守护程序。
运行sudo ps aux | grep daemon
时,我没有看到它在创建的测试实例上运行。
因此,当我运行sudo systemctl restart google-accounts-daemon
时,SSH密钥就神奇地传播了,一切正常。
我不知道是什么原因导致守护程序首先停止运行,所以如果有人有想法,万一将来出现,将不胜感激。