Git-多账户配置SSH免密登录

前言

问:为什么要配置SSH?
答:因为每次同步远程代码都需要输入密码,使人低效又烦躁。
在这里插入图片描述
另外,Github 不配置 ssh ,会有大文件限制,如果超过一定大小,会出现错误error54,就像这样:
Git error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54

所以,不要磨炼自己的耐心了,也为了方便,麻利地配起来~

单账户配置

第一步:生成ssh 密钥

命令如下所示:

ssh-keygen -t rsa -C "[email protected]"  // 替换成你自己的邮箱

执行命令时会让你输入名称和密码,名称如果不输入,默认是id_isa。如果只配一个账户,默认即可,如果需要多个Git 账户都要配置ssh,最好起个名字,建议使用平台名称,方便区分。
Git-多账户配置SSH免密登录_第1张图片
执行成功后果~/.ssh 会生成两个文件,分别私钥(xxx.pub)和密钥。下图有两对文件,github/github.pub 是自定义名称的一对,id_rsa 和 id_rsa.pub 是一对。
在这里插入图片描述
这里需要说明一下,因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中,命令是:

ssh-add  

下图可以明显看到 id_rsa 默认已经添加,自定义的名称需要输入密码。
Git-多账户配置SSH免密登录_第2张图片

第二步:远程git 配置 ssh 公钥

这一步需要获取公钥的内容,然后粘贴到远程 Git ,例如 github 和 gitLab

获取公钥内容,命令如下所示:

cat ~/.ssh/id_rsa.pub

Git-多账户配置SSH免密登录_第3张图片

以 github 为例,添加 ssh 配置的入口在 Setting-SSH and GPG keys ,将上一步的内容粘贴,并自定义名称即可。按照我的经验,如果有多台电脑,名称最好标识下电脑,方便区分,例如xx_work,xxx_personal 等等
Git-多账户配置SSH免密登录_第4张图片

第三步:测试是否配置成功

命令为:

// 如果你是链接其他的服务器地址,将后面的 github.com 替换一下
ssh -T [email protected]

在这里插入图片描述

多账户配置

问:为什么要有多账户配置?
答:因为在实际的工作学习场景中,公司的远程代码仓库大多是自己搭建的,例如我司就是gitLab,需要配置一个ssh,个人学习代码仓库在gitHub,也要配置一个SSH,所以必须要配置俩了。

配置步骤如下:

  1. 第一步:生成ssh 密钥时,多对密钥,要取不同的名字,用来区分(例如我比较喜欢用平台命名,命名为github 和 gitlab)
  2. 第二步:远程git 配置 ssh 公钥,各自配置各自平台。
  3. 第三步:配置SSH Config 文件。这个下面详细讲。
  4. 第四步:将两个密钥加入钥匙串,然后分别测试是否配置成功

基本步骤和单账户基本一致,关键步骤在配置 SSH Config 文件,下面针对该点展开。

配置 SSH config 文件

问:SSH config 是什么?
答:SSH config 是 Linux 系统下针对 SSH 客户端的一个参数配置方案,可以将一些关于 SSH 命令的参数放到配置文件中去,执行 SSh 命令的时候从文件中读取,简化命令行的操作

SSH 的配置文件有两个:

  • 用户配置文件:~/.ssh/config
  • 系统配置文件::/etc/ssh/ssh_config

我们配置的时候,只需要关注用户配置文件~/.ssh/config即可。

进入~/.ssh/目录,查看是否有 config 文件,有可直接修改,没有就手动创建。结合第一步创建的两个密钥,现在~/.ssh/ 在的文件组成为:
在这里插入图片描述
config 中的文件配置如下内容:

# github
Host github.com
	HostName github.com
	User your_login_name
	IdentityFile ~/.ssh/github

# gitlab
Host gitlab.xxx.com
	HostName gitlab.xxx.com
	User your_login_name
	IdentityFile ~/.ssh/gitlab

配置项说明:

  • Host : HostName 的关键词,用于我们执行 SSH 命令的时候如何匹配到该配置,相当于一个别名,可以自己起,一般用来简化 HostName 。这里和 HostName 一致,是因为我没这个简化需求,再加上了解不深,保持一致,避免多事。
  • HostName :真正连接的服务器地址,可以是IP,也可以是具体的域名
  • User:用户名,可以自定义,提交的时候用户名会采用该用户名
  • IdentityFile:指定本次连接使用的密钥文件

配置完成后,使用以下命令测试连接即可。

# 添加密钥到本地钥匙串
ssh-add  
# 测试连接
ssh -T [email protected]

MAC 重启后 SSH 失效问题解决

使用过程中,发现重启电脑后,竟然需要重新输入密码,小朋友有很多小问号,Why?

网上冲浪查询一番后,得知原因是从macOS Sierra 10.12.2以后,SSH的配置内容更新了,默认不会主动添加SSH密钥到钥匙串中,也不会主动从 ssh-agent 加载密钥, (想详细了解的,指路官方变更文档)

我看了下自己的电脑配置已经是 10.14.5 了,原来如此,这样就破案了。

官网也针对修改,提供了两个配置项AddKeysToAgentUseKeychain,可以在 config 文件中配置为 yes:


# github
Host github.com
	HostName github.com
	User your_login_name
	IdentityFile ~/.ssh/github
	# 加载到 ssh-agent 
    AddKeysToAgent yes
    # 添加到用户钥匙串
    UseKeychain yes

# gitlab
Host gitlab.xxx.com
	HostName gitlab.xxx.com
	User your_login_name
	IdentityFile ~/.ssh/gitlab
	# 加载到 ssh-agent 
    AddKeysToAgent yes
    # 添加到用户钥匙串
    UseKeychain yes

参考链接

Git常见错误整理
SSH Config 那些你所知道和不知道的事
Mac OS Sierra SSH密钥在重启后丢失的问题


欢迎关注个人微信公众号,最新的博客,好玩的事情,都会在上面分享,期待与你共同成长。

你可能感兴趣的:(帅气的,Git,操作)