使用 ssh-keygen 命令生成公/私认证密钥对。
身份验证密钥允许用户在不提供密码的情况下连接到远程系统。
必须分别为每个用户生成密钥。
如果以 root 用户身份生成密钥对,则只有 root 用户可以使用这些密钥。
以下示例创建 RSA 密钥的公共部分和私有部分:
# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:z6zTVQ/PJYt2o96DrVYClmfcqBG8Pdb8nzqY2m2HjeY root@onitroad The key's randomart image is: +---[RSA 2048]----+ | . | | o | | * = | | * O B .| | S. B + O.| | +. = = =| | .+ooB+.o| | ..oo=Bo+.| | .o.+*E=. | +----[SHA256]-----+
使用 -t 选项指定要创建的密钥类型。
协议版本 1 的可能值为“rsa1”,协议版本 2 的可能值为“dsa”、“ecdsa”或者“rsa”。
我们可以选择指定密码来加密密钥的私有部分。
如果我们加密个人密钥,则每次使用该密钥时都必须提供密码短语。
这可以防止攻击者能够访问私钥并可以冒充我们并访问我们有权访问的所有计算机。
攻击者仍然需要提供密码。
示例中的 ssh-key 命令在 ~/.ssh 目录中生成了两个密钥:
$ ls ~/.ssh id_rsa id_rsa.pub
要在不提供密码的情况下登录远程系统或者将文件复制到远程系统,请将公钥(在此示例中为 ~/.ssh/id_rsa.pub)复制到远程系统上的 ~/.ssh/authorized_keys。
将远程 ~/.ssh 目录权限设置为 700 。
然后,我们可以使用 ssh 或者 scp 工具访问远程系统,而无需提供密码。
要允许多个连接,请将公钥添加到远程系统上的 authorized_keys 文件,而不是复制它。
以下示例添加了公钥:
$ cat id_rsa.pub >> authorized_keys
我们可以通过禁用标准密码身份验证并强制执行基于密钥的身份验证来进一步提高系统安全性。
为此,请在 /etc/ssh/sshd_config 配置文件中将 PasswordAuthentication 选项设置为 no,如下所示:
# vi /etc/ssh/sshd_config PasswordAuthentication no
这将禁止其密钥不在服务器上特定用户的 authorized_keys 文件中的用户通过 ssh 进行连接。
连接被拒绝并显示以下消息:
$ ssh host01 Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
将 PasswordAuthentication 选项设置为 yes,这是默认设置,允许用户使用密码进行身份验证。