【技术创作101训练营】Git 如何成功配置SSH key连接多个代码平台?

时间:2022-07-25
本文章向大家介绍【技术创作101训练营】Git 如何成功配置SSH key连接多个代码平台?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言

很多开发者才刚接触 Git 的时候,看到各种命令和报错信息,经常一头雾水。即便是反复搜索和看文档,也很难快速定位分析问题并解决。

不同平台不同环境下,即便是同样的报错信息,解决办法也不尽相同,这给广大 Git 初学者带来了极大的困扰。

因此,我挑选出大家最常遇到的问题,给出了通用性的解决方案,以及常见报错信息的排查方式。

本文教程是在 Windows 平台下操作的,Mac OS X 和 Linux 平台操作大体相同。

前面的内容比较基础,有经验的开发者可选择性跳过,直接定位到【多平台的SSH配置】阅读。

如有需要补充或不准确的地方,欢迎大家在评论区指正。

准备工作

首先你要在本地安装 Git,最新版本可以在官网获取:

https://git-scm.com/

下载前需要根据电脑系统版本,选择合适平台的 Git 版本。

我目前用的是 Windows 10 ,点击右侧按钮,下载 Windows 版本安装即可。

如果你的系统是 Mac OS X ,下载页面是这样的:

除了首页的推荐下载,也可以自行选择下载的版本,以及安装方式。

下载地址:https://git-scm.com/downloads

安装完成后,打开系统命令行工具(以 cmd 为例),输入 git --version 并回车,可以查看到当前 git 版本。

看到版本信息后,说明Git已经顺利安装,可以正常使用,接下来我们可以进行后续的操作了。

单平台的SSH配置

进入本地.ssh目录

打开命令行工具,输入命令:cd C:Users<你的用户名>.ssh

进入SSH key文件存放目录。

这一步很关键,一定要先进入目录。

如果你是在其他路径下生成的,后续是无法注册成功的。

本地 Git 命令创建生成 SSH key

打开终端命令行工具,输入以下命令:

ssh-keygen -t rsa -C "youmaIl@mail.com"

其中"youmaIl@mail.com"部分,需要替换成自己的邮箱,回车后就能成功创建一个key。

创建设置SSH key 用户邮箱

接着是给key单独设置一个文件名,默认是 id_rsa,会保存在系统用户目录下的.ssh文件夹中。

设置SSH key文件名

如果直接回车,那么就会生成两个文件,分别是 id_rsa(私钥) 和 id_rsa.pub(公钥)。

这里我建议为Github平台设置单独的名称,如 id_rsa_github ,这样可以将SSH key跟平台一一对应,便于日后多平台 SSH key 的管理。

> 注意:ssh key的文件名只能是id_rsa_xxx的方式命名,否则在后续的连接过程中,代码平台会因为不识别,从而导致终端出现报错信息。

我这里起的名字是 id_rsa_github666 。

键入回车后出现这个提示,可以设置为空,直接回车就好

自定义SSH key 文件名称

这个步骤类似与网站注册时的设置密码和重复密码十分相似,设置两次密码,防止出错,这样就很好理解了。

重复输入密码

再次提示依旧是回车,选择为空。接下来就可以看到设置成功的提示

SSH key创建成功提示

完整的四个步骤是这样的,如下图所示:

创建ssh key的四个步骤

终端切换到 bash

接下来需要用到ssh相关的命令,由于系统自带的命令行是不支持的,因此我们需要切换到bash。

如果是mac用户,可以直接使用ssh-agent bash切换到bash环境。

Mac OS X 切换到 bash 环境

而Windows用户相对麻烦一些,需要在.ssh文件夹中的空白处右键,呼出右键菜单。

在指定文件夹中打开 Git Bash

紧接着点选【Git Bash Here】,启动 bash 命令行,可以看到已经在.ssh目录下了。

bash 进入 ~/.ssh目录

键入命令 ssh-agent 回车,发现没有提示,此时说明命令是生效了。

切换到 bash 环境

然后键入命令 ssh-add id_rsa_github666 (id_rsa_github666 是 SSH key文件名)

出现提示后,说明 SSH key 本地添加注册成功。

SSH key本地注册成功

连接到代码平台(以 Github 为例)

以 Github 为例,按照以下几个简单步骤,就可以轻松搞定本地Git与Github的连接。

浏览器访问Github官方网站:https://github.com/

输入账号密码登录。(没有的话需要提前注册一个)

Github 登录页面

登录成功后,点击右上角个人头像,点击 Settings ,进入设置页面。

Github 设置

创建 SSH keys

进入设置页面后,左侧栏选择【SSH and GPG keys】,进入SSH keys页面,可以看到历史创建过的SSH keys信息。

SSH keys列表

这里为了演示方便,我们点击右上角的【New SSH key】,进入创建页面。

Github 添加SSH key 页面

进入这个页面后,看到有 Title 和 Key 两个字段需要填写。

回到 .ssh 目录,用文本编辑器(如Visual Studio Code)的方式打开。

pub文件内容

全选内容后复制,粘贴到 Key 的文本框中,直接点击SSh Key即可。

粘贴.pub文件内容并新建

直接点击生成,结果就是把Title名称默认设置成了你的邮箱地址。

查看刚刚新建的SSH key

如果你想自定义设置 Title 名称做区分,也是可以的。

验证代码平台连通性

在 bash 环境下,键入 ssh -T git@github.com

回车后,可以看到连通成功的欢迎提示:

验证本地与 Github 的连通性

到这里,本地 Git 与 Github 代码平台就已经打通了,可以进行正常的代码推送、拉取等操作了。

多平台的SSH配置

对初学者来说,通常一个 Github 平台就足够了,但实际工作中,往往会面临多平台的问题。

比如公司内部有自己服务器搭建的Gitlab,微信开发者工具也有自家的微信开发者代码管理平台(https://git.weixin.qq.com/users/authorize#wechat_redirect)。

每个平台都需要连接,而平台对应的 SSH key又是唯一的。

在这样的情况下,就不可避免的需要多个 SSH key,用来连接不同的平台。

如果按照默认文件名的方式,直接回车创建,那么其他平台还是需要单独的去新建命名SSH key文件的。

因此只要按照上面【单平台的SSH配置】操作,一步步走下来,每个SSH key都是独一无二互不干扰的。

这样即便是有10个、100个类似的代码托管平台,仍然可以保证本机与各平台之间的连通性。

这里我给出完整的命令操作,以后可以直接存入笔记本,需要时随时调出来查阅使用:

cd C:Users<你的用户名>.ssh  # 进入指定路径
ssh-keygen -t rsa -C "cooperx@foxmail.com" # 注册用户名邮箱
# 自定义设置用户名
# 两次回车确认密码
------------------------------------------------------------------------------------------
# 切换终端到bash环境(Windows下在.ssh目录右键打开git bash进入)
ssh-agent bash # 没有提示代表切换成功,这一步不可或缺
ssh-agent id_rsa_xxx # 添加注册ssh,提示 Indentity 为成功
-----------------------------------------------------------------------------------------
ssh -T git@xxxxxx.com # 测试代码平台连通性,注意T是大写

常见问题

为什么提示ssh key生成成功,但无法通过ssh-add添加注册?

这是由于之前ssh key生成的密钥文件不在 .ssh 目录下,命令行先进入到目录后,再重新操作一遍就好了。

出现信息 hosts "xxx" can't be established 是什么意思?

这个不是报错,而是第一次连接会出现的正常提示,一般回车就可以解决。

如果还是解决不了,那么可以在本地hosts文件中,加入一行ip地址和域名的映射关系。

例如:13.250.177.223 github.com

ip 地址可以在终端通过 ping github.com 来获取。

细心的你会发现,在.ssh文件夹下,会生成一个 know_hosts文件夹,在这里存放了代码托管平台的 host 信息。

known_hosts 文件

为什么输入ssh-agent bash命令,会出现unable to start ssh-agent报错?

这是终端环境问题,切换到 bash 环境下再输入就正常了。

总结

作为一名前端开发工程师,Git 在日常工作中必不可少。如果涉及到多端多平台的开发,或者是在公司代码仓库和个人代码仓库之间频繁切换,那么多平台的SSH key配置是必要的。本文虽然看起来操作略微复杂,但实际上手起来十分轻松,严格按照步骤走,关注几个细节点,操作下来也能得心应手,再也不用为多个代码平台连接而烦恼了。

如果你喜欢本文,可以在文章下方互动评论,你的支持是我创作的最大动力。

(本文是【技术创作101训练营】参赛作品,创作内容版权归作者所有,转载请注明出处。)