SSH 生成公钥(密钥对)

🔑 SSH 生成公钥(密钥对)完整指南Windows/WSL2 通用)

💡 核心概念:执行 ssh-keygen同时生成公钥 + 私钥(公钥是私钥的衍生品,无法单独生成公钥)


🚀 一键生成(推荐方案)

✅ Windows PowerShell(管理员非必需)

# 生成 ED25519 密钥(现代首选,更快更安全)
ssh-keygen -t ed25519 -C "your_email@example.com" -f "$env:USERPROFILE\.ssh\id_wsl2_new"

# 或生成 RSA 4096(兼容旧系统)
# ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f "$env:USERPROFILE\.ssh\id_rsa_new"

✅ WSL2 Ubuntu 终端

ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_wsl2_new

📝 交互过程详解(按提示操作)

Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/wxf81/.ssh/id_wsl2_new): [直接回车]
Enter passphrase (empty for no passphrase): [强烈建议设置!]
Enter same passphrase again: [再次输入]
Your identification has been saved in /c/Users/wxf81/.ssh/id_wsl2_new
Your public key has been saved in /c/Users/wxf81/.ssh/id_wsl2_new.pub  # ← 公钥文件
选项建议说明
保存路径直接回车(用默认)避免路径混乱
Passphrase设置强密码私钥被盗时的最后一道防线(可用 KeePass 管理)
覆盖提示❌ 拒绝覆盖现有密钥输入 n 保留原密钥

🔍 生成后关键操作

1️⃣ 查看/复制公钥内容(用于添加到服务器)

# Windows:复制公钥到剪贴板(一键粘贴到 WSL2)
Get-Content "$env:USERPROFILE\.ssh\id_wsl2_new.pub" | clip
Write-Host "✅ 公钥已复制到剪贴板!"

# WSL2:查看公钥(用于验证)
cat ~/.ssh/id_wsl2_new.pub

2️⃣ 上传公钥到 WSL2(三选一)

# 方法1:PowerShell 一键追加(推荐)
Get-Content "$env:USERPROFILE\.ssh\id_wsl2_new.pub" | ssh WSL2-Ubuntu-TEST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# 方法2:手动粘贴(WSL2 内执行)
nano ~/.ssh/authorized_keys  # 粘贴剪贴板内容 → Ctrl+O 保存 → Ctrl+X 退出

# 方法3:使用 ssh-copy-id(需安装)
ssh-copy-id -i "$env:USERPROFILE\.ssh\id_wsl2_new" -p 2222 wuxiufeng@10.10.3.202

3️⃣ 修复私钥权限(Windows 必做!)

icacls "$env:USERPROFILE\.ssh\id_wsl2_new" /inheritance:r /grant:r "$env:USERNAME:F"
Write-Host "✅ 私钥权限已加固"

📌 重要安全原则

项目正确做法错误做法
私钥仅存本地 + 设置权限 + 可设 passphrase上传 GitHub/网盘/微信
公钥可安全分发到多台服务器与私钥混淆保管
密钥命名按用途命名:id_wsl2_laptop, id_wsl2_phone全用默认 id_rsa
Passphrase✅ 设置 + 用 ssh-agent 管理❌ 留空(便利但高风险)

💡 高级技巧(按需使用)

🔐 无交互生成(脚本自动化用)

# 生成无 passphrase 密钥(仅限可信环境!)
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_auto" -N "" -C "auto-deploy"

🌐 指定算法兼容旧服务器

# 生成 RSA 4096(兼容 CentOS 6 等旧系统)
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_legacy -C "legacy-server"

🔄 查看已有密钥指纹(验证身份)

ssh-keygen -l -f "$env:USERPROFILE\.ssh\id_wsl2_new.pub"
# 输出:256 SHA256:xxxxxx your_email@example.com (ED25519)

✅ 生成后验证清单

步骤命令预期结果
1. 检查文件存在Test-Path "$env:USERPROFILE\.ssh\id_wsl2_new.pub"True
2. 检查公钥格式Get-Content ...\.pubssh-ed25519 AAAA... 开头
3. 测试连接ssh -i "...\.ssh\id_wsl2_new" WSL2-Ubuntu-TEST无需密码登录成功
4. 权限验证icacls ...\.ssh\id_wsl2_new仅当前用户有完全控制权

⚠️ 常见陷阱

问题原因解决
@@@@@@@@ WARNING: UNPROTECTED PRIVATE KEY FILE!私钥权限过宽执行 icacls 修复权限
生成后仍要密码1. 未用新密钥连接2. passphrase 未通过 ssh-agent 加载1. 指定 -i 参数测试2. ssh-add "新私钥路径"
公钥内容异常用记事本编辑过(添加BOM)用 VSCode/Notepad++ 保存为 UTF-8 无 BOM

🌟 终极建议

  1. 为每台设备生成独立密钥(命名如 id_wsl2_laptop
  2. 设置 passphrase + 启用 ssh-agent(安全与便利兼得)
  3. 公钥上传后立即测试
   ssh -i "$env:USERPROFILE\.ssh\id_wsl2_new" -p 2222 wuxiufeng@10.10.3.202
  1. 旧密钥保留备份:重命名 id_wsl2_old 而非删除

记住
公钥 = 你家的“钥匙模具”(可分发)
私钥 = 你手里的“实体钥匙”(绝对保密!)
生成后,将公钥内容粘贴到 WSL2 的 ~/.ssh/authorized_keys,即可实现安全免密登录 🔒➡️🚀

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注