GitHub SSH keys
使用 SSH 连接到 GitHub 仓库,需要为 GitHub 生成单独的 SSH 密钥。
GitHub 提供了一套完整的 文档教程
以下仅简单介绍如何生成并使用 SSH 密钥。
检查现有 SSH 密钥
在生成新的 SSH 密钥之前,应该检查本地计算机是否存在现有密钥。
- 打开 Git Bash。
- 输入
ls -al ~/.ssh
以查看是否存在现有的 SSH 密钥。
ls -al ~/.ssh
- 检查目录列表以查看是否已经有 SSH 公钥。 默认情况下,GitHub 的一个支持的公钥的文件名是以下之一。
- id_rsa.pub
- id_ecdsa.pub
- id_ed25519.pub
提示:
如果收到错误,指示 ~/.ssh
不存在,则表明默认位置中没有现有的 SSH 密钥对。 您可以在下一步中创建新的 SSH 密钥对。
生成新 SSH 密钥
可在本地计算机上生成新的 SSH 密钥。 生成密钥后,可以将公钥添加到你在 GitHub.com 上的帐户,以启用通过 SSH 进行 Git 操作的身份验证。
- 打开 Git Bash。
- 粘贴以下文本,将示例中使用的电子邮件替换为 GitHub 电子邮件地址。
ssh-keygen -t ed25519 -C "your_email@example.com"
注意: 如果你使用的是不支持 Ed25519
算法的旧系统,请使用以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将以提供的电子邮件地址为标签创建新 SSH 密钥。
> Generating public/private ALGORITHM key pair.
当系统提示您“Enter a file in which to save the key(输入要保存密钥的文件)”时,可以按 Enter
键接受默认文件位置。 请注意,如果以前创建了 SSH 密钥,则 ssh-keygen
可能会要求重写另一个密钥,在这种情况下,我们建议创建自定义命名的 SSH 密钥。 为此,请键入默认文件位置,并将 id_ALGORITHM
替换为自定义密钥名称。
> Enter a file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM):[Press enter]
- 在提示符下,键入安全密码。 有关详细信息,请参阅 "使用 SSH 密钥密码"。
将 SSH 密钥添加到 ssh-agent
在向 ssh 代理添加新的 SSH 密钥以管理您的密钥之前,您应该检查现有 SSH 密钥并生成新的 SSH 密钥。
如果已安装 GitHub Desktop,可使用它克隆存储库,而无需处理 SSH 密钥。
Windows
- 在新的管理员终端窗口(
PowerShell
或CMD
)中,确保ssh-agent
正在运行。可以使用“使用 SSH 密钥密码”中的“自动启动ssh agent
”说明,或者手动启动它:
# start the ssh-agent in the background
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agent
- 在无提升权限的终端窗口中,将 SSH 私钥添加到
ssh-agent
。 如果使用其他名称创建了密钥或要添加具有其他名称的现有密钥,请将命令中的ided25519
替换为私钥文件的名称。
ssh-add /c/Users/YOU/.ssh/id_ed25519
Linux
- 运行以下命令使
ssh-agent
在后台运行:
eval "$(ssh-agent -s)"
- 将私钥添加到
ssh-agent
之中
ssh-add ~/.ssh/id_ed25519
将 SSH 公钥添加到 GitHub 上的帐户
可以添加 SSH 密钥并将其用于身份验证或提交签名,或同时用于这两个目的。如果要使用相同的 SSH 密钥进行身份验证和签名,则需要将其上传两次。
- 将 SSH 公钥复制到剪贴板。
cat ~/.ssh/id_ed25519.pub
- 打开到 GitHub 设置页面
- 在侧边栏中,点击 “SSH and GPG keys”。
- 添加新的 SSH key。
- 设置信息并把公钥粘贴到 “Key” 栏,保存添加 SSH key。
测试 SSH 连接
添加完成后,运行以下命令测试 SSH 连接。
ssh -T git@github.com
您可能会看到类似如下的警告:
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
验证所看到的信息是否与上面的公钥匹配。如果是,则键入 yes
:
Hi Ares-Chang! You've successfully authenticated, but GitHub does not provide shell access.
验证生成的消息包含您的用户名。 如果收到“权限被拒绝”消息,请参阅“错误:权限被拒绝(公钥)”。