从生成 SSH 密钥到成功连接测试的经验笔记(以Gitee为例)
1. 生成 SSH 密钥对
-
选择合适的加密算法
-
ED25519:
- 密钥长度:私钥 256 位(32 字节),公钥 256 位(32 字节),签名 512 位(64 字节)。
- 安全性:提供 128 位的安全性,适用于大多数场景。
- 性能:高效,适用于资源受限的设备。
- 命令:
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519_gitee
-
RSA:
- 密钥长度:建议使用 4096 位(至少 2048 位)。
- 安全性:提供较高的安全性,但性能略低于 ED25519。
- 命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_rsa_gitee
-
ECDSA:
- 支持的曲线:
nistp256
:256 位密钥长度,提供 128 位的安全性。nistp384
:384 位密钥长度,提供 192 位的安全性。nistp521
:521 位密钥长度,提供 256 位的安全性。
- 安全性:根据所选曲线的不同,提供不同程度的安全性。
- 命令:
ssh-keygen -t ecdsa -b 256 -C "your_email@example.com" -f ~/.ssh/id_ecdsa_gitee
- 支持的曲线:
-
Ed448:
- 密钥长度:私钥 448 位(56 字节),公钥 448 位(56 字节),签名 912 位(114 字节)。
- 安全性:提供 224 位的安全性,适用于需要更高安全性的场景。
- 命令:
ssh-keygen -t ed448 -C "your_email@example.com" -f ~/.ssh/id_ed448_gitee
-
-
生成 Gitee 的 ED25519 密钥对:
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519_gitee
在生成密钥对时,系统会提示你输入一个 passphrase。请务必记住这个 passphrase,它用于保护你的私钥。
-
邮箱命名最佳实践
-
包含用户名和设备信息:将用户名和设备信息包含在邮箱地址中,可以清楚地知道这把密钥是哪个用户在哪个设备上生成的。例如:
ssh-keygen -t ed25519 -C "alice@laptop"
-
包含用途:如果密钥用于特定的项目或服务,可以在邮箱地址中包含这些信息。例如:
ssh-keygen -t ed25519 -C "alice@projectA"
-
包含日期:在邮箱地址中包含生成日期,可以帮助你追踪密钥的生命周期。例如:
ssh-keygen -t ed25519 -C "alice@laptop-20231001"
-
包含电子邮件地址:使用电子邮件地址作为邮箱地址的一部分,可以方便地与他人共享密钥时进行识别。例如:
ssh-keygen -t ed25519 -C "alice@example.com"
-
组合信息:可以将上述信息组合起来,创建更详细的邮箱地址。例如:
ssh-keygen -t ed25519 -C "alice@laptop-20231001-projectA"
-
-
查看生成的密钥文件:
ls ~/.ssh
你应该看到以下文件:
id_ed25519_gitee
id_ed25519_gitee.pub
2. 配置 ~/.ssh/config
文件
- 编辑
~/.ssh/config
文件:# Gitee Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee
3. 将公钥添加到 Gitee
-
复制公钥内容:
cat ~/.ssh/id_ed25519_gitee.pub
-
登录 Gitee 账户:
- 进入 Gitee 的设置页面。
- 找到“SSH 公钥”或“部署密钥”部分。
- 粘贴你复制的公钥内容,并保存。
4. 测试连接
-
测试与 Gitee 的连接:
ssh -T git@gitee.com
-
首次连接提示:如果这是你第一次连接到该服务器,系统会显示一条消息,询问你是否要继续连接。这条消息通常看起来像这样:
The authenticity of host 'gitee.com (IP_ADDRESS)' can't be established. RSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Are you sure you want to continue connecting (yes/no/[fingerprint])?
Gitee SSH 密钥指纹
以下是 Gitee 的公钥指纹:
SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88 (ED25519)
SHA256:meTsVSCgOas8fBnJyx8EPlUJr6iQ96riFmCFPfUkDtU (RSA)
SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc (ECDSA) -
确认并保存主机信息:输入
yes
并按回车键。这一步骤会让 SSH 客户端将服务器的公钥添加到你的~/.ssh/known_hosts
文件中。这意味着下次你再连接时,SSH 客户端可以验证服务器的身份,从而提高安全性。 -
验证成功的信息:如果一切正常,你应该会看到类似如下所示的消息:
Hi username! You've successfully authenticated, but Gitee does not provide shell access.
-
错误处理:如果你遇到任何错误,比如认证失败或无法建立连接,请检查你的 SSH 密钥是否已正确添加到 Gitee 账户中,或者是否有网络问题阻止了你连接到 Gitee。
5. 克隆或推送代码
5.1 方法一:
-
克隆 Gitee 仓库:
git clone git@gitee.com:username/repo.git
git@gitee.com:username/repo.git
是一个SSH URL,用于通过SSH协议访问Gitee上的Git仓库。这个URL的各个部分有不同的含义:
-
推送代码到 Gitee:
cd repo git remote add origin git@gitee.com:username/repo.git git push origin main -u # git push origin main --set-upstream
-u
是一个选项,它的全称是--set-upstream
,作用是将本地分支(在这个例子中是main
)与远程仓库中的相应分支(origin/main
)建立关联。- 最佳实践:在第一次推送(
push
)时设置本地主分支(main
)与远程主分支(orgin
)之间的上下游关系。
5.2 方法二:
解析 git@gitee.com:username/repo.git
-
git@
:- 这是SSH协议中的用户名。在Gitee(以及其他类似的Git托管服务)中,用户名通常是
git
。这是因为Gitee的服务器使用git
用户来处理所有的Git请求。
- 这是SSH协议中的用户名。在Gitee(以及其他类似的Git托管服务)中,用户名通常是
-
gitee.com
:- 这是Gitee的域名。表示你要连接的服务器地址。
-
:
:- 这个冒号是分隔符,用于区分服务器地址和仓库路径。
-
username
:- 这是你在Gitee上的用户名。表示你拥有的仓库所属的账户。
-
/repo.git
:- 这是你在Gitee上创建的仓库名称。
repo
是仓库的名字,.git
是Git仓库的标准后缀。
- 这是你在Gitee上创建的仓库名称。
完整URL的含义
git@gitee.com:username/repo.git
:- 这个URL表示你通过SSH协议连接到
gitee.com
服务器,使用git
用户名,访问username
账户下的repo
仓库。
- 这个URL表示你通过SSH协议连接到
总结
通过以上步骤,你可以生成并配置 SSH 密钥对,确保能够顺利连接到 Gitee。具体步骤包括:
- 生成 SSH 密钥对:选择合适的加密算法,使用
ssh-keygen
命令生成 Gitee 的 ED25519 密钥对,并设置一个 passphrase。同时,使用有意义的邮箱地址命名密钥,以便于管理和识别。 - 配置
~/.ssh/config
文件:编辑~/.ssh/config
文件,指定 Gitee 主机和对应的私钥文件。 - 将公钥添加到 Gitee:复制公钥内容并将其添加到 Gitee 的设置中。
- 测试连接:使用
ssh -T
命令测试与 Gitee 的连接。 - 克隆或推送代码:使用 Git 命令克隆和推送代码到 Gitee。
希望这篇经验笔记对你有所帮助!