起因

由于自己的电脑上有多个 SSH 的公钥和私钥,github 有一个 SSH key,自己的小站提交时也有一个 SSH key,然后今天想弄一个 gitee 的 SSH key,所以今天上午和下午放学之后一直都在折腾这件事情。今天在手机上操作自己的电脑,弄了一上午操作失败。

在学习如何管理自己的 key 时,同时也学到了 git 的相关命令,git 用起来真的挺好。

本来以为今天上午就能搞定,结果是下午放学之后才搞定的。挺想分享这段经过。

经过

在开始之前,如果你的电脑没有 git,请先在电脑上安装一个 git

SSH 配置

首先,输入 ssh-keygen 命令,-C 参数是填写你的邮箱,-f 参数是指定公私钥生成的位置名字,其中,~/.ssh/ 是位置,id_rsa_me_gitee 名字然后按回车

$ssh-keygen -t rsa -C "bestguo2020@foxmail.com" -f ~/.ssh/id_rsa_me_gitee

然后一直回车,直到生成字符画,就说明生成成功了。

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/xxxxxx/.ssh/id_rsa_me_gitee.
Your public key has been saved in /c/Users/xxxxxx/.ssh/id_rsa_me_gitee.pub.
The key fingerprint is:
SHA256:oezVJIt23bVCmgMnwQD+7orlTRxeLSMaMk+M3SLLslQ bestguo2020@foxmail.com
The key's randomart image is:
+---[RSA 3072]----+
|    ...o.        |
|   .    ..       |
|    .   = o . .  |
|   + + o % = . . |
|  =E* X S B o .  |
| ..B X * o . .   |
|..o + *          |
|.o + +           |
|. . o.o          |
+----[SHA256]-----+

输入 ssh-agent bash 命令,然后清空代理的公钥

$ ssh-agent bash

$ ssh-add -D
All identities removed.

添加我们刚刚生成的公钥

$ ssh-add ~/.ssh/id_rsa_me_gitee
Identity added: /c/Users/xxxxxx/.ssh/id_rsa_me_gitee (bestguo2020@foxmail.com)

最后在这个位置上添加一个 config 文件

config 要编写文件中的内容如下,里面的内容需要自己来修改,修改完成之后保存。

# gitee
Host gitee.me
    HostName gitee.com
    User bestguo2020
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_me_gitee

解释:

  • 第一个 Host 是起别名的作用,比如你起 miaomiao,giaogiao 都行
  • HostName 指的就是需要填写主机名,在 gitee 中就是 gitee.com,在 github 中就是 github.com,如果是自己或者公司搭建的 git 服务器,就使用主机的主机名或者 ip 地址。
  • User 一般是指登录的用户名,就是创建 gitee 或者 github 账号时那个用户名就是你需要填的
  • PreferredAuthentications 就用默认的 publickey 值就行
  • IdentityFile 就是生成的私钥文件,也就是上图中没有带 .pub

由于今天弄的是 gitee 的 SSH key,所以就在 gitee 中添加 SSH key。先登录到 gitee,点击设置,找到 SSH 公钥

然后用编辑器或者记事本打开 id_rsa_me_gitee.pub 文件,将其复制到此处,点击确定。输入密码验证即可

最后执行一下 ssh -T 命令,前面填写的是你注册用户名,回车。如果看到以下类似界面就说明配置成功了

$ ssh -T bestguo2020@gitee.com
Hi bestguo2020! You've successfully authenticated, but GITEE.COM does not provide shell access.

关键一步

如果我们关闭了 shell 之后,发现下面的问题。

$ ssh-agent bash

$ ssh-add -l
The agent has no identities.

没错,就是我们添加的私钥记录没有存下来,需要自己来保存,这该怎么办呢?

有办法,在 git 的安装目录中。找到 etc 下的 bash.bashrc 文件,使用记事本或者其它文本编辑器打开。

在文件末尾添加以下内容(其中里面的 ssh-add 添加的私钥是前面自己的生成的),这样的目的就是每次启动 shell 的时候会自动执行这些命令

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_me_gitee

最后测试一下,已经自动添加进来并将私钥成功导入

E:\IdeaProjects\ssm_online_exam>sh
Agent pid 1472
Identity added: /c/Users/xxxxxx/.ssh/id_rsa_me_gitee (bestguo2020@foxmail.com)

$ ssh -T bestguo2020@gitee.com
Hi bestguo2020! You've successfully authenticated, but GITEE.COM does not provide shell access.

项目配置

在使用 git clone 下来的项目时,最先要做好的是配置用户名和邮箱。

git config user.name bestguo2020
git config user.email bestguo2020@foxmail.com

然后进入克隆下来的 .git 文件夹中,由于是在 gitee 下,若要使用 ssh 进行远程提交的话,需要修改远程仓库的地址

打开之后,修改成以下格式,然后保存。

配置完成之后,就可以执行相关的 git 操作了。

结果

我们测试一下命令,看看是否能够成功。只要没有提示 Permission 说明已经成功了

$ git pull
Already up to date.

在学习管理多个 SSH key 时,参考了以下资料