我正在尝试从 Ubuntu 12.04 桌面上的终端使用 git。我的存储库托管在 Github 中,并且我有一个桌面密钥。每当我执行“git pull”或“git push”时,都会弹出一个对话框,要求我输入密码。如果我正确输入密码,则一切正常。但是,如果我通过 ssh 连接到我的桌面并执行 git pull 或 push,则该命令不会提示输入密码,并输出以下错误:
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
这个错误是有道理的,因为我没有输入密码。所以问题是,我怎样才能在终端中提示输入密码?
谢谢!
答案1
我想我明白了。运行 ssh -vT 后[电子邮件保护],我注意到我的密钥没有包含在用于身份验证的尝试密钥列表中:
debug1: Trying private key: /home/***/.ssh/id_rsa
debug1: Trying private key: /home/***/.ssh/id_dsa
debug1: Trying private key: /home/***/.ssh/id_ecdsa
debug1: No more authentication methods to try.
我觉得我需要以某种方式告诉 ssh 在连接到 github.com 时使用我的特定密钥。我在 ~/.ssh/config 文件中添加了一个 github 条目
Host github.com
IdentityFile ~/.ssh/id_github.pub
执行此操作后,ssh 命令和 git push/pull 命令会在终端中要求输入密码并成功连接。我仍然不知道为什么从桌面运行命令时会出现正确密钥的对话框。有人知道为什么会这样吗?
谢谢!
答案2
如果你想在通过 ssh 连接的机器上推送/拉取 git,使用 git 协议的 ssh 版本,你可以用以下两种方式之一进行操作:
1)做不是ssh -A
连接到机器时转发代理 ( ),并确保您要使用的密钥位于您要连接的主机上,并且 ssh 正在寻找它。您可以使用 ssh 配置文件中IdentifyFile
的选项来执行此操作Host
。请注意,您应该指向私钥文件,而不是公钥文件。
2)在连接到您想要使用 git 的主机时转发代理ssh -A
,并确保私钥在您连接的客户端计算机上可用,并且 ssh 可以找到它。
为了稍微提高安全性,你可以使用来自每台机器的不同密钥,并将用于 github 的密钥的公钥添加到你的 github 帐户中。这样,如果一个密钥被泄露,你只需要在一个地方替换它,而不是试图确保你在所有地方都有相同的密钥。