我在我的windows机器上使用ssh-keygen
创建了密钥文件,我得到了一个。pub文件和另一个文件,这是密钥,它是一个字符串,看起来像:
-----BEGIN OPENSSH PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
之后,我使用ssh-add
将该密钥文件添加到ssh-agent中。我通过运行ssh-add -l -E sha256
来确保它是添加的。从这个命令我得到了我的密钥文件的指纹字符串。
然后,我去github找到我想通过SSH克隆的repo,我去了我的配置文件->>settings->>sshKeyys,我还没有密钥,所以我添加了一个新的,作为密钥,我上传了我的。pub文件的内容,这是一个以" SSH -rsa XXXX"开头的字符串。之后,它被成功地添加到github上,我可以看到我刚刚在github的页面上添加的密钥的指纹,当我运行ssh-add -l -E sha256
时,它与我在windows机器上看到的指纹相匹配,所以它是相同的指纹。即使我看到在我的机器上的指纹是添加的结果ssh-agent私钥,虽然这在github实际上是.pub文件,所以我不知道他们是否应该给予相同的指纹,尽管我看到在我的机器上来自于一个关键文件(一个字符串从-----BEGIN OPENSSH PRIVATE KEY-----
),和一个从github来自.pub文件(一个字符串从ssh-rsa XXXX
。
无论如何,我试图通过运行ssh -vT git@github.com
来检查连接是否工作,并且它工作了,并且在详细日志中显示客户端(我的pc)正在发送与我运行ssh-add -l -E sha256
(也与我在github上创建的密钥匹配)时看到的相同的指纹文件,它还说服务器接受了该指纹。最后的消息是Hi <my_username> ! You've successfully authenticated, but GitHub does not provide shell access.
所以这表明从我的pc到github的ssh连接显然有效。
最后,我回到我的repo不是复制常规的HTTP字符串来克隆repo,而是复制SSH字符串git@github.com:<user>/<repo_name>.git
然后在我的windows机器上打开git bash终端并输入git clone git@github.com:<user>/<repo_name>.git
。
但是我得到了这个错误
Cloning into '<filepath>'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
这是罕见的,因为ssh -vT git@github.com
连接使用ssh-keygen
刚刚生成的密钥文件工作。所以我认为我的github用户没有被授权从那个repo中拉(它不是我的,它是一个组织),但是如果我尝试常规的HTTP方法克隆它工作,只是SSH方式不起作用。
我错过了什么吗?我已经检查了很多文档,我没有发现使用指定密钥ssh连接到github工作的情况,但是通过ssh克隆即使HTTP克隆也没有。
.pub
文件应该是一个公钥,以开头,例如ssh-rsa ...
ssh-add
用于私钥加密。
在你的git bash会话中输入:
export GIT_SSH_COMMAND='ssh -Tv'
您将检查您的密钥是否由SSH提出。
如果所述密钥有默认名称,如~/.ssh/[id_rsa|id_edcsa|id_ed25519]
, SSH将尝试使用这些名称。
如果没有,您需要一个~/.ssh/config
文件:
Host github.com
Hostname github.com
User git
IdentityFile /path/to/my/key (not the .pub)