SSH-Key 与多组公钥/私钥的配置



再也不用输入 SSH 密码了

SSH-Key 本质上是公钥与私钥,经常在 Git 服务器上应用,主流 Git 托管平台 Github 和 Coding 等也都支持 SSH-Key。

公钥与私钥

公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥)。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

想实现本地免密码登录服务器,应在本地生成公钥私钥,公钥配置到服务器即可。

生成

输入

ssh-keygen -t rsa -b 4096 -C "YOUR_STAMP"

YOUR_STAMP 为任意标记,通常为 Email,下文以 one@joehill.me 为例。

# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.
Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter] // 推荐使用默认地址,如果使用非默认地址可能需要配置 .ssh/config

成功之后

Your identification has been saved in /Users/you/.ssh/id_rsa.
# Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db one@joehill.me

~/.ssh/ 下打开 id_rsa.pub 文件,内容填入 Git 托管平台对应页面即可。以 Github 为例,如果配置成功,如下显示

ssh -T git@github.com
Welcome to GitHub, you name!

多组公钥私钥

公钥私钥不仅应用在 Git 托管平台上,如果只有一组私钥密钥一旦被捕获,所有的远程服务器都会面临安全问题。多个平台或者服务器对应多组私钥。

默认生成的密钥名称为 id_rsa,下面以生成 github_rsacoding_rsa 两组密钥为例。

ssh-keygen -t rsa -b 4096 ~/.ssh/github_rsa -C "Joe-G@github.com"
ssh-keygen -t rsa -b 4096 ~/.ssh/coding_rsa -C "Joe_Hill@coding.net"

当有多个密钥需要管理时候,访问不同的服务器使用不同的密钥,需要配置 ~/.ssh/config

Host github.com
IdentityFile ~/.ssh/github_rsa
User git
Host git.coding.net
IdentityFile ~/.ssh/coding_rsa
User git

配置后访问 Github 会验证 github_rsa 的私钥,访问 Coding 会验证 coding_rsa 的私钥。