一、创建SSH  

1. 查看是否之前有过ssh,在终端输入。

cd ~/.ssh

        如果显示No such file or directory ,表示之前没有创建过ssh,直接进入下一步;如果可以直接进入需要先清理rss,终端执行命令:

mkdir key_backup $ cp id_rsa* key_backup $ rm id_rsa*

2. 输入自己的github邮箱账号创建

        在终端输入(邮箱账号替换为自己的Github登录邮箱)

ssh-keygen -t rsa -C "XXXXXXXX@163.com"

        可以一路回车,在默认地址创建

二、在github上进行连接

1. 打开github,点击settings,然后点击SSH and GPG keys

2. 点击New SSH key

3. 在终端中输入如下指令进入.ssh文件夹

cd ~/.ssh/

然后输入如下指令查看所有的文件

ls

然后输入如下指令打开rsa.pub

cat id_rsa.pub

然后将显示出来的内容都黏贴到github中的key部分

4. 输入如下命令判断是否成功

ssh -T git@github.com

        出现这个就算成功"You`ve successfully authenticated"

        用 SSH 方式推送 HTTP 形式的 github 链接可能会报错,尝试编辑 ~/.ssh/config 文件(没有就新增),windows/mac 在用户目录下的.ssh目录,添加如下内容:

Host github.com
    HostName ssh.github.com
    User git
    Port 443

5. 利用git config 里设置github 登录名以及登陆邮箱,执行以下两个命令:

git config --global user.name "your name" 
 
git config --global user.email "your_email@youremail.com"

6. 执行如下指令上传你的本地文件夹

cd /Users/Tush/Documents/test
git init
git add .
git commit -m 'first commit'
git remote add origin https://github.com/XXX/XXX.git
git push -u origin master

上一步最后一个指令也要注意是 "git push -u origin master" 还是 "git push -u origin main"。

三、多个 SSH keys 的配置,方便 Git 对不同仓库的使用与管理

        在搬砖的过程中,或多或少都会与不同的代码托管平台打交道。比如我就喜欢用 gitee(码云) 作为 md 笔记中的图床,github 作为个人项目的代码管理仓库。而公司又会使用其它的托管平台来管理,比如阿里云等。

单个 SSH keys 在使用并生效后,再配置其它平台就会造成失效等各种问题。看了各个仓库的 SSH keys 生成教程,基本只有单个 SSH keys 的生成。在我们想要对多个代码托管平台上的项目同时操作的时候,帮助不大。

        在配置多个 SSH keys 的过程中,我把配置的过程与碰见的一些问题,记录在该文章内,希望能给各位提供些许帮助。

1. 生成各平台指定的 SSH-Keys

打开 git Bash Here,输入命令,修改邮箱后一路回车。如需要设置密码的话可以额外自行配置。

-t : “是指定秘钥的类型”

-C :“是指定用于识别密钥的注释,即可以填写任意值,一般都填邮箱”

// 先生成一个默认的 id_rsa,不生成可能会导致别名的配置 keys 不生效

$ ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa

// 再依次指定别名,生成其他给平台用的 ssh_key 文件

$ ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/github_rsa
$ ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/gitee_rsa
$ ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/aliyun_rsa

        此时,系统盘用户名下的用户 .ssh 目录下应该有 8 个文件:id_rsa 和 id_rsa.pub,github_rsa 和 github_rsa.pub,gitee_rsa 和 gitee_rsa.pub,aliyun_rsa 和 aliyun_rsa.pub。

可能会出现的错误:

  1. 生成的公钥文件(.pub)未在 .ssh 文件夹内,或者生成文件的位置不对,请检查控制台当下的路径与生成的路径。

  2. 有些控制台可能识别不了 “ ~ ” , 修改添加的路径直接用 “ ./ ” 操作

2. 配置公钥

将它们的公钥文件(.pub)内部的所有内容复制黏贴到对应的代码托管仓库上。

以 github 为例,如图所示:

将对应平台的公钥添加至 Key 框内。Title 可随意填,具有标识性即可。

最后点击 Add SSH key 保存即可。 

3. 配置私钥

// 先执行命令:

ssh-agent bash

// 再添加私钥

$ ssh-add ~/.ssh/github_rsa 
$ ssh-add ~/.ssh/gitee_rsa
$ ssh-add ~/.ssh/aliyun_rsa

// 添加成功如下图所示。

ssh-add 一些命令参数如下:

-D:删除 ssh-agent 中的所有密钥.
-d:从 ssh-agent 中的删除密钥
-L:显示 ssh-agent 中的公钥
-l:显示 ssh-agent 中的私钥

 添加私钥,并通过命令 ssh-add -l 来查看当前配置成功的私钥列表,如图中所示:

ssh-add -l

可能会出现的错误:

  1. ssh-agent bash 提示错误信息:unable to start ssh-agent service, error :1058

解决:管理员权限打开 Power Shell,执行:

Set-Service -Name ssh-agent -StartupType automatic
  1. 添加私钥提示错误信息:No such file or directory

解决:检查当前控制台路径与添加的路径是否匹配,调整路径即可,如上图所示。

4. 新增 config 配置文件

        若系统盘用户名下的 .ssh 目录下无 config 文件,那么新建一个 config 文件。该文件没有文件后缀名,类型显示为文件,双击后可用记事本等打开进行编辑。

        我的配置文件如下,可参考配置文件参数说明:

# 配置文件参数
# Host : 配置对应的的主机名和 ssh 文件(可以直接填写 ip 地址)
# HostName : 要登录主机的主机名(建议与 Host 一致)
# PreferredAuthentications :配置登录的验证方式(含密码可自行查询配置方式)
# IdentityFile : 指明上面 User 对应的配置路径
# User : 登录名(如 github 的 username)
# Port: 端口号(默认 22)

# github.com
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile C:/Users/tag_a12/.ssh/github_rsa
User your_email@example.com

# aliyun.com
Host code.aliyun.com
HostName code.aliyun.com
PreferredAuthentications publickey
IdentityFile C:/Users/tag_a12/.ssh/aliyun_rsa
User your_email@example.com

5. 测试 SSH 链接

// 命令语句

$ ssh -T git@[Host 配置名]

// 使用如下:

$ ssh -T git@github.com
$ ssh -T git@code.aliyun.com

成功提示:

        Welcome to GIT,your name!

        也可以直接进行项目的克隆或提交进行测试。我的建议是,在配置完成后,对各个平台都进行一次链接测试。

可能会出现的错误:

  1. 提交代码时,提示 Host key verification failed。

原因:若你的项目先克隆到了本地,再修改 SSH keys 后,在提交的时候由于公钥不一样了,所以无法登录。

解决:只需要进行一次链接测试便可解决。

        以上就是多个 SSH-Keys 的配置过程,如果在配置过程中还发现有其它问题或者还有看不懂的地方,欢迎留言讨论。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐