配置 SSH Key

317 阅读1分钟

SSH(Secure Shell) 是一个提供数据通信安全、远程登录、远程指令执行等功能的网络安全协议

使用 SSH 协议可以连接远程服务器并向它们验证,利用 SSH 密钥可以连接 GitHub,而不需要每次都登录。

Linux 的所有发行版几乎都自带 OpenSSH

~ ssh -V
OpenSSH_8.1p1, LibreSSL 2.7.3

配置 SSH key

SSH 协议的原理,就是在托管网站上使用公钥,在本地使用私钥,这样本地仓库就可以和远程仓库进行通信( 有 pub 后缀的是公钥,另一个则是私钥)。

# 1. 查看秘钥目录(.ssh 目录是默认隐藏的,显示快捷键 command + shift + .)
$ cd ~/.ssh
​
# 2.客户端通过ssh-keygen生成自己的公钥和私钥(ssh-keygen是OpenSSH提供的一个命令行工具)
$ ssh-keygen -o -t rsa -b 4096 -C "your_email@example.com"# 此时会创建以邮件地址为标签的新 SSH 密钥(一般创建时一路回车即可)
# 查看文件列表,是否已经有 SSH key
$ ls -al 
# 默认情况下,公钥的文件名是以下之一:
id_rsa.pub
id_ecdsa.pub
id_ed25519.pub
​
# 3. 查看指定公钥,并手动复制
$ cat id_rsa.pub
​
# 4. 然后将公钥放入远程服务器的指定位置
# 如 GitHub 帐户:登录 github --> Setting --> SSH keys --> New SSH key --> 把复制的公钥拷贝至 key 输入框# 5. 测试 ssh 连接
$ ssh -T git@github.com
Welcome to GitLab, @you! #连接成功

SSH 密钥登录过程

前提是按照上述步骤,在客户端通过ssh-keygen生成自己的公钥和私钥,并将公钥放入远程服务器的指定位置中

  • 用户客户端向服务器发起SSH登录的请求
  • 服务器收到用户SSH登录的请求,服务器生成一些随机数据发送给客户端
  • 客户端接收到服务器发过来的数据,客户端使用私钥对数据进行签名后再返回给服务器
  • 服务器收到客户端加密后的数据,使用对应公钥进行解密。然后判断解密后的数据是否与原始数据一致,如果一致就允许用户登录。

配置多个Git账户及SSH key

利用密钥ssh可以快速登录,而不用每次都输入密码。

但有时候在一个Git终端中配置多个Git账号,同时管理多个托管网站的代码,这就情况下就需要配置多个秘钥。

在前文生成秘钥时,默认的名称是id_rsa,而密钥登录的时候也会默认读取id_rsa密钥进行验证。那么我们在使用多个密钥对的时候,就必须告诉 ssh 哪个服务器验证用哪个密钥。

  1. 生成多个秘钥

重复上述 ssh-keygen生成秘钥步骤,注意在提示“Enter file in which to save the key”时,直接输入一个自定义的秘钥名称即可,如 person_rsa

  1. 添加配置文件

由于添加了多个密钥文件,所以需要对这多个密钥进行管理。在.ssh目录下新建一个config文件

$ touch config

手动编辑 config 文件内容,参考内容如下

# 第一个秘钥配置
# 网站的别名
Host github.com
# 托管网站的域名
HostName github.com
# 指定优先使用哪种方式验证,支持密码和秘钥验证方式
PreferredAuthentications publickey 
# 托管网站上的用户名,最好写账户邮箱,否则容易设置失败
User xxx@163.com
# 使用的密钥文件
IdentityFile ~/.ssh/person_rsa
​
#第二个秘钥配置
Host github.com
HostName github.com
PreferredAuthentications publickey
User xxx@163.com
IdentityFile ~/.ssh/xxx_rsa
  1. 分别将公钥添加到各个托管网站
#测试一下
$ ssh -T git@github.com

参考:

wangdoc.com/ssh/index.h…

www.jianshu.com/p/8ede21996…