SSH 密钥创建大法
无论是实现 SSH 免密登录,还是想要 SCP 免密发送文件,还是 Git 免密提交代码,都需要用到 SSH 密钥。本文简单介绍 SSH 密钥的生成方法。
科普几个基本概念
- 密钥
在密码学中, 密钥 1 Key 是指某个用来完成加密、解密、完整性验证等密码学应用的秘密信息。在 对称密钥算法 Symmetric-key algorithm 中,加密和解密用的是同一个钥匙,因此钥匙需要保密。而在 公开密钥密码学 Public-key cryptography 中,加密和解密用的钥匙不同,一个是公开密钥,称为 公钥 Public key ,另一个是私有密钥,称为 私钥 Private key 。
- 对称密钥算法
对称密钥算法 Symmetric-key algorithm 又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。
- 公开密钥密码学
公开密钥密码学 Public-key cryptography ,也称 非对称式密码学 Asymmetric cryptography ,是密码学的一种算法,它需要两个密钥,一个是公开密钥,称为 公钥 Public key ,另一个是私有密钥,称为 私钥 Private key 。公钥用作加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。公钥可以公开,可任意向外发布;私钥不可以公开,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。
- 公钥
公钥 Public key 和 私钥 Private key 是通过 公开密钥密码学 Public-key cryptography 的某种算法得到的、相互对应形成一对密钥对。其中可以向外界公开的,称为公钥;另个自己妥善保管,万万不可随意共享、传输给他人,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这对密钥对的时候,使用公钥来对数据进行加密,使用私钥来对数据进行解密。
- 私钥
私钥 Private key 详见上述 公钥 Public key 的描述。
- 1
「密钥」中的「钥」为多音字。其在文言文中有文白异读的现象。1985年12月,中华人民共和国国家语委、国家教委和广播电视部联合发布的《普通话异读词审音表》将其标注为 yào(语)和 yuè(文)两种读音。《现代汉语词典(第7版)》中将其注明为「【密钥】mìyuè(口语中多读 mìyào)」。
警告
同学们一定要保护好自己的密钥文件,尤其是私钥文件,不要轻易分享给他人!
当本文使用「密钥」这个词时,指的是一对公钥和私钥相互对应形成的「密钥对」,如果使用「公钥」、「私钥」这样的词,则特指「公钥」、「私钥」。
ssh-keygen 简介
ssh-keygen
命令用于生成、管理和转换 SSH 所支持的认证密钥,它支持 RSA
和 DSA
两种认证密钥。
语法格式
ssh-keygen [参数]
常用参数
参数 |
含义 |
---|---|
-b |
指定密钥长度 |
-e |
读取openssh的私钥或者公钥文件 |
-f |
指定用来保存密钥的文件名 |
-t |
指定要创建的密钥类型 |
-C |
添加注释 |
生成 SSH 密钥
打开 终端 Terminal ,首先确认当前用户的 home 目录下有没有一个叫 .ssh 的目录,
不存在的话请先创建,并赋予 700
的权限。
cd ~
mkdir -p ~/.ssh
chmod 700 ~/.ssh
直接使用 ssh-keygen
命令,不带任何参数,生成一对默认的公钥和私钥。
ssh-keygen
由于我们没有使用 -f
参数指定路径和文件名,程序会有如下提示。
Generating public/private rsa key pair.Enter file in which to save the key (/Users/tony/.ssh/id_rsa):
直接敲回车,使用默认路径和文件名。 程序又会有如下提示,询问是否为密钥文件设置密码。
Enter passphrase (empty for no passphrase):Enter same passphrase again:
我们为了免密使用密钥,对于这两条提示都直接敲空格。如果有特殊的用途需要设置密码,那么请一定要将密码妥善保管。
警告
若没有为密钥设置密码(密码为空,直接两次敲了空格),请一定要保护好自己的私钥文件,不要轻易分享给他人!
小技巧
若要为密钥设置密码,强烈建议使用密码生成器自动生成强密码,并使用密码管理工具,例如 Apple 平台的「钥匙串」。
设置密码后,程序会提示如下,表明公钥和私钥文件已经创建完成。
Your identification has been saved in /Users/tony/.ssh/id_rsa.Your public key has been saved in /Users/tony/.ssh/id_rsa.pub.The key fingerprint is:...(此处省略内容视实际情况)
id_rsa
文件即是密钥文件, id_rsa.pub
即是公钥文件。
从这个示例来看,不带任何参数的情况下, ssh-keygen
会默认生成一对 RSA
类型的公钥和私钥。
当然,你还可以使用 -t
参数手动指定生成 RSA 类型的公钥和私钥。
ssh-keygen -t rsa
其他示例
使用 -t
参数手动指定生成 RSA
类型的公钥和私钥,并使用 -C
参数添加注释,例如邮箱地址:
ssh-keygen -t rsa -C "your_email_address@example.com"
使用 -e
参数读取 openssh
的私钥或者公钥文件:
ssh-keygen -e