跳转至

创建和管理 Linux 服务器用于身份验证的 SSH 密钥

使用 ssh-keygen 生成密钥

以下 ssh-keygen 命令默认在 ~/.ssh 目录中生成 4096 位 SSH RSA 公钥和私钥文件。如果当前位置存在 SSH 密钥对,这些文件将被覆盖。

ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "ubuntur@<ip>" \
    -f ~/.ssh/myprivatekey \
    -N mypassphrase

命令解释

ssh-keygen = 用于创建密钥的程序

-m PEM = 将密钥的格式设为 PEM

-t rsa = 要创建的密钥类型,本例中为 RSA 格式

-b 4096 = 密钥的位数,本例中为 4096

-C "ubuntu@<ip>" = 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址用作注释,但也可以使用任何最适合你事物。

-f ~/.ssh/myprivatekey = 私钥文件的文件名(如果选择不使用默认名称)。该目录必须存在。

-N mypassphrase = 用于访问私钥文件的其他密码。

使用 ssh-agent 来存储私钥密码

为了避免在每次 SSH 登录时键入私钥文件密码,可以使用 ssh-agent 来缓存私钥文件密码。

如果使用 Mac,macOS Keychain 在用户调用 ssh-agent 时会安全存储私钥密码。

验证并使用 ssh-agentssh-add 将密钥文件的情况通知给 SSH 系统,这样就无需交互使用密码。

eval "$(ssh-agent -s)"

现在,使用命令 ssh-add 将私钥添加到 ssh-agent

ssh-add ~/.ssh/id_rsa

私钥密码现在存储在 ssh-agent 中。

使用 ssh-copy-id 将密钥复制到现有服务器

如果已有服务器,可以使用 ssh-copy-id 将新的 SSH 公钥添加到 Linux 服务器。

ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@<ip>

创建并配置 SSH 配置文件

可创建并配置 SSH 配置文件 (~/.ssh/config),以便加速登录和优化 SSH 客户端行为。

以下示例显示一个简单配置,通过此配置,你可以使用默认的 SSH 私钥以用户身份快速登录到特定 VM。

创建文件:

touch ~/.ssh/config

编辑文件以添加新的 SSH 配置:

nano ~/.ssh/config

添加适用于主机 VM 的配置设置。 在此示例中,VM 名称(主机)为 myvm,帐户名称(用户)为 ubuntu,IP 地址或 FQDN(主机名)为 192.168.0.255。

Host myvm
HostName 192.168.0.255
Port 22
User ubuntu
IdentityFile ~/.ssh/<file name> # 此处填写密钥文件的绝对路径

可为其他主机添加配置,让每台主机使用其自己的专用密钥对。 查看 SSH 配置文件获取更多高级配置选项。

获得 SSH 密钥对和配置的 SSH 配置文件后,便可快速安全地远程访问 Linux VM。 运行以下命令时,SSH 从 SSH 配置文件的 Host myvm 块中找到所有设置并加载它们。

ssh myvm

首次使用 SSH 密钥登录到服务器时,命令会提示用户输入该密钥文件的密码。