ssh-keygen命令介绍(密钥生成密钥、私钥生成私钥、公钥生成公钥、非对称加密、密钥指纹、密钥验证密钥、密钥测试密钥SSH生成)~/.ssh/authorized_keys、ssh-copy-id

ssh-keygen命令介绍(密钥生成密钥、私钥生成私钥、公钥生成公钥、非对称加密、密钥指纹、密钥验证密钥、密钥测试密钥SSH生成)~/.ssh/authorized_keys、ssh-copy-id
示例命令ssh-keygen\-ted25519\-a100\-f~/.ssh/github\-Cyouremail.comssh-keygen\-ted25519\-a100\-f~/.ssh/github\-CGithub username:sha******ng0907, Email: suns*****adugmail.com文章目录SSH Keygen 使用指南SSH 密钥生成与管理详解什么是 ssh-keygenSSH 密钥认证原理ssh-keygen 基本语法查看已有密钥选择密钥算法Ed25519推荐RSAECDSADSA常用参数详解-t指定算法-b指定密钥长度-f指定文件名-C添加备注信息-t设置密码保护-p修改密钥密码cat查看公钥内容-lf查看密钥指纹-lvf查看随机图案ASCII Art生成 GitHub 专用密钥生成服务器专用密钥步骤生成本地操作上传公钥详细解释 第一步生成「服务器专用密钥」本地操作 第二步上传公钥到服务器两种方法选一种方法 1自动上传推荐方法 2手动上传适合不能用 ssh-copy-id 的情况 第三步复制到服务器其实就是「确认公钥生效」 举个生活例子❓ 常见问题✅ 总结流程在~/.ssh/config文件中添加密钥信息测试生成的密钥ssh -T gitgithub.com-N生成无需密码的自动化密钥-A生成主机密钥-m转换密钥格式rm删除本地SSH密钥文件-R删除本地主机指纹常见使用场景GitHubGitLab云服务器登录自动部署跳板机认证企业内部多个身份最佳实践建议-a增加密钥派生计算次数总结SSH Keygen 使用指南SSH 密钥生成与管理详解什么是 ssh-keygenssh-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适用于GitHubGitLab云服务器日常开发这是目前最推荐使用的算法。RSAssh-keygen-trsa-b4096参数说明-t rsa 指定 RSA 算法 -b 4096 密钥长度输出id_rsa id_rsa.pub推荐至少-b3072或者-b4096优点兼容性最好缺点密钥较大计算效率较低ECDSAssh-keygen-tecdsa-b521较少使用。主要用于某些特殊兼容场景。DSAssh-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\-Carnoldexample.com查看公钥ssh-ed25519 AAAAC3Nza... arnoldexample.com通常填写邮箱 机器名 用途说明例如ssh-keygen-Cgithub-personalssh-keygen-Cprod-serverssh-keygen-Cmacbook-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... userexample.com复制后添加到GitHub SSH KeysGitLab SSH Keys云服务器跳板机-lf查看密钥指纹ssh-keygen-lf~/.ssh/id_ed25519.pub输出256 SHA256:xxxxxxxxxxx userexample.com常用于校验密钥比对服务器指纹安全审计-lvf查看随机图案ASCII Artssh-keygen-lvf~/.ssh/id_ed25519.pub输出--[ED25519 256]-- | .o. | | .o | |..*. | |o* | -----------------这是 OpenSSH 提供的视觉指纹。便于人工比较密钥。生成 GitHub 专用密钥例如ssh-keygen\-ted25519\-Cgithub\-f~/.ssh/github配置 SSHnano~/.ssh/configHost github.com HostName github.com User git IdentityFile ~/.ssh/github测试连接ssh-Tgitgithub.com成功后会看到Hi username! Youve successfully authenticated.生成服务器专用密钥步骤生成本地操作ssh-keygen\-ted25519\-f~/.ssh/prod上传公钥用命令上传ssh-copy-id-i~/.ssh/prod.pub rootserver或者查看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 rootserver✅作用自动把你的公钥prod.pub发送到服务器-i ~/.ssh/prod.pub指定你要上传的公钥路径rootserver服务器的登录地址root是用户名server是服务器 IP/域名➡️背后发生了什么这个命令会自动把公钥内容追加到服务器的~/.ssh/authorized_keys文件里相当于把你的「公钥指纹」登记到服务器的「白名单」中方法 2手动上传适合不能用ssh-copy-id的情况catprod.pub✅作用显示公钥内容在你电脑上执行执行后会打印出一长串类似ssh-ed25519 AAAAC3...的字符➡️操作步骤复制这串字符就是prod.pub的内容登录服务器用密码登录手动把这串字符粘贴到服务器的~/.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~/.sshtouch~/.ssh/authorized_keyschmod700~/.sshchmod600~/.ssh/authorized_keys✅ 总结流程本地生成密钥→ 得到prod私钥和prod.pub公钥上传公钥→ 把prod.pub的内容放到服务器的authorized_keys里以后登录服务器→ 用私钥prod就能免密登录比如ssh -i ~/.ssh/prod rootserver这样设置后你就可以用私钥prod直接登录服务器不用每次输密码啦 在~/.ssh/config文件中添加密钥信息如vim~/.ssh/config测试生成的密钥ssh -T gitgithub.comssh-Tgitgithub.com或者直接ssh -T github.com使用前面配置的host别名-N生成无需密码的自动化密钥CI/CD 场景ssh-keygen\-ted25519\-N\-fdeploy_key其中-N表示空密码。适用于GitHub ActionsJenkinsKubernetes 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转换 PEMssh-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中的旧记录。常见使用场景GitHubssh-keygen-ted25519-CgithubGitLabssh-keygen-ted25519-Cgitlab云服务器登录ssh-keygen-ted25519自动部署ssh-keygen-N跳板机认证ssh-keygen-fbastion企业内部多个身份~/.ssh/work ~/.ssh/personal ~/.ssh/github ~/.ssh/prod配合~/.ssh/config实现多身份管理。最佳实践建议-a增加密钥派生计算次数当前最推荐的生成方式ssh-keygen\-ted25519\-a100\-Cyouremail.com参数-a 100表示增加密钥派生计算次数提高抵抗暴力破解能力。建议场景推荐算法个人开发Ed25519GitHubEd25519GitLabEd25519Linux 服务器Ed25519老旧设备兼容RSA 4096自动化部署Ed25519可无密码总结ssh-keygen是 SSH 生态中最核心的工具之一。它不仅用于生成 SSH 登录密钥也广泛应用于Git 身份认证服务器免密登录自动化部署数字签名主机身份验证企业级访问控制对于绝大多数场景推荐采用ssh-keygen-ted25519-a100-Cuserexample.com这种方式兼顾了安全性、性能以及未来兼容性是当前 OpenSSH 社区最推荐的实践方案。