问:为什么要配置SSH?
答:因为每次同步远程代码都需要输入密码,使人低效又烦躁。
另外,Github 不配置 ssh ,会有大文件限制,如果超过一定大小,会出现错误error54,就像这样:
Git error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
所以,不要磨炼自己的耐心了,也为了方便,麻利地配起来~
命令如下所示:
ssh-keygen -t rsa -C "[email protected]" // 替换成你自己的邮箱
执行命令时会让你输入名称和密码,名称如果不输入,默认是id_isa。如果只配一个账户,默认即可,如果需要多个Git 账户都要配置ssh,最好起个名字,建议使用平台名称,方便区分。
执行成功后果~/.ssh 会生成两个文件,分别私钥(xxx.pub)和密钥。下图有两对文件,github/github.pub 是自定义名称的一对,id_rsa 和 id_rsa.pub 是一对。
这里需要说明一下,因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中,命令是:
ssh-add
下图可以明显看到 id_rsa 默认已经添加,自定义的名称需要输入密码。
这一步需要获取公钥的内容,然后粘贴到远程 Git ,例如 github 和 gitLab
获取公钥内容,命令如下所示:
cat ~/.ssh/id_rsa.pub
以 github 为例,添加 ssh 配置的入口在 Setting-SSH and GPG keys ,将上一步的内容粘贴,并自定义名称即可。按照我的经验,如果有多台电脑,名称最好标识下电脑,方便区分,例如xx_work,xxx_personal 等等
命令为:
// 如果你是链接其他的服务器地址,将后面的 github.com 替换一下
ssh -T [email protected]
问:为什么要有多账户配置?
答:因为在实际的工作学习场景中,公司的远程代码仓库大多是自己搭建的,例如我司就是gitLab,需要配置一个ssh,个人学习代码仓库在gitHub,也要配置一个SSH,所以必须要配置俩了。
配置步骤如下:
基本步骤和单账户基本一致,关键步骤在配置 SSH Config 文件,下面针对该点展开。
问:SSH config 是什么?
答:SSH config 是 Linux 系统下针对 SSH 客户端的一个参数配置方案,可以将一些关于 SSH 命令的参数放到配置文件中去,执行 SSh 命令的时候从文件中读取,简化命令行的操作。
SSH 的配置文件有两个:
我们配置的时候,只需要关注用户配置文件~/.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
配置项说明:
配置完成后,使用以下命令测试连接即可。
# 添加密钥到本地钥匙串
ssh-add
# 测试连接
ssh -T [email protected]
使用过程中,发现重启电脑后,竟然需要重新输入密码,小朋友有很多小问号,Why?
网上冲浪查询一番后,得知原因是从macOS Sierra 10.12.2以后,SSH的配置内容更新了,默认不会主动添加SSH密钥到钥匙串中,也不会主动从 ssh-agent 加载密钥, (想详细了解的,指路官方变更文档)
我看了下自己的电脑配置已经是 10.14.5 了,原来如此,这样就破案了。
官网也针对修改,提供了两个配置项AddKeysToAgent
和UseKeychain
,可以在 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密钥在重启后丢失的问题