遇到 [email protected]: Permission denied (publickey).
这个错误通常意味着你的SSH密钥没有被GitHub识别或配置不正确。这里有几个步骤可以帮助你解决这个问题:
1. 检查SSH密钥是否已添加到GitHub
-
查看你的SSH密钥:
在本地机器上,你可以使用ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
(如果你的私钥文件名不是id_rsa
,请相应更改)来查看你的公钥的MD5指纹。 -
登录GitHub:
在GitHub上,进入你的账户设置(点击右上角的头像 -> Settings),然后点击 "SSH and GPG keys"。 -
比较指纹:
检查GitHub上列出的SSH密钥的指纹是否与你在本地机器上看到的指纹相匹配。如果不匹配,你可能需要添加新的密钥或更新现有的密钥。
如果你在执行与SSH密钥相关的命令时遇到“没有此目录”的错误,特别是关于~/.ssh/id_rsa
,这通常意味着你的SSH密钥对(id_rsa
和id_rsa.pub
)尚未生成,或者它们不在预期的~/.ssh
目录下。下面是一些详细的步骤来帮助你找到或生成SSH密钥,并确保它们位于正确的位置。
1. 检查~/.ssh
目录
首先,你需要检查你的用户主目录下是否存在.ssh
文件夹。在Unix-like系统(如Linux和macOS)中,你可以使用ls -a
命令来列出包括隐藏文件在内的所有文件和文件夹。
ls -a ~/.ssh |
如果输出显示.ssh
目录不存在,那么你需要创建它,并确保它具有适当的权限。
2. 创建.ssh
目录(如果它不存在)
如果.ssh
目录不存在,你可以使用mkdir
命令来创建它,并使用chmod
命令来设置正确的权限。
mkdir -p ~/.ssh | |
chmod 700 ~/.ssh |
这里,700
权限意味着只有文件所有者可以读取、写入和执行该目录(这是SSH密钥的安全要求)。
3. 生成SSH密钥对
一旦.ssh
目录存在并具有正确的权限,你就可以生成SSH密钥对了。使用ssh-keygen
命令来做到这一点。
ssh-keygen -t rsa -b 4096 -C "[email protected]" |
在命令中,-t rsa
指定密钥类型为RSA,-b 4096
指定密钥长度为4096位(这是一种安全的选择),-C
后面跟的是你的电子邮件地址(这是一个注释,用于帮助识别密钥,但它不是必需的)。
执行此命令时,系统会提示你输入密钥的存储位置和文件名(默认为~/.ssh/id_rsa
),以及一个可选的密码短语(passphrase)。如果你不想设置密码短语,只需按回车即可跳过。
4. 验证SSH密钥的生成
生成密钥后,你应该在~/.ssh
目录下看到两个新文件:id_rsa
(私钥)和id_rsa.pub
(公钥)。你可以使用ls -l ~/.ssh
命令来验证它们的存在。
当然,我会详细解答第5步和第6步,这两步涉及到将SSH公钥添加到GitHub并测试SSH连接。
第5步:将公钥添加到GitHub
1. 打开公钥文件
首先,你需要打开包含你的SSH公钥的文件。这个文件通常是~/.ssh/id_rsa.pub
(如果你使用的是默认的RSA密钥对名称)。你可以使用任何文本编辑器来打开这个文件,比如nano
、vim
、gedit
(在GNOME桌面环境中)或TextEdit
(在macOS中,但请注意,macOS的默认文本编辑器可能会添加额外的格式,所以最好使用命令行工具或兼容的纯文本编辑器)。
示例(使用cat
命令在命令行中查看):
bash复制代码
cat ~/.ssh/id_rsa.pub |
然后,你可以复制输出的公钥内容。
2. 登录GitHub
在Web浏览器中,登录到你的GitHub账户。
3. 导航到SSH密钥设置
- 点击右上角的头像,选择“Settings”(设置)。
- 在左侧边栏中,点击“SSH and GPG keys”(SSH和GPG密钥)。
4. 添加新的SSH密钥
- 在“SSH keys”部分,点击“New SSH key”(新建SSH密钥)按钮。
- 在“Title”(标题)字段中,输入一个描述性的标题,比如你的计算机名称或电子邮件地址,以便识别这个密钥。
- 在“Key”(密钥)字段中,粘贴你从
id_rsa.pub
文件复制的公钥内容。 - 点击“Add SSH key”(添加SSH密钥)按钮保存。
第6步:测试SSH连接
在将公钥添加到GitHub之后,你应该测试SSH连接以确保一切配置正确。
1. 打开命令行工具
在你的计算机上打开终端或命令行界面。
2. 使用SSH命令测试连接
输入以下命令来测试SSH连接:
bash复制代码ssh -T [email protected] |
这个命令尝试使用SSH协议连接到GitHub的git
用户,但不执行任何实际的Git命令(-T
选项禁止分配伪终端)。
3. 验证输出
如果SSH连接成功,你将看到一条类似于以下内容的消息:
复制代码Hi username! You've successfully authenticated, but GitHub does not provide shell access. |
这里的username
会被替换成你的GitHub用户名。这条消息表明你的SSH密钥已经被GitHub成功识别,但你无法通过SSH获得shell访问权限(因为GitHub不提供这种访问)。
如果你看到权限拒绝的错误,比如“Permission denied (publickey)”,那么你需要检查以下几点:
- 你的公钥是否已正确添加到GitHub。
- 你的私钥(
id_rsa
)是否位于~/.ssh
目录中,并且该目录的权限设置正确(通常为700)。 - 你的SSH客户端配置(通常位于
~/.ssh/config
,但通常不需要更改,除非你有特殊需求)。 - 你的网络连接是否稳定,且没有防火墙或路由规则阻止SSH连接。
按照这些步骤操作后,你应该能够成功地将SSH公钥添加到GitHub,并通过SSH测试连接到GitHub。
标签:git,remote,repository,密钥,rsa,GitHub,ssh,id,SSH From: https://www.cnblogs.com/WG11/p/18314736