错误的密码短语输入了3次:Git不再要求输入密码短语。

12

我想推送到一个远程 git 仓库,但我三次输入了错误的密钥密码。我已经创建了一个新的 SSH 密钥,并将新的公钥注册到仓库服务器上。 但是 SSH 代理不会提示输入密码,只会持续告诉我:

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

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

我该如何在 Ubuntu 下解决这个问题?

编辑

根据建议,我尝试了 ssh-add

sadik@sadix:~$ cd .ssh/
sadik@sadix:~/.ssh$ ls
config  github_rsa  github_rsa.pub  id_rsa  id_rsa.pub  keys.zip  known_hosts
sadik@sadix:~/.ssh$ ssh-add 
Enter passphrase for /home/sadik/.ssh/id_rsa: 
Identity added: /home/sadik/.ssh/id_rsa (/home/sadik/.ssh/id_rsa)
sadik@sadix:~/.ssh$ 
sadik@sadix:~/.ssh$ cd
sadik@sadix:~$ cd some/git-repo/
sadik@sadix:~/some/git-repo/$ git push -u bitbucket master
Permission denied (publickey).
fatal: Could not read from remote repository.

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

我需要补充一下,这个Git仓库是从GitHub上克隆来的(不是我拥有的)。我想把它推送到我在Bitbucket上的私人仓库中。我不知道这是否会导致权限问题,但我的第一个问题是ssh没有提示输入密码。即使重新启动或注销也是如此。

编辑

正如Jakuje友好地建议的那样,我输入了命令GIT_SSH_COMMAND="ssh -vvv" git push -u bitbucket master来获取客户端日志。这是输出的结尾:

debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/sadik/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/sadik/.ssh/id_dsa
debug3: no such identity: /home/sadik/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/sadik/.ssh/id_ecdsa
debug3: no such identity: /home/sadik/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/sadik/.ssh/id_ed25519
debug3: no such identity: /home/sadik/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
fatal: Could not read from remote repository.

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

由于某种原因,它在搜索公钥时寻找id_dsa,所以我将id_rsa复制到id_dsa并再次尝试。 现在提示输入密码!但是...当我输入错误的密码时,它会再次询问。当我输入正确的密码时,它会说权限被拒绝。

$ git push -u bitbucket master
Enter passphrase for key '/home/sadik/.ssh/id_dsa': 
Enter passphrase for key '/home/sadik/.ssh/id_dsa': 
Enter passphrase for key '/home/sadik/.ssh/id_dsa': 
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
  1. 权限有什么问题?
  2. 为什么它要寻找id_dsa而不是id_rsa

你的密钥(公钥和私钥)是否在你的~/.ssh目录下?你是否执行了chmod 700 ~/.ssh命令? - Jonathan.Brink
@Jonathan.Brink 是的,没错。它一直运行得非常完美,直到我忘记了密码短语并多次猜测错误。所以我创建了一个新的。唯一的问题是,它不会提示输入密码短语。它只接受我之前输入的错误密码。 - Sadık
它在几行之前使用了RSA,但被拒绝了。请确保它是您在Bitbucket上设置的密钥,重新启动您的SSH代理并重试。 - Jakuje
你看过 '$git help credentials' 的文档吗?在我看来,你可能有几个旧的凭据被缓存了,而它无法在 ~/.ssh/ 下找到它们的密钥。 - Doug Coburn
@DougCoburn 是的,我尝试重置 credential.helper(就像这里 https://dev59.com/DmMl5IYBdhLWcg3wwZIq#18542920 中所述),但似乎没有任何效果。 - Sadık
2个回答

6
事情看起来足够复杂,可能值得重新开始:
  1. 删除 ~/.ssh 中不需要的所有密钥(如果有要保留的密钥,请考虑将它们移动到另一个目录)。
  2. 如果存在 ~/.ssh/config 文件,请检查它是否有可疑的行。
  3. 如果您正在使用 ssh-agent,请使用 ssh-add -D 命令删除所有密钥。使用 ssh-add -l 命令检查是否没有任何密钥。如果看到任何输出,则说明您遇到了此错误。注销、重新登录,并验证 ssh-add -l 命令是否没有任何输出。
  4. 运行 ls -al ~/.ssh 命令并检查其中是否有密钥。
  5. 使用 ssh-keygen 命令创建一个新密钥。当它要求输出文件时,请按回车键使用默认设置,然后输入两次密码。
  6. 运行 ls -al ~/.ssh 命令并检查 id_rsaid_rsa.pub 是否存在。
  7. 从 Bitbucket 中删除现有密钥。
  8. ~/.ssh/id_rsa.pub 的内容添加到 Bitbucket 中。
  9. 使用 ssh -T git@bitbucket.org 命令测试连接。如果失败,请发布 ssh -vvv git@bitbucket.org 命令的输出。
  10. 检查 git 命令是否正常工作。

为什么它在寻找 id_rsa 而不是 id_dsa

SSH 会尝试多个密钥,直到找到一个可用的。它首先尝试 id_rsa,但该密钥被拒绝,因此它继续尝试 id_dsa

感谢@Leon提到了 ssh-add


我没有提到 ssh-agent(只有 ssh-add)。无论如何,你的回答更详细和有帮助,所以我会删除我的回答。 - Leon
@Leon:谢谢!请不要删除您的答案,因为记录下您的个人经验很有用。我已经更新了我的答案,关于ssh-agent和ssh-add的区别。 - tom
谢谢。我仍然不知道出了什么问题,但有时重新开始是个好主意。 - Sadık
@Sadik:感谢您的慷慨奖励。现在它是否正常工作? - tom
@tom 是的,谢谢。除了你提到的步骤,我还创建了一个新目录并在其中进行了 git init 操作,然后将除了与 git 相关的文件之外的所有文件复制到了新目录中。 - Sadık

4

我忘记了密码并且多次猜错。所以我创建了一个新的。

看来您之前有一个可用的密钥,然后您创建了一个新的,现在您想知道为什么它不起作用。

您需要将公钥复制到服务器的authorized_keys文件中。


这就是我在写“...并在仓库服务器上注册了新的公钥”时的意思。我想知道为什么命令行没有要求输入密码,而是假设我没有访问权限,这是基于之前的尝试。 - Sadık
1
它不会做任何假设。如果你正确设置了它,它应该可以工作。请发布服务器和客户端的调试日志。 - Jakuje
没有太多对错之分。服务器在bitbucket.org上。我在那里没有看到任何日志。我已经创建了一个新的密钥对,并将公钥粘贴到了bitbucket上。就这些。 - Sadık
我没有看到任何客户端日志。 - Sadık
1
你把什么新的密钥放到了Bitbucket中?GIT_SSH_COMMAND="ssh -vvv" git push -u bitbucket master会生成你的调试日志。 - Jakuje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接