【问题标题】:Can connect with existing SSH key but not a new one可以连接现有的 SSH 密钥,但不能连接新密钥
【发布时间】:2019-02-25 23:40:36
【问题描述】:

我正在尝试通过将 SSH 密钥添加到项目元数据来授予对 GCE 虚拟机的访问权限。我当前的 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 &lt;instance_nat_ip&gt; 22 显示“OpenSSH”等)
  • 生成任何 SSH 密钥时均未使用密码
  • 对项目范围的元数据没有实例级别的限制
  • 尚未添加实例级 ssh 密钥
  • 没有导致密钥格式错误的换行符/换行符
  • ~./ssh 上的权限不是问题,因为另一个密钥对在同一目录中工作正常,此外,两个密钥对无论如何都具有相同的权限
  • 项目或实例未启用 OSLogin

我尝试过的事情

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

问题

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

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

【问题讨论】:

  • 查看 sshd 日志文件。
  • 您是否对实例进行了任何更新?

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


【解决方案1】:

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

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

所以当我运行sudo systemctl restart google-accounts-daemon 时,SSH 密钥神奇地传播并且一切正常。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2016-11-10
    • 2011-09-22
    • 2014-12-30
    • 1970-01-01
    相关资源
    最近更新 更多