# 1. 简介 ssh-keygen 是一个认证密钥的生成、管理和转换的工具。采用密钥对的形式,生成一个私钥和一个公钥。 可以用来做用于远程服务器的链接、Github 的 SSH 链接等。 # 2. 命令格式 ```bash ssh-keygen -t ed25519 -C "comment" -f file_name -N '' -q ``` **选项** - `-t` 选项(默认 `rsa`) 生成的密钥类型(不带默认为 `rsa`),类型有六种分别是 `dsa` | `ecdsa` | `ecdsa-sk` | `ed25519` | `ed25519-sk` | `rsa` ```bash ssh-keygen -t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa ``` 详细比较如下: | 密钥类型 | 安全性 | 性能 | 兼容性 | 建议使用场景 | | -------------- | -------------------------------------------------------------------- | ---------------------------- | ---------------------------------------- | -------------------------------- | | **DSA** | 不安全,固定 1024 位密钥长度,不符合现代需求 | 签名快,验证慢 | 旧版本 SSH 支持,OpenSSH 7.0 后禁用 | 不推荐使用 | | **RSA** | 安全,密钥长度建议至少 3072 位 | 签名和验证速度适中 | 广泛支持 | 需要兼容性时使用 | | **ECDSA** | 安全,基于椭圆曲线,但存在政治和技术争议 | 签名和验证速度较快 | OpenSSH 5.7 及更高版本支持 | 不推荐使用 | | **ECDSA-SK** | 高安全性,依赖硬件安全密钥 | 依赖硬件性能 | OpenSSH 8.2 及更高版本支持 | 硬件级别安全需求场景 | | **Ed25519** | 高安全性,当前推荐算法 | 签名和验证速度非常快,密钥短 | OpenSSH 6.5 及更高版本支持 | 推荐使用 | | **Ed25519-SK** | 高安全性,结合 Ed25519 算法和硬件安全密钥 | 依赖硬件性能 | OpenSSH 8.2 及更高版本支持 | 硬件级别安全需求场景 | [scode type="blue"]上述包含`SK`字样的密钥类型的私钥存储在硬件设备(如 FIDO2 安全密钥)中,硬件设备负责签名操作,主机只接收签名结果,私钥在整个过程中保持安全,从不离开设备,即使主机被攻陷,私钥仍然安全。[/scode] - `-b` 选项 表示生成的密钥的大小(以字节:byte 为单位),密钥类型为 `RSA` 时,建议指定密钥的大小为 `3072` 位或以上,`Ed25519` 可不指定 ```bash ssh-keygen -t rsa -b 3072 ``` - `-C` 选项 生成密钥的描述信息,默认为`{用户名}@{主机名}`。(会追加到`公钥.pub`内容的末尾) - `-f` 选项 文件名称,或者文件路径,默认路径为`~/.ssh/id_{密钥类型}`,可在后续`Enter file in which to save the key`时指定 - `-N` 选项 指定新密码,'' 表示密码为空,可在后续提示`Enter passphrase`时指定,默认为空 - `-q` 选项 静默模式,直接生成密钥对,不现实过程中产生的信息。 # 3. 配置 SSH 密钥登录 使用以下命令创建一个`Ed25519`的密钥对 ```bash ssh-keygen -t ed25519 ``` 设置密码后(直接回车可设置为空),会提示密钥对文件保存位置 > Generating public/private ed25519 key pair. > Enter file in which to save the key (/root/.ssh/id_ed25519): <==指定密钥对保存路径,默认为括号内内容 > Enter passphrase (empty for no passphrase): <==输入密码,如需自动登录可设置为空,直接回车就可以 > Enter same passphrase again: <==输入确认密码,和上一步相同即可 > Your identification has been saved in /root/.ssh/id_ed25519 <==生成的私钥路径 > Your public key has been saved in /root/.ssh/id_ed25519.pub <==生成的公钥路径 以上面为例,生成的私钥路径为`/root/.ssh/id_ed25519`,生成的公钥路径为`/root/.ssh/id_ed25519.pub` 接下来将公钥文件放到需要免密登录用户目录的`~/.ssh/authorized_keys`内即可 ```bash cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys ``` 最后将`~/.ssh/id_ed25519`下载并导入本地 SSH 工具内即可实现密钥登录,部分工具还需要将私钥文件设置为 `600` 才可以使用 ```bash chmod 600 id_ed25519 ```bash Loading... # 1. 简介 ssh-keygen 是一个认证密钥的生成、管理和转换的工具。采用密钥对的形式,生成一个私钥和一个公钥。 可以用来做用于远程服务器的链接、Github 的 SSH 链接等。 # 2. 命令格式 ```bash ssh-keygen -t ed25519 -C "comment" -f file_name -N '' -q ``` **选项** - `-t` 选项(默认 `rsa`) 生成的密钥类型(不带默认为 `rsa`),类型有六种分别是 `dsa` | `ecdsa` | `ecdsa-sk` | `ed25519` | `ed25519-sk` | `rsa` ```bash ssh-keygen -t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa ``` 详细比较如下: | 密钥类型 | 安全性 | 性能 | 兼容性 | 建议使用场景 | | -------------- | -------------------------------------------------------------------- | ---------------------------- | ---------------------------------------- | -------------------------------- | | **DSA** | 不安全,固定 1024 位密钥长度,不符合现代需求 | 签名快,验证慢 | 旧版本 SSH 支持,OpenSSH 7.0 后禁用 | 不推荐使用 | | **RSA** | 安全,密钥长度建议至少 3072 位 | 签名和验证速度适中 | 广泛支持 | 需要兼容性时使用 | | **ECDSA** | 安全,基于椭圆曲线,但存在政治和技术争议 | 签名和验证速度较快 | OpenSSH 5.7 及更高版本支持 | 不推荐使用 | | **ECDSA-SK** | 高安全性,依赖硬件安全密钥 | 依赖硬件性能 | OpenSSH 8.2 及更高版本支持 | 硬件级别安全需求场景 | | **Ed25519** | 高安全性,当前推荐算法 | 签名和验证速度非常快,密钥短 | OpenSSH 6.5 及更高版本支持 | 推荐使用 | | **Ed25519-SK** | 高安全性,结合 Ed25519 算法和硬件安全密钥 | 依赖硬件性能 | OpenSSH 8.2 及更高版本支持 | 硬件级别安全需求场景 | <div class="tip inlineBlock info"> 上述包含`SK`字样的密钥类型的私钥存储在硬件设备(如 FIDO2 安全密钥)中,硬件设备负责签名操作,主机只接收签名结果,私钥在整个过程中保持安全,从不离开设备,即使主机被攻陷,私钥仍然安全。 </div> - `-b` 选项 表示生成的密钥的大小(以字节:byte 为单位),密钥类型为 `RSA` 时,建议指定密钥的大小为 `3072` 位或以上,`Ed25519` 可不指定 ```bash ssh-keygen -t rsa -b 3072 ``` - `-C` 选项 生成密钥的描述信息,默认为`{用户名}@{主机名}`。(会追加到`公钥.pub`内容的末尾) - `-f` 选项 文件名称,或者文件路径,默认路径为`~/.ssh/id_{密钥类型}`,可在后续`Enter file in which to save the key`时指定 - `-N` 选项 指定新密码,'' 表示密码为空,可在后续提示`Enter passphrase`时指定,默认为空 - `-q` 选项 静默模式,直接生成密钥对,不现实过程中产生的信息。 # 3. 配置 SSH 密钥登录 使用以下命令创建一个`Ed25519`的密钥对 ```bash ssh-keygen -t ed25519 ``` 设置密码后(直接回车可设置为空),会提示密钥对文件保存位置 > Generating public/private ed25519 key pair. > Enter file in which to save the key (/root/.ssh/id_ed25519): <==指定密钥对保存路径,默认为括号内内容 > Enter passphrase (empty for no passphrase): <==输入密码,如需自动登录可设置为空,直接回车就可以 > Enter same passphrase again: <==输入确认密码,和上一步相同即可 > Your identification has been saved in /root/.ssh/id_ed25519 <==生成的私钥路径 > Your public key has been saved in /root/.ssh/id_ed25519.pub <==生成的公钥路径 以上面为例,生成的私钥路径为`/root/.ssh/id_ed25519`,生成的公钥路径为`/root/.ssh/id_ed25519.pub` 接下来将公钥文件放到需要免密登录用户目录的`~/.ssh/authorized_keys`内即可 ```bash cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys ``` 最后将`~/.ssh/id_ed25519`下载并导入本地 SSH 工具内即可实现密钥登录,部分工具还需要将私钥文件设置为 `600` 才可以使用 ```bash chmod 600 id_ed25519 ```bash Last modification:January 3, 2025 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏