1.2. 生成 SSH 密钥对
您可以通过在本地系统上生成 SSH 密钥对并将生成的公钥复制到 OpenSSH 服务器来在不输入密码的情况下登录到 OpenSSH 服务器。要创建密钥的每个用户都必须运行此流程。
要在重新安装系统后保留之前生成的密钥对,请在创建新密钥前备份 ~/.ssh/
目录。重新安装后,将其复制到主目录中。您可以为系统中的所有用户(包括 root
用户)进行此操作。
先决条件
- 您以希望使用密钥连接到 OpenSSH 服务器的用户身份登录。
- OpenSSH 服务器配置为允许基于密钥的身份验证。
流程
生成 ECDSA 密钥对:
$ ssh-keygen -t ecdsa Generating public/private ecdsa key pair. Enter file in which to save the key (/home/<username>/.ssh/id_ecdsa): Enter passphrase (empty for no passphrase): <password> Enter same passphrase again: <password> Your identification has been saved in /home/<username>/.ssh/id_ecdsa. Your public key has been saved in /home/<username>/.ssh/id_ecdsa.pub. The key fingerprint is: SHA256:Q/x+qms4j7PCQ0qFd09iZEFHA+SqwBKRNaU72oZfaCI <username>@<localhost.example.com> The key's randomart image is: +---[ECDSA 256]---+ |.oo..o=++ | |.. o .oo . | |. .. o. o | |....o.+... | |o.oo.o +S . | |.=.+. .o | |E.*+. . . . | |.=..+ +.. o | | . oo*+o. | +----[SHA256]-----+
您还可以通过输入
ssh-keygen -t ed25519
命令,使用ssh-keygen
-t ed25519 命令生成 RSA 密钥对,而无需任何参数或 Ed25519 密钥对。请注意,Ed25519 算法不兼容 FIPS-140,OpenSSH 在 FIPS 模式下无法使用 Ed25519 密钥。将公钥复制到远程机器上:
$ ssh-copy-id <username>@<ssh-server-example.com> /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed <username>@<ssh-server-example.com>'s password: … Number of key(s) added: 1 Now try logging into the machine, with: "ssh '<username>@<ssh-server-example.com>'" and check to make sure that only the key(s) you wanted were added.
将
<username>@<ssh-server-example.com>
替换为您的凭证。如果您没有在会话中使用
ssh-agent
程序,上一个命令会复制最新修改的~/.ssh/id*.pub
公钥。要指定另一个公钥文件,或在ssh-agent
内存中缓存的密钥优先选择文件中的密钥,使用带有-i
选项的ssh-copy-id
命令。
验证
使用密钥文件登录到 OpenSSH 服务器:
$ ssh -o PreferredAuthentications=publickey <username>@<ssh-server-example.com>
其他资源
-
ssh-keygen (1)
和ssh-copy-id (1)
man page