更新至 16.04 版后,通过 ssh 进行的 Git 无法自动找到密钥

更新至 16.04 版后,通过 ssh 进行的 Git 无法自动找到密钥

问题

我最近在我的计算机上安装了 Kubuntu 16.04.2。从那时起,我就不能再使用我的 ssh 密钥访问 bitbucket 和 github 存储库了。在旧系统 (Ubuntu 14.04) 上,第一次使用密钥时会出现一个标题为“解锁私钥”的弹出窗口(要求输入密码),然后我就可以为剩余的会话做好准备。

自更新以来我收到以下错误:

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这是因为密钥尚未添加到ssh-agent(尚未)。我可以使用以下命令手动执行此操作:

$ ssh-add ~/.ssh/my_key
Enter passphrase for .ssh/my_key:

这是一种解决方法。

问题

虽然上述解决方法可能会奏效,并且有自动执行的选项(请参阅下面的链接),但我更希望恢复旧功能,即在第一次使用时自动询问我的密码。

我(我的系统)缺少什么才能实现这个功能?我不太清楚涉及哪些部件/程序。

附加信息

  • 不确定这是否相关,但我正在使用 LDAP,所以从 Ubuntu 14.04(使用 Unity)移动到 16.04(使用 KDE)时,我保留了我的主文件夹的内容。

  • 对于我的电子邮件加密密钥,行为没有改变,并通过弹出窗口要求我输入密码。

  • 另一个问题处理类似的问题。但是,这处理的是不同的版本,并且有不同的目标(他们让它在控制台上运行,我希望我的弹出窗口能恢复)。

答案1

正如前面所说,添加

IdentityFile ~/.ssh/my_key
AddKeysToAgent yes

~/.ssh/config实现类似的行为。

如果我将 ( AddKeysToAgent yes) 添加到我的本地 ssh 配置 ( ~/.ssh/config),密钥也会被保存。但是查询是在终端中,这本身并不坏,但我想了解如何恢复此弹出窗口。

旧版 Ubuntu 中的弹出窗口来自gnome-keyring,您在那里存储了密钥。它显然不在 KDE 版 Ubuntu 中。

没有简单的方法可以从纯 OpenSSH 获得相同的提示。但您可以尝试使用 KWallet,它可能具有类似的功能。

答案2

身份文件的默认文件名如下:

#   IdentityFile ~/.ssh/identity
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519

添加您自己的文件/etc/ssh/ssh_config或者重命名它就可以了。

答案3

我会非常惊讶 ubuntu 升级或版本与此有任何关系。

这听起来确实像是 git+ssh 的问题。 这可能毫无关联,但我在通过 ssh 使用 git 和 bitbucket 服务时也遇到了类似的问题。

发生的事情是,我有 2 个 bitbucket 帐户。并且两个 SSH 密钥都加载到我的代理中。bitbucket 不允许多个帐户重复使用同一个 ssh 密钥。所以你被迫有两个。

当两者都加载到我的代理中时,我登录了错误的帐户并出现相同的Permission denied错误。

我曾经ssh-add -d暂时取消了我经纪人的身份

然后我发现我可以在我的 ssh 配置中正确地配置它。

Host bitbucket_account2
  HostName bitbucket.org
  User git
  PreferredAuthentications publickey
  IdentityFile /home/mathieu/.ssh/bitbucket_account2_rsa
  IdentitiesOnly yes
  ControlMaster no

然后

git remote remove origin
git remote add origin bitbucket_account2:team/soft.git

玩得开心

相关内容