可以连接现有的SSH密钥,但不能连接新的密钥

时间:2019-02-22 17:33:02

标签: google-cloud-platform google-compute-engine

我正在尝试通过将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标志一起运行,除了密钥被拒绝之外,没有给我太多帮助。

我知道/检查过的事情

  • 防火墙不是问题,因为我可以使用同一位置的原始密钥进行连接
  • 实例正在运行SSH(正在运行nc <instance_nat_ip> 22显示“ OpenSSH”等)
  • 在生成任何SSH密钥时不使用密码短语
  • 对项目范围的元数据没有实例级限制
  • 没有添加实例级ssh密钥
  • 没有换行符/换行符,导致密钥格式错误
  • ~./ssh上的权限不是问题,因为另一个密钥对可以在同一目录中正常工作,此外,两个密钥对仍然具有相同的权限
  • 项目或实例上均未启用OSLogin

我尝试过的事情

  • 删除和读取项目元数据中的SSH密钥
  • 尝试在他人的机器上生成的新密钥对
  • 重新启动sshd服务

问题

  • 在将密钥添加到元数据之前,在ssh-keygen步骤中指定的用户名是否必须已经存在于远程实例上?即我是否必须在SSH进入实例的同时运行sudo useradd <new_username> 创建新的测试实例却发现情况并非如此,项目元数据中的所有用户都是自动创建的
  • 为什么我现有的SSH密钥可以工作,而不是新的,即使它们以相同的方式添加也不能工作?
  • 很可能很久以前enable-oslogin:TRUE曾短暂地应用于实例(我不确定,因为我不是创建实例的人),但是它不再存在于实例或项目中元数据。启用该功能,即使只是短暂启用,也会引起一些问题吗?

编辑:我在同一项目中使用相同的网络详细信息启动了一个新实例,并且能够使用新密钥通过SSH到该实例。原始实例仍在拒绝密钥

1 个答案:

答案 0 :(得分:2)

进行了一些挖掘,发现从元数据服务器传播帐户信息的systemd服务是一个名为google-accounts-daemon的守护程序。

运行sudo ps aux | grep daemon时,我没有看到它在创建的测试实例上运行。

因此,当我运行sudo systemctl restart google-accounts-daemon时,SSH密钥就神奇地传播了,一切正常。

我不知道是什么原因导致守护程序首先停止运行,所以如果有人有想法,万一将来出现,将不胜感激。