在同一台电脑上管理多个 SSH 密钥对(公钥和私钥),用于连接不同的 Git 服务器或账户,是一个常见的需求。下面是一份详细的步骤指南,帮助你生成和配置多个 SSH 密钥对:
步骤一:生成新的 SSH 密钥对
-
打开终端或命令行窗口(例如,使用 Terminal 或 Git Bash)。
-
生成新的 SSH 密钥对:
- 运行以下命令,替换
<your_email@example.com>为电子邮件地址。如果有多个密钥对,可以为每个生成独特的标识符。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"-t rsa指定生成 RSA 类型的密钥对。-b 4096指定密钥的比特长度为 4096 位,这是一种更安全的选择。-C选项是一个注释,用于标识这个密钥对的描述,一般填写邮箱或者其他标识信息。
- 运行以下命令,替换
-
选择存储路径和文件名:
- 程序将提示你输入保存密钥对文件的位置,默认路径为
~/.ssh/id_rsa和~/.ssh/id_rsa.pub。 - 如果想为不同的密钥对使用不同的文件名,可以在提示时输入不同的文件名,例如
~/.ssh/id_rsa_second。
- 程序将提示你输入保存密钥对文件的位置,默认路径为
-
输入密码(可选):
- 可以选择为密钥对添加密码保护,增加安全性。这样做会要求在使用密钥时输入密码。
步骤二:配置 SSH 配置文件
-
检查或创建 SSH 配置文件:
- 在终端中检查是否已经存在
~/.ssh/config文件。如果不存在,则可以创建一个新的配置文件。
touch ~/.ssh/config - 在终端中检查是否已经存在
-
编辑 SSH 配置文件:
- 使用文本编辑器打开
~/.ssh/config文件,并添加配置信息。每个密钥对都应该有一个单独的配置块。
vi ~/.ssh/config - 使用文本编辑器打开
-
配置每个 SSH 密钥对:
- 对于每个 SSH 密钥对,添加一个新的 Host 配置,指定主机名、用户名和对应的私钥路径。例如:
# 第一个 SSH 密钥对配置 Host gitee1 HostName github.com User git IdentityFile ~/.ssh/id_rsa # 第二个 SSH 密钥对配置 Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_rsa_secondHost是用于标识主机的别名,在 SSH 连接时使用。(这里很重要)HostName是实际的主机名或 IP 地址。User是 SSH 连接的用户名。IdentityFile是对应 SSH 私钥文件的路径。
-
保存并关闭文件:
- 在编辑器中保存
~/.ssh/config文件并关闭编辑器。
- 在编辑器中保存
步骤三:添加 SSH 公钥到 Git 托管服务
-
复制 SSH 公钥:
- 使用以下命令复制 SSH 公钥,以便将其添加到 Git 托管服务的账户设置中。
pbcopy < ~/.ssh/id_rsa.pub- 如果公钥文件名不同,请相应地更改命令中的文件名。
-
粘贴到 Git 托管服务:
- 将复制的 SSH 公钥粘贴到 Git 托管服务(例如 GitHub、GitLab、Gitee)的账户设置中的 SSH 密钥部分。
步骤四:测试 SSH 连接
-
测试第一个 SSH 密钥对:
- 使用以下命令测试第一个 SSH 密钥对是否可以正常连接到远程服务(例如 GitHub):
ssh -T git@gitee1 -
测试第二个 SSH 密钥对:
- 使用以下命令测试第二个 SSH 密钥对是否可以正常连接到远程服务(例如 Gitee):
ssh -T git@gitee.com
小结
通过以上步骤,你应该可以成功地在同一台电脑上生成、配置和管理多个 SSH 密钥对,用于连接不同的 Git 托管服务或账户。这种方法可以有效地帮助管理和隔离不同的项目或组织所需的认证密钥。
可能出现的问题
1.确保 Git 仓库的远程 URL 设置正确,应该是使用 gitee1 作为主机名
可以先查询远程url信息,看是否已添加正确url:
$ git remote -v
个人仓库中,使用 gitee1 作为主机名。例如,设置远程仓库的 URL 如下:
git remote set-url origin gitee1:<用户名>/function.git
- 密钥添加进SSH 代理
确保 SSH 代理中添加了相应的密钥。确保已经启动了 SSH 代理并添加了私钥:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_second
检查是否都被添加:
$ ssh-add -l
输出结果为多条密钥信息,则添加成功。
- SSH 验证:
由于 gitee1 是自定义的主机名,所以应该使用 ssh -T git@gitee1 来验证连接,而不是 ssh -T git@gitee.com。由于 gitee1 映射到 gitee.com,可以验证是否能成功连接
输入代码:
$ ssh -vT git@gitee1
查看每个密钥的详细信息,验证是否准确
-
如果配置正确,你应该看到类似于以下的输出:
复制代码 Hi <your_username>! You've successfully authenticated, but GITEE.COM does not provide shell access.
3.克隆(git clone) :
当使用 git clone 命令时,Git 会自动创建一个与远程仓库同名的文件夹,并将远程仓库的内容复制到该文件夹中。例如:
bash
复制代码
git clone https://gitee.com/<用户名>/function.git
这将创建一个名为 function 的文件夹。
-
拉取(
git pull) :如果已经在本地有一个文件夹,并且该文件夹已经是一个 Git 仓库(即已经执行过
git init或git clone),可以在该文件夹内使用git pull命令将远程仓库的更改拉取到本地。这时,你不需要手动创建文件夹。 -
推送(
git push) : 同样地,推送到远程仓库时,只需要在一个已经是 Git 仓库的文件夹内执行git push命令,无需创建与远程仓库同名的文件夹。
总之,Git 会自动管理仓库的文件夹结构,只需在想要的位置运行命令即可。