blog/docs/tech/Creating-and-Managing-SSH-Keys-for-Authentication-on-Linux-Servers.md
2024-07-26 02:07:14 +08:00

97 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 创建和管理 Linux 服务器用于身份验证的 SSH 密钥
## 使用 ssh-keygen 生成密钥
以下 `ssh-keygen` 命令默认在 `~/.ssh` 目录中生成 4096 位 SSH RSA 公钥和私钥文件。如果当前位置存在 SSH 密钥对,这些文件将被覆盖。
``` bash
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` 来缓存私钥文件密码。
如果使用 MacmacOS Keychain 在用户调用 `ssh-agent` 时会安全存储私钥密码。
验证并使用 `ssh-agent` 和 `ssh-add` 将密钥文件的情况通知给 SSH 系统,这样就无需交互使用密码。
``` bash
eval "$(ssh-agent -s)"
```
现在,使用命令 `ssh-add` 将私钥添加到 `ssh-agent`。
``` bash
ssh-add ~/.ssh/id_rsa
```
私钥密码现在存储在 `ssh-agent` 中。
## 使用 ssh-copy-id 将密钥复制到现有服务器
如果已有服务器,可以使用 `ssh-copy-id` 将新的 SSH 公钥添加到 Linux 服务器。
``` bash
ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@<ip>
```
## 创建并配置 SSH 配置文件
可创建并配置 SSH 配置文件 (`~/.ssh/config`),以便加速登录和优化 SSH 客户端行为。
以下示例显示一个简单配置,通过此配置,你可以使用默认的 SSH 私钥以用户身份快速登录到特定 VM。
创建文件:
``` bash
touch ~/.ssh/config
```
编辑文件以添加新的 SSH 配置:
``` bash
nano ~/.ssh/config
```
添加适用于主机 VM 的配置设置。 在此示例中VM 名称(主机)为 myvm帐户名称用户为 ubuntuIP 地址或 FQDN主机名为 192.168.0.255。
``` linuxconfig
Host myvm
HostName 192.168.0.255
Port 22
User ubuntu
IdentityFile ~/.ssh/<file name> # (1)
```
1. 此处填写密钥文件的绝对路径
可为其他主机添加配置,让每台主机使用其自己的专用密钥对。 查看 SSH 配置文件获取更多高级配置选项。
获得 SSH 密钥对和配置的 SSH 配置文件后,便可快速安全地远程访问 Linux VM。 运行以下命令时SSH 从 SSH 配置文件的 Host `myvm` 块中找到所有设置并加载它们。
``` bash
ssh myvm
```
首次使用 SSH 密钥登录到服务器时,命令会提示用户输入该密钥文件的密码。