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

2020-09-23 22:38:58 浏览数 (1)

前言

很多开发者才刚接触 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 用户邮箱创建设置SSH key 用户邮箱

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

设置SSH key文件名设置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创建成功提示SSH key创建成功提示

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

创建ssh key的四个步骤创建ssh key的四个步骤

终端切换到 bash

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

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

Mac OS X 切换到 bash 环境Mac OS X 切换到 bash 环境

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

在指定文件夹中打开 Git Bash在指定文件夹中打开 Git Bash

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

bash 进入 ~/.ssh目录bash 进入 ~/.ssh目录

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

切换到 bash 环境切换到 bash 环境

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

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

SSH key本地注册成功SSH key本地注册成功

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

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

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

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

Github 登录页面Github 登录页面

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

Github 设置Github 设置

创建 SSH keys

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

SSH keys列表SSH keys列表

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

Github 添加SSH key 页面Github 添加SSH key 页面

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

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

pub文件内容pub文件内容

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

粘贴.pub文件内容并新建粘贴.pub文件内容并新建

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

查看刚刚新建的SSH key查看刚刚新建的SSH key

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

验证代码平台连通性

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

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

验证本地与 Github 的连通性验证本地与 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个类似的代码托管平台,仍然可以保证本机与各平台之间的连通性。

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

代码语言:javascript复制
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 文件known_hosts 文件

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

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

总结

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

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

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

0 人点赞