ssh-keygen命令介绍(密钥生成密钥、私钥生成私钥、公钥生成公钥、非对称加密、密钥指纹、密钥验证密钥、密钥测试密钥SSH生成)~/.ssh/authorized_keys、ssh-copy-id
2026/7/4 20:07:00 网站建设 项目流程

示例命令:

ssh-keygen\-ted25519\-a100\-f~/.ssh/github\-C"your@email.com"
ssh-keygen\-ted25519\-a100\-f~/.ssh/github\-C"Github username:sha******ng0907, Email: suns*****adu@gmail.com"

文章目录

  • SSH Keygen 使用指南:SSH 密钥生成与管理详解
    • 什么是 ssh-keygen?
    • SSH 密钥认证原理
  • ssh-keygen 基本语法
    • 查看已有密钥
  • 选择密钥算法
    • Ed25519(推荐)
    • RSA
    • ECDSA
    • DSA
  • 常用参数详解
    • `-t`指定算法
    • `-b`指定密钥长度
    • `-f`指定文件名
    • `-C`添加备注信息
    • `-t`设置密码保护
  • `-p`修改密钥密码
  • `cat`查看公钥内容
  • `-lf`查看密钥指纹
  • `-lvf`查看随机图案(ASCII Art)
  • 生成 GitHub 专用密钥
  • 生成服务器专用密钥
    • 步骤
      • 生成(本地操作):
      • 上传公钥:
    • 详细解释
      • 🔑 第一步:生成「服务器专用密钥」(本地操作)
      • 📤 第二步:上传公钥到服务器(两种方法选一种)
        • 方法 1:自动上传(推荐)
        • 方法 2:手动上传(适合不能用 `ssh-copy-id` 的情况)
      • 📋 第三步:复制到服务器(其实就是「确认公钥生效」)
      • 🌰 举个生活例子
      • ❓ 常见问题
      • ✅ 总结流程
  • 在`~/.ssh/config`文件中添加密钥信息
  • 测试生成的密钥(ssh -T git@github.com)
  • `-N`生成无需密码的自动化密钥
  • `-A`生成主机密钥
  • `-m`转换密钥格式
  • `rm`删除本地SSH密钥文件
  • `-R`删除本地主机指纹
  • 常见使用场景
    • GitHub
    • GitLab
    • 云服务器登录
    • 自动部署
    • 跳板机认证
    • 企业内部多个身份
  • 最佳实践建议(`-a`增加密钥派生计算次数)
  • 总结

SSH Keygen 使用指南:SSH 密钥生成与管理详解

什么是 ssh-keygen?

ssh-keygen是 OpenSSH 提供的密钥生成工具,用于创建、管理和维护 SSH 密钥对。

SSH 密钥是现代 Linux 运维、Git 仓库认证、服务器登录以及自动化部署中的基础设施之一。

与传统密码登录相比,SSH 密钥认证具有:

  • 更高的安全性
  • 无需频繁输入密码
  • 支持自动化脚本执行
  • 可与 GitHub、GitLab 等代码托管平台集成
  • 支持数字签名和身份认证

几乎所有基于 SSH 的认证体系,都离不开ssh-keygen


SSH 密钥认证原理

SSH 采用非对称加密机制。

生成密钥时会得到两个文件:

私钥(Private Key) ↓ id_ed25519 公钥(Public Key) ↓ id_ed25519.pub

其中:

  • 私钥保存在本地,绝不能泄露
  • 公钥可以安全地分发给服务器

认证过程如下:

客户端 │ ├── 持有私钥 │ └── 请求连接服务器 服务器 │ ├── 保存用户公钥 │ └── 发送随机挑战 客户端 │ └── 使用私钥签名 服务器 │ └── 使用公钥验证签名 验证成功 ↓ 允许登录

整个过程无需传输密码。

即使攻击者获取了网络流量,也无法推导出私钥。


ssh-keygen 基本语法

ssh-keygen[选项]

最常见的形式:

ssh-keygen-ted25519

执行后:

Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Enter passphrase: Enter same passphrase again:

passphrase(密码短语)的作用:
为你的SSH私钥文件(如id_ed25519)提供额外的安全保护,即使别人获取了你的私钥文件,没有passphrase也无法使用

随后会生成:

~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub


查看已有密钥

ls~/.ssh

例如:

id_ed25519 id_ed25519.pub id_rsa id_rsa.pub known_hosts config authorized_keys

选择密钥算法

SSH 支持多种算法。

Ed25519(推荐)

ssh-keygen-ted25519

特点:

  • 速度快
  • 密钥短
  • 安全性高
  • 当前 OpenSSH 默认推荐方案

生成结果:

id_ed25519 id_ed25519.pub

适用于:

  • GitHub
  • GitLab
  • 云服务器
  • 日常开发

这是目前最推荐使用的算法。


RSA

ssh-keygen-trsa-b4096

参数说明:

-t rsa 指定 RSA 算法 -b 4096 密钥长度

输出:

id_rsa id_rsa.pub

推荐至少:

-b3072

或者:

-b4096

优点:

  • 兼容性最好

缺点:

  • 密钥较大
  • 计算效率较低

ECDSA

ssh-keygen-tecdsa-b521

较少使用。

主要用于某些特殊兼容场景。


DSA

ssh-keygen-tdsa

已经基本废弃。

OpenSSH 已不建议继续使用。


常用参数详解

-t指定算法

-t

例如:

ssh-keygen-ted25519

-b指定密钥长度

-b

例如:

ssh-keygen-trsa-b4096

-f指定文件名

默认保存:

~/.ssh/id_ed25519

自定义:

ssh-keygen-ted25519-f~/.ssh/github

生成:

github github.pub

适合:

GitHub GitLab 公司服务器 生产环境 测试环境

分别维护独立密钥。


-C添加备注信息

-C

例如:

ssh-keygen-ted25519\-C"arnold@example.com"

查看公钥:

ssh-ed25519 AAAAC3Nza... arnold@example.com

通常填写:

邮箱 机器名 用途说明

例如:

ssh-keygen-C"github-personal"ssh-keygen-C"prod-server"ssh-keygen-C"macbook-air"

-t设置密码保护

ssh-keygen-ted25519

系统会提示:

Enter passphrase:

密码用于保护私钥。

即使私钥文件泄露:

id_ed25519

攻击者也无法直接使用。

推荐:

生产环境 个人电脑 长期使用密钥

都设置 Passphrase。


-p修改密钥密码

ssh-keygen-p

指定文件:

ssh-keygen-p-f~/.ssh/id_ed25519

流程:

输入旧密码 输入新密码 确认新密码

cat查看公钥内容

cat~/.ssh/id_ed25519.pub

输出:

ssh-ed25519 AAAAC3NzaC... user@example.com

复制后添加到:

  • GitHub SSH Keys
  • GitLab SSH Keys
  • 云服务器
  • 跳板机

-lf查看密钥指纹

ssh-keygen-lf~/.ssh/id_ed25519.pub

输出:

256 SHA256:xxxxxxxxxxx user@example.com

常用于:

  • 校验密钥
  • 比对服务器指纹
  • 安全审计

-lvf查看随机图案(ASCII Art)

ssh-keygen-lvf~/.ssh/id_ed25519.pub

输出:

+--[ED25519 256]--+ | .+=o. | | .o==+ | |..+*=. | |o*+= | +-----------------+

这是 OpenSSH 提供的视觉指纹。

便于人工比较密钥。


生成 GitHub 专用密钥

例如:

ssh-keygen\-ted25519\-C"github"\-f~/.ssh/github

配置 SSH:

nano~/.ssh/config
Host github.com HostName github.com User git IdentityFile ~/.ssh/github

测试连接:

ssh-Tgit@github.com

成功后会看到:

Hi username! You've successfully authenticated.

生成服务器专用密钥

步骤

生成(本地操作):

ssh-keygen\-ted25519\-f~/.ssh/prod

上传公钥:

用命令上传:

ssh-copy-id-i~/.ssh/prod.pub root@server

或者:

查看:

catprod.pub

然后复制到服务器此文件中:

~/.ssh/authorized_keys

详细解释

🔑 第一步:生成「服务器专用密钥」(本地操作)

ssh-keygen\-ted25519\-f~/.ssh/prod

这是在你自己的电脑上执行的命令(不是服务器!)
作用:生成一对「密钥」(私钥 + 公钥)

  • -t ed25519:指定加密算法(现在最安全的算法之一)
  • -f ~/.ssh/prod:指定私钥保存路径(生成后会同时生成prod(私钥)和prod.pub(公钥))
    ➡️结果
    • 私钥文件:~/.ssh/prod(你自己电脑上,绝对不能泄露
    • 公钥文件:~/.ssh/prod.pub(可以公开给服务器用)

📤 第二步:上传公钥到服务器(两种方法选一种)

方法 1:自动上传(推荐)
ssh-copy-id-i~/.ssh/prod.pub root@server

作用:自动把你的公钥(prod.pub)发送到服务器

  • -i ~/.ssh/prod.pub:指定你要上传的公钥路径
  • root@server:服务器的登录地址(root是用户名,server是服务器 IP/域名)
    ➡️背后发生了什么
    这个命令会自动把公钥内容追加到服务器的~/.ssh/authorized_keys文件里(相当于把你的「公钥指纹」登记到服务器的「白名单」中)
方法 2:手动上传(适合不能用ssh-copy-id的情况)
catprod.pub

作用:显示公钥内容(在你电脑上执行)

  • 执行后会打印出一长串类似ssh-ed25519 AAAAC3...的字符
    ➡️操作步骤
    1. 复制这串字符(就是prod.pub的内容)
    2. 登录服务器(用密码登录)
    3. 手动把这串字符粘贴到服务器的~/.ssh/authorized_keys文件里(如果文件不存在,就新建)

📋 第三步:复制到服务器(其实就是「确认公钥生效」)

~/.ssh/authorized_keys

作用:这是服务器上存储「允许登录的公钥」的文件

  • 你第二步上传的公钥(prod.pub的内容),最终要放到这个文件里
  • 服务器每次收到 SSH 登录请求时,会检查这个文件,确认你的私钥是否匹配

🌰 举个生活例子

想象你要进公司大楼:
1️⃣生成密钥→ 你去办了一张「电子门禁卡」(私钥) + 一张「卡的复印件」(公钥)
2️⃣上传公钥→ 把「卡的复印件」交给公司前台登记(登记到门禁系统authorized_keys里)
3️⃣登录服务器→ 以后你用「电子门禁卡」(私钥)就能直接刷门禁,不用输密码了 ✅


❓ 常见问题

  • Q:私钥和公钥啥区别?
    → 私钥(prod)是你自己藏好的「钥匙」,公钥(prod.pub)是给服务器的「锁的型号」,服务器用公钥验证你的私钥是否合法。

  • Q:为什么不用密码登录?
    → 密码容易被暴力破解,用密钥登录更安全(且可以设置免密登录,自动化运维更方便)。

  • Q:~/.ssh/authorized_keys不存在怎么办?
    → 服务器上手动创建目录和文件:

    mkdir-p~/.ssh&&touch~/.ssh/authorized_keyschmod700~/.ssh&&chmod600~/.ssh/authorized_keys

✅ 总结流程

  1. 本地生成密钥→ 得到prod(私钥)和prod.pub(公钥)
  2. 上传公钥→ 把prod.pub的内容放到服务器的authorized_keys
  3. 以后登录服务器→ 用私钥prod就能免密登录(比如ssh -i ~/.ssh/prod root@server

这样设置后,你就可以用私钥prod直接登录服务器,不用每次输密码啦! 🔒


~/.ssh/config文件中添加密钥信息

如:

vim~/.ssh/config

测试生成的密钥(ssh -T git@github.com)

ssh-Tgit@github.com

或者直接ssh -T github.com使用前面配置的host别名

-N生成无需密码的自动化密钥

CI/CD 场景:

ssh-keygen\-ted25519\-N""\-fdeploy_key

其中:

-N""

表示空密码。

适用于:

  • GitHub Actions
  • Jenkins
  • Kubernetes Job
  • 自动部署脚本

但安全性会有所下降。


-A生成主机密钥

服务器初始化时:

ssh-keygen-A

会自动生成:

ssh_host_rsa_key ssh_host_ecdsa_key ssh_host_ed25519_key

这些文件通常位于:

/etc/ssh/

供 SSH 服务端使用。


-m转换密钥格式

OpenSSH 私钥:

BEGIN OPENSSH PRIVATE KEY

转换 PEM:

ssh-keygen-p\-mPEM\-fid_rsa

转换后:

BEGIN RSA PRIVATE KEY

常用于:

  • 某些旧系统
  • 第三方工具兼容
  • 云平台导入

rm删除本地SSH密钥文件

# 删除私钥文件 rm ~/.ssh/id_rsa # 删除公钥文件 rm ~/.ssh/id_rsa.pub

-R删除本地主机指纹

当服务器重装后:

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

可以执行:

ssh-keygen-Rserver.com

或者:

ssh-keygen-R192.168.1.10

自动删除:

~/.ssh/known_hosts

中的旧记录。


常见使用场景

GitHub

ssh-keygen-ted25519-C"github"

GitLab

ssh-keygen-ted25519-C"gitlab"

云服务器登录

ssh-keygen-ted25519

自动部署

ssh-keygen-N""

跳板机认证

ssh-keygen-fbastion

企业内部多个身份

~/.ssh/work ~/.ssh/personal ~/.ssh/github ~/.ssh/prod

配合:

~/.ssh/config

实现多身份管理。


最佳实践建议(-a增加密钥派生计算次数)

当前最推荐的生成方式:

ssh-keygen\-ted25519\-a100\-C"your@email.com"

参数:

-a 100

表示增加密钥派生计算次数,提高抵抗暴力破解能力。

建议:

场景推荐算法
个人开发Ed25519
GitHubEd25519
GitLabEd25519
Linux 服务器Ed25519
老旧设备兼容RSA 4096
自动化部署Ed25519(可无密码)

总结

ssh-keygen是 SSH 生态中最核心的工具之一。

它不仅用于生成 SSH 登录密钥,也广泛应用于:

  • Git 身份认证
  • 服务器免密登录
  • 自动化部署
  • 数字签名
  • 主机身份验证
  • 企业级访问控制

对于绝大多数场景,推荐采用:

ssh-keygen-ted25519-a100-C"user@example.com"

这种方式兼顾了安全性、性能以及未来兼容性,是当前 OpenSSH 社区最推荐的实践方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询