密钥生成器是为 SSH 创建永久性密钥(用户密钥和主机密钥)的应用程序。

  SSH1 、 SSH2 、 OpenSSH 都是使用 ssh-keygen 来做密钥生成器。

  ssh-keygen 命令用于为 ssh 生成、管理和转换认证密钥,它支持 RSA 和 DSA 两种认证密钥。(较新的 OpenSSH 版本中,可以使用 ECDSA 密钥,这种数字签名算法生成的密钥更小,安全性更高)

  ssh-keygen 部分常用参数

  • -t:指定生成密钥的类型,默认使用 SSH2 的 RSA
  • -f:指定生成密钥的文件路径,默认为 id_密钥类型(如:私钥 id_rsa ,公钥 id_rsa.pub)
  • -P:提供旧密语,空表示不需要密语
  • -N:提供新密语,空表示不需要密语
  • -b:指定密钥长度(bits),RSA最小要求768位,默认是2048位; DSA 密语必须是1024位
  • -C:提供一个新注释
  • -R:提供一个 hostname ,删除 known_hosts 文件中 hostname 的密钥

1. 生成密钥对

  使用 ssh-keygen 生成一对长度为 2048 bit 的 RSA 加密的密钥对,指定生成路径为 ~/.ssh/id_rsa 。

  $ ssh-keygen -t RSA -b 2048 -f ~/.ssh/id_rsa
  Generating public/private id_rsa key pair.
  Enter file in which to save the key (/home/username/.ssh/id_rsa):
  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:
  Your identification has been saved in /home/username/.ssh/id_rsa.
  Your public key has been saved in /home/username/.ssh/id_rsa.pub.
  The key's randomart image is:
  +--[RSA  2048]---+
  |     ..oB=.   .  |
  |    .    . . . . |
  |  .  .      . +  |
  | oo.o    . . =   |
  |o+.+.   S . . .  |
  |=.   . E         |
  | o    .          |
  |  .              |
  |                 |
  +-----------------+

2. 保护密钥对

  生成密钥对时 ssh-keygen 要求提供一个密码短语(passphrase)。密码短语(passphrase)和密码/口令不同。

  • 密语(passphrase)是生成密钥对时使用的。它从不离开主机,主要用来加解密密钥对,保护你的私钥安全。
  • 密码/口令(password)是登录服务器时使用的。它会在登录时,在网络中传输到服务器。

  生成密钥对时, ssh-keygen 请求输入密语,您应该输入一些复杂却毫无规律的短语,以防私钥泄露后被破解。

  当然回车跳过,也能够生成所需的密钥对。但是在没有输入密码短语的情况下,私钥未经加密就存储在硬盘上,任何人拿到私钥都可以随意的访问对应的 SSH 服务器。还有一种情况,如果您不是 root 用户,则该机器上的 root 用户可以完全拥有您的密钥对,因为他的权限是最大的。

  如果密钥对已经生成,也可以使用 ssh-keygen -N 和 -P 参数指定新的密语。

3. 管理密钥对

  我的另一篇文章中会介绍,如何管理密钥对?SSH-代理ssh-agent