`ssh-keygen`详解 笔记250703

7 阅读21分钟

ssh-keygen详解


ssh-keygen 生成公私两钥, 私钥放在连接发起机, 公钥放在被连接机的被连接用户的用户文件夹的 .ssh文件夹的 authorized_keys文件中 authorized_keys可放多个公钥, 每个公钥占用一行


模板

ssh-keygen -t ed25519 -C "comment注释" -f '~/.ssh/文件夹必须已存在/密钥名'

密钥名会生成 密钥名 和 密钥名.pub 两个文件, 分别是私钥和公钥

ssh-keygen -t ed25519 -C "user@host" -f "~/.ssh/id_ed25519-250703_135244"
### 会在当前文件夹生成 hello(私钥) 和 hello.pub(公钥) 两个文件 
ssh-keygen -t ed25519 -C 'comment' -f 'hello'
### 没有 -f 会询问路径
ssh-keygen -t ed25519 -C 'comment'
### 没有 -C(大写C) 会自动添加注释:  user@host(生成key的用户名@生成key的主机名)
ssh-keygen -t ed25519
### 没有 -t , 什么参数都没有也能用, 版本7后默认ed25519算法
ssh-keygen
###  单独 ssh-keygen 相当于
ssh-keygen -t ed25519 -C "用户名@生成所使用的主机名" -f ~/.ssh/id_ed25519(会询问)
用于 Bash 的模板

在当前文件夹,创建一个与key同名的文件夹,来放生成的key

###   在当前文件夹,创建一个与key同名的文件夹,来放生成的key
TempName='id_ed25519-250703_153038'
mkdir -p ${TempName}
ssh-keygen -t ed25519 -C 'user@host' -f "./${TempName}/${TempName}"
cd "./${TempName}"   ### 然后进入生成的文件夹
用于 PowerShell 的模板

在当前文件夹,创建一个与key同名的文件夹,来放生成的key , 与bash模板的差异就是定义赋值变量时前面加了$

###   在当前文件夹,创建一个与key同名的文件夹,来放生成的key
$TempName='id_ed25519-250703_153038'
mkdir -p ${TempName}
ssh-keygen -t ed25519 -C 'user@host' -f "./${TempName}/${TempName}"
cd "./${TempName}"   ### 然后进入生成的文件夹




常用参数 -t , -b , -C , -f

参数可以都省略 单独的 ssh-keygen 一般相当于 ssh-keygen -t ed25519 -C "用户名@生成所使用的主机名" -f ~/.ssh/id_ed25519(会询问)

ssh-keygen
### 相当于
ssh-keygen -t ed25519 -C "用户名@生成所使用的主机名" -f ~/.ssh/id_ed25519(会询问)
参数作用示例
-t指定密钥类型(rsa/ecdsa/ed25519)一般默认值就是ed25519 可不指定-tssh-keygen -t ed25519
-b设置密钥长度(RSA 推荐 ≥3072 位)ed25519长度固定,用不上-bssh-keygen -t rsa -b 4096
-C添加注释(如邮箱或用途)ssh-keygen -C "user@example.com"
-f指定密钥保存路径ssh-keygen -f ~/.ssh/custom_key
  1. -t <密钥类型>

    • 指定密钥算法类型,常用值:
      • rsa(默认,兼容性好)
      • ed25519(更安全高效)
      • ecdsa(椭圆曲线算法)
    • 示例:
      ssh-keygen -t ed25519
      
  2. -b <密钥长度>

    • 设置密钥的位数(仅对 RSA/ECDSA 有效 , ed25519长度固定,用不上-b):
      • RSA 推荐 4096 位:-b 4096
      • ECDSA 推荐 384 位:-b 384
    • 示例:
      ssh-keygen -t rsa -b 4096
      
  3. -C "<注释>"

    • 添加密钥注释(通常用邮箱标识所有者)
    • 示例:
      ssh-keygen -C "your_email@example.com"
      
  4. -f "<文件路径>"

    • 指定密钥保存路径和文件名(管理多密钥必备
    • 示例:
      ssh-keygen -f ~/.ssh/github_key  # 生成私钥 github_key 和公钥 github_key.pub
      




更多参数

usage: ssh-keygen [-q] [-a rounds] [-b bits] [-C comment] [-f output_keyfile]
                  [-m format] [-N new_passphrase] [-O option]
                  [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa]
                  [-w provider] [-Z cipher]
       ssh-keygen -p [-a rounds] [-f keyfile] [-m format] [-N new_passphrase]
                   [-P old_passphrase] [-Z cipher]
       ssh-keygen -i [-f input_keyfile] [-m key_format]
       ssh-keygen -e [-f input_keyfile] [-m key_format]
       ssh-keygen -y [-f input_keyfile]
       ssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]
       ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
       ssh-keygen -B [-f input_keyfile]
       ssh-keygen -D pkcs11
       ssh-keygen -F hostname [-lv] [-f known_hosts_file]
       ssh-keygen -H [-f known_hosts_file]
       ssh-keygen -K [-a rounds] [-w provider]
       ssh-keygen -R hostname [-f known_hosts_file]
       ssh-keygen -r hostname [-g] [-f input_keyfile]
       ssh-keygen -M generate [-O option] output_file
       ssh-keygen -M screen [-f input_file] [-O option] output_file
       ssh-keygen -I certificate_identity -s ca_key [-hU] [-D pkcs11_provider]
                  [-n principals] [-O option] [-V validity_interval]
                  [-z serial_number] file ...
       ssh-keygen -L [-f input_keyfile]
       ssh-keygen -A [-a rounds] [-f prefix_path]
       ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
                  file ...
       ssh-keygen -Q [-l] -f krl_file [file ...]
       ssh-keygen -Y find-principals -s signature_file -f allowed_signers_file
       ssh-keygen -Y check-novalidate -n namespace -s signature_file
       ssh-keygen -Y sign -f key_file -n namespace file ...
       ssh-keygen -Y verify -f allowed_signers_file -I signer_identity
                  -n namespace -s signature_file [-r revocation_file]
选项功能描述
-t指定密钥类型:rsaed25519ecdsadsa(不推荐)
-b指定密钥长度(如 RSA 推荐 2048/4096,ED25519 固定 256 无需指定)
-C添加注释(通常为邮箱,如 user@example.com
-f指定密钥文件保存路径(默认 ~/.ssh/id_*
-N设置私钥密码(空字符串 '' 表示无密码)
-P更改现有私钥密码
-q安静模式,不显示进度信息
-y从私钥提取公钥内容
-l显示密钥指纹(用于验证服务器身份)
-Fknown_hosts 文件中查找主机密钥(用于清理旧指纹)
-Rknown_hosts 文件中删除指定主机的密钥(用于修复 MITM 攻击警告)

参数分类一

一、密钥生成参数
1. -t:指定密钥类型
ssh-keygen -t ed25519  # 推荐:现代椭圆曲线算法(2013年)
ssh-keygen -t rsa -b 4096  # 兼容:RSA算法,指定4096位长度
ssh-keygen -t ecdsa -b 521  # 椭圆曲线DSA,可选256/384/521位
ssh-keygen -t dsa  # 不推荐:DSA算法(已被弃用,<=1024位)
  • 推荐配置:优先使用 ed25519,RSA 仅用于兼容旧系统
2. -b:指定密钥长度(比特位)
ssh-keygen -t rsa -b 4096  # RSA推荐至少2048位,敏感系统用4096位
ssh-keygen -t ecdsa -b 521  # ECDSA可选256/384/521位(521位安全性最高)
# ed25519无需指定-b,固定256位安全强度
  • 安全建议:RSA 低于 2048 位存在安全风险(如 1024 位已被破解)
3. -f:指定密钥文件路径
ssh-keygen -f ~/.ssh/custom_key  # 保存到自定义路径
ssh-keygen -f /etc/ssh/ssh_host_rsa_key  # 系统主机密钥路径
  • 注意:私钥文件(如 custom_key)需严格权限控制(chmod 600
4. -C:添加注释(Comment)
ssh-keygen -C "admin@example.com"  # 公钥中嵌入邮箱注释
ssh-keygen -C "web-server-prod"  # 用于标识服务器用途的注释
  • 用途:在 ~/.ssh/authorized_keys 中便于识别不同密钥用途
5. -N:设置私钥密码(Passphrase)
ssh-keygen -N 'strong_password' -f ~/.ssh/secure_key  # 设置密码
ssh-keygen -N '' -f /tmp/automation_key  # 无密码(自动化场景)
  • 安全建议:始终为私钥设置强密码,无密码密钥仅限自动化脚本使用
二、密钥管理参数
1. -P:修改现有私钥密码
ssh-keygen -P 'new_password' -f ~/.ssh/id_rsa  # 修改密码
ssh-keygen -P '' -f ~/.ssh/id_rsa  # 移除密码(谨慎操作)
  • 操作步骤:会先要求输入旧密码,再设置新密码
2. -y:从私钥提取公钥
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub  # 重建公钥
ssh-keygen -y -f /etc/ssh/ssh_host_ed25519_key  # 查看主机公钥内容
  • 应用场景:公钥文件丢失时,可通过私钥重新生成公钥
3. -l:显示密钥指纹(Fingerprint)
ssh-keygen -l -f ~/.ssh/id_ed25519.pub  # 显示SHA256指纹
ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub  # 显示MD5指纹(兼容旧系统)
  • 输出示例
    256 SHA256:XXXXXXXX... user@host (ED25519)
    
4. -B:显示密钥的 Bubble Babble 编码
ssh-keygen -B -f ~/.ssh/id_rsa.pub
# 输出类似:xexax-wofyr-ludak-sonax-gixex
  • 用途:便于人类记忆和口头传递密钥验证信息
三、高级功能参数
1. -A:自动生成所有类型的主机密钥
sudo ssh-keygen -A  # 为SSH服务生成所有支持的主机密钥
# 等效于生成ed25519、rsa、ecdsa等类型的主机密钥
  • 应用场景:新安装SSH服务后初始化主机密钥
2. -T:测试密钥的安全性
ssh-keygen -t rsa -b 2048 -f test_key
ssh-keygen -T /dev/stdout -f test_key  # 测试密钥抗暴力破解能力
  • 输出:显示密钥在不同攻击模型下的估计破解时间
3. -c:修改密钥注释
ssh-keygen -c -C "new_comment@example.com" -f ~/.ssh/id_rsa
  • 注意:仅修改公钥中的注释字段,不影响密钥对本身
4. -F:在 known_hosts 中查找主机
ssh-keygen -F example.com  # 查找example.com的主机密钥
ssh-keygen -F 192.168.1.1  # 按IP查找
  • 输出:显示匹配的主机密钥条目或 # not found
5. -R:从 known_hosts 删除主机密钥
ssh-keygen -R example.com  # 删除旧的/错误的主机密钥
  • 场景:当服务器重装系统后,需要清除本地缓存的旧指纹
四、证书相关参数(SSH CA)
1. -s:使用 CA 签署用户/主机证书
# 签署用户证书
ssh-keygen -s /path/to/ca_key -I user_id -n username -V +52w user_key.pub

# 签署主机证书
ssh-keygen -s /path/to/ca_key -h -I server_id -n server1,server2 -V +1y host_key.pub
  • 参数说明
    • -I:证书标识符(唯一ID)
    • -n:允许的用户名/主机名(逗号分隔)
    • -V:有效期(如 +52w 表示52周)
    • -h:签署主机证书(而非用户证书)
2. -L:查看证书详情
ssh-keygen -L -f user_key-cert.pub  # 查看证书信息
  • 输出:显示证书有效期、主体、权限等详细信息
五、格式转换参数
1. -p:更改密钥格式(OpenSSH/PuTTY)
# OpenSSH私钥 → PuTTY (.ppk) 格式(需putty-tools)
puttygen ~/.ssh/id_rsa -o id_rsa.ppk

# PuTTY → OpenSSH格式
puttygen id_rsa.ppk -O private-openssh -o ~/.ssh/id_rsa
  • 应用场景:在 Windows(PuTTY)和 Linux 之间迁移密钥
2. -m:指定密钥格式
ssh-keygen -m PEM -f rsa_key  # 生成PEM格式密钥(兼容OpenSSL)
  • 常见格式RFC4716(OpenSSH默认)、PEM(OpenSSL)
六、其他实用参数
1. -q:安静模式(不显示进度信息)
ssh-keygen -q -t ed25519 -f /tmp/auto_key -N ''  # 脚本自动化
2. -v:详细模式(显示生成过程)
ssh-keygen -v -t rsa -b 4096  # 调试模式,显示密钥生成细节
3. --version:显示版本信息
ssh-keygen --version  # 查看OpenSSH版本

参数分类二

核心参数
参数描述示例
-t指定密钥类型ssh-keygen -t ed25519
ssh-keygen -t rsa
-b设置密钥长度(比特)ssh-keygen -b 4096 (RSA默认3072)
-f指定密钥文件路径ssh-keygen -f ~/.ssh/github_key
-C添加密钥注释ssh-keygen -C "user@example.com"
-N设置新密码ssh-keygen -N "new_passphrase"
-P提供旧密码(用于修改)ssh-keygen -p -P "old_pass" -N "new_pass"

密钥管理
参数描述示例
-p修改私钥密码ssh-keygen -p -f id_rsa
-y从私钥生成公钥ssh-keygen -y -f id_rsa > key.pub
-c修改密钥注释ssh-keygen -c -C "new_comment" -f id_rsa
-e导出密钥(格式转换)ssh-keygen -e -m PEM -f key.pub
-i导入密钥ssh-keygen -i -f imported_key

安全增强
参数描述示例
-aKDF轮数(增强密码防护)ssh-keygen -t ed25519 -a 100
-Z指定加密算法ssh-keygen -Z aes256-ctr
-O设置密钥选项ssh-keygen -O clear (清除密码)
ssh-keygen -O no-touch-required (YubiKey)

密钥验证
参数描述示例
-l显示密钥指纹ssh-keygen -l -f id_rsa.pub
-E指定指纹算法ssh-keygen -l -E md5 -f id_rsa
-B显示Bubble Babble指纹ssh-keygen -B -f id_ed25519
-v详细模式(显示ASCII艺术)ssh-keygen -lv -f key.pub

主机密钥管理
参数描述示例
-R删除known_hosts中的主机ssh-keygen -R github.com
-F查找主机密钥ssh-keygen -F github.com
-H哈希处理known_hostsssh-keygen -H

高级操作
参数描述示例
-q静默模式ssh-keygen -q -t rsa -N ""
-m指定密钥格式ssh-keygen -m PEM -f key
-r生成DNS记录(SSHFP)ssh-keygen -r host.example.com
-s使用CA签发证书ssh-keygen -s ca_key -I ID user_key.pub

特殊用途
参数描述示例
-DPKCS#11库路径ssh-keygen -D /usr/lib/libpkcs11.so
-U添加密钥到代理ssh-keygen -U -f id_ed25519
-Y签名/验证操作ssh-keygen -Y sign -f key -n file data













1️⃣ 参考 1

ssh-keygen 是 OpenSSH 工具套件中的核心命令,用于生成、管理和转换 SSH 密钥对(公钥 + 私钥)。它是实现 SSH 无密码登录、安全认证的基础工具。以下是详细解析:


核心功能

  1. 生成密钥对
    创建用于 SSH 身份认证的非对称密钥(默认 RSA 类型)。
  2. 管理密钥属性
    修改密钥注释、密码、类型等。
  3. 转换密钥格式
    在不同密钥格式(如 PEM/PKCS8)间转换。
  4. 提取指纹信息
    验证密钥的唯一性和完整性。

常用命令详解

1. 生成密钥对(基础用法)
ssh-keygen
  • 交互式流程
    • 密钥保存路径(默认 ~/.ssh/id_rsa)。
    • 设置密钥密码(Passphrase,可为空)。
    • 生成两个文件:
      • 私钥:~/.ssh/id_rsa(权限需为 600
      • 公钥:~/.ssh/id_rsa.pub(内容可公开)
2. 指定密钥类型和长度
ssh-keygen -t ed25519 -a 100              # 推荐:Ed25519 算法(更安全高效)
ssh-keygen -t rsa -b 4096                 # RSA 算法,密钥长度 4096 位
ssh-keygen -t ecdsa -b 384                # ECDSA 算法,384 位长度
  • -t:密钥类型(ed25519/rsa/ecdsa/dsa)。
  • -b:密钥长度(RSA 建议 ≥2048,ECDSA 可选 256/384/521)。
  • -a:KDF 轮数(增加暴力破解难度)。
3. 自定义密钥路径和注释
ssh-keygen -f ~/.ssh/my_key -C "my@email.com"
  • -f:指定密钥保存路径(生成 my_keymy_key.pub)。
  • -C:添加/修改密钥注释(通常为邮箱或标识)。
4. 管理密钥密码
ssh-keygen -p -f ~/.ssh/id_rsa            # 修改私钥密码
ssh-keygen -y -f ~/.ssh/id_rsa > key.pub  # 从私钥导出公钥
  • -p:修改私钥密码(需输入旧密码)。
  • -y:根据私钥生成对应公钥。
5. 查看密钥信息
ssh-keygen -l -f ~/.ssh/id_rsa.pub        # 显示公钥指纹(SHA256)
ssh-keygen -l -E md5 -f id_rsa.pub        # 显示 MD5 格式指纹(兼容旧系统)
  • -l:显示密钥指纹。
  • -E:指定指纹哈希算法(md5/sha256)。
6. 转换密钥格式
ssh-keygen -p -m PEM -f key.ppk           # 将密钥转为 PEM 格式
  • -m:指定目标格式(如 PEM/RFC4716/PKCS8)。
7. 删除主机密钥(慎用!)
ssh-keygen -R example.com                 # 清除 known_hosts 中某主机的旧密钥
  • -R:从 ~/.ssh/known_hosts 中删除指定主机的记录。

安全最佳实践

  1. 优先使用 Ed25519
    比 RSA 更安全高效,且密钥更短(推荐默认选择)。
  2. 设置强密码(Passphrase)
    即使私钥泄露,密码可增加破解难度。
  3. 密钥权限管理
    chmod 600 ~/.ssh/id_ed25519      # 私钥必须限制权限
    chmod 644 ~/.ssh/id_ed25519.pub  # 公钥可放宽
    
  4. 备份密钥
    私钥一旦丢失无法恢复!

典型使用场景

  1. SSH 无密码登录
    将公钥上传至服务器:
    ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
    
  2. Git 仓库认证
    将公钥添加到 GitHub/GitLab 的 SSH Keys 设置。
  3. 自动化脚本认证
    用密钥替代密码执行远程命令(如 rsyncscp)。

以下是 ssh-keygen 参数详解,涵盖所有主要选项及其应用场景:


核心参数

参数描述示例
-t指定密钥类型ssh-keygen -t ed25519
ssh-keygen -t rsa
-b设置密钥长度(比特)ssh-keygen -b 4096 (RSA默认3072)
-f指定密钥文件路径ssh-keygen -f ~/.ssh/github_key
-C添加密钥注释ssh-keygen -C "user@example.com"
-N设置新密码ssh-keygen -N "new_passphrase"
-P提供旧密码(用于修改)ssh-keygen -p -P "old_pass" -N "new_pass"

密钥管理

参数描述示例
-p修改私钥密码ssh-keygen -p -f id_rsa
-y从私钥生成公钥ssh-keygen -y -f id_rsa > key.pub
-c修改密钥注释ssh-keygen -c -C "new_comment" -f id_rsa
-e导出密钥(格式转换)ssh-keygen -e -m PEM -f key.pub
-i导入密钥ssh-keygen -i -f imported_key

安全增强

参数描述示例
-aKDF轮数(增强密码防护)ssh-keygen -t ed25519 -a 100
-Z指定加密算法ssh-keygen -Z aes256-ctr
-O设置密钥选项ssh-keygen -O clear (清除密码)
ssh-keygen -O no-touch-required (YubiKey)

密钥验证

参数描述示例
-l显示密钥指纹ssh-keygen -l -f id_rsa.pub
-E指定指纹算法ssh-keygen -l -E md5 -f id_rsa
-B显示Bubble Babble指纹ssh-keygen -B -f id_ed25519
-v详细模式(显示ASCII艺术)ssh-keygen -lv -f key.pub

主机密钥管理

参数描述示例
-R删除known_hosts中的主机ssh-keygen -R github.com
-F查找主机密钥ssh-keygen -F github.com
-H哈希处理known_hostsssh-keygen -H

高级操作

参数描述示例
-q静默模式ssh-keygen -q -t rsa -N ""
-m指定密钥格式ssh-keygen -m PEM -f key
-r生成DNS记录(SSHFP)ssh-keygen -r host.example.com
-s使用CA签发证书ssh-keygen -s ca_key -I ID user_key.pub

特殊用途

参数描述示例
-DPKCS#11库路径ssh-keygen -D /usr/lib/libpkcs11.so
-U添加密钥到代理ssh-keygen -U -f id_ed25519
-Y签名/验证操作ssh-keygen -Y sign -f key -n file data

典型组合

  1. 生成高强度Ed25519密钥

    ssh-keygen -t ed25519 -a 100 -C "work@2025" -f ~/.ssh/work_key
    
  2. 转换旧密钥为安全格式

    ssh-keygen -p -o -a 100 -f ~/.ssh/old_key
    
  3. 签发用户证书

    ssh-keygen -s ca_key -I "user_id" -n user1,user2 -V +52w user_key.pub
    

注意事项

  1. 密钥类型推荐

    • 首选:ed25519(安全高效)
    • 兼容:rsa -b 4096
    • 避免:dsa/ecdsa -b 256
  2. 安全实践

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/private_key  # 私钥权限必须为600
    
  3. 密码管理

    • 使用ssh-agent避免重复输入密码:
      eval $(ssh-agent)
      ssh-add ~/.ssh/your_key
      

通过合理组合这些参数,可满足从基础密钥生成到高级证书签发的全场景需求。










2️⃣ 参考 2

SSH-Keygen 工具详解:从基础到高级应用

ssh-keygen 是 SSH 协议套件中的核心工具,用于生成、管理和转换认证密钥对。它通过非对称加密技术实现安全的远程认证,支持 RSA、ECDSA、Ed25519 等多种算法。以下是其核心功能、参数详解及最佳实践。

一、核心功能
  1. 生成密钥对
    创建公钥(.pub)和私钥文件,用于 SSH 无密码登录或加密通信。
  2. 密钥管理
    修改密码短语、转换密钥格式、删除或备份密钥。
  3. 安全认证
    替代密码登录,提升安全性(防暴力破解)。
二、核心参数详解
参数作用示例
-t指定密钥类型(rsa/ecdsa/ed25519)ssh-keygen -t ed25519
-b设置密钥长度(RSA 推荐 ≥3072 位)ssh-keygen -t rsa -b 4096
-C添加注释(如邮箱或用途)ssh-keygen -C "user@example.com"
-f指定密钥保存路径ssh-keygen -f ~/.ssh/custom_key
-N设置空密码短语(自动化场景)ssh-keygen -N "" -f auto_key
-l显示公钥指纹(验证密钥真实性)ssh-keygen -l -E sha256 -f ~/.ssh/id_rsa.pub
-p修改私钥密码短语ssh-keygen -p -f ~/.ssh/private_key
-m转换密钥格式(如 PEM/DER)ssh-keygen -p -m PEM -f old_key
三、典型场景示例
  1. 生成 Ed25519 密钥(推荐)

    ssh-keygen -t ed25519 -C "work@server" -f ~/.ssh/server_key
    

    生成 server_key(私钥)和 server_key.pub(公钥),注释标识用途。

  2. 非交互式生成密钥(自动化部署)

    ssh-keygen -q -N "" -t rsa -b 4096 -f /path/to/auto_key
    

    静默模式生成 RSA 4096 位密钥,无密码短语。

  3. 公钥指纹验证

    ssh-keygen -l -E sha256 -f ~/.ssh/id_rsa.pub
    

    输出 SHA256 指纹,用于对比防止中间人攻击。

  4. 密钥格式转换(兼容旧系统)

    ssh-keygen -p -m PEM -f ~/.ssh/legacy_key
    

    将 OpenSSH 新格式转为 PEM 格式。

四、安全最佳实践
  1. 密钥类型选择

    • Ed25519:首选(安全性高、速度快)。
    • RSA:兼容性广,但需 ≥3072 位。
    • 避免 DSA/ECDSA(存在安全隐患或兼容性问题)。
  2. 私钥保护

    • 权限设为 600chmod 600 ~/.ssh/private_key
    • 使用强密码短语(非空密码)。
  3. 系统加固

    • 禁用密码登录:修改 /etc/ssh/sshd_config 中的 PasswordAuthentication no
    • 修改默认端口(如 2222)并限制访问 IP。
    • 定期轮换密钥(建议每 6-12 个月)。
  4. 日志与监控

    • 检查 SSH 日志(/var/log/auth.log)发现异常登录。
    • 使用 Fail2Ban 防御暴力破解。
五、高级应用
  1. SSH 证书签发(CA 模式)

    ssh-keygen -s ca_key -I "admin_cert" -n user1,user2 user_key.pub
    

    通过 CA 私钥签发证书,限制用户权限。

  2. Python 自动化集成

    import subprocess
    def gen_ssh_key(path, type="rsa", size=2048):
        cmd = ["ssh-keygen", "-t", type, "-b", str(size), "-f", path, "-N", ""]
        subprocess.run(cmd, check=True)
    gen_ssh_key("/path/to/key")
    
  3. 多密钥管理
    为不同服务(GitHub、GitLab)生成独立密钥,通过 -f 指定文件名避免冲突。

六、总结

ssh-keygen 是 SSH 安全认证的基石,合理使用可显著提升系统安全性。优先选择 Ed25519 算法,结合密码短语、权限控制和定期轮换策略,能有效防御多数攻击。在自动化场景中,非交互式生成密钥并集成到脚本(如 Ansible 部署)可大幅简化流程。










3️⃣ 参考 3

以下是关于 ssh-keygen 的详细解析,涵盖其基本用法、密钥生成流程、常见选项以及实际应用场景:


1. ssh-keygen 的基本用法

ssh-keygen 是用于生成、管理和转换 SSH 密钥对的工具,支持多种加密算法(如 RSA、DSA、ECDSA、Ed25519)。其基本命令格式为:

ssh-keygen [选项]
常用选项
选项说明
-t指定密钥类型(如 rsaed25519)。
-b指定密钥长度(仅适用于 RSA 等算法)。
-C为密钥添加注释(如邮箱地址)。
-f指定生成的密钥文件名或路径。
-N设置私钥的密码短语(passphrase)。
-q静默模式,不显示生成过程中的信息。
-p修改现有私钥的密码短语。
-l显示密钥的指纹(fingerprint)。

2. 生成 SSH 密钥对的步骤

步骤 1:运行命令生成密钥

以生成 RSA 密钥为例:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa:指定密钥类型为 RSA。
  • -b 4096:设置密钥长度为 4096 位(提高安全性)。
  • -C "your_email@example.com":添加注释,便于识别密钥用途。
步骤 2:选择保存路径

系统会提示输入密钥保存路径,默认为 ~/.ssh/id_rsa。若需自定义路径,可通过 -f 参数指定:

ssh-keygen -t rsa -f /path/to/custom_key -C "custom_key"
步骤 3:设置密码短语(可选)

系统会提示输入私钥的密码短语(passphrase)。若无需密码保护,直接回车跳过。密码短语可增加安全性,但每次使用私钥时需输入。

步骤 4:生成结果

生成完成后,会生成两个文件:

  • 私钥文件(如 id_rsa):需严格保密,不可泄露。
  • 公钥文件(如 id_rsa.pub):可公开,用于远程服务器认证。

3. 密钥类型与算法选择

常见算法对比
算法安全性密钥长度特点
RSA2048/4096位兼容性最好,适合大多数场景。
Ed25519极高固定 256 位基于椭圆曲线,速度快、安全性高,推荐新项目使用。
ECDSA256/384/521位椭圆曲线算法,兼容性较好,但部分服务不支持。
推荐用法
  • RSAssh-keygen -t rsa -b 4096
  • Ed25519ssh-keygen -t ed25519

4. 密钥权限与安全设置

生成密钥后,需确保文件权限正确,否则 SSH 会拒绝使用:

# 设置 .ssh 目录权限
chmod 700 ~/.ssh

# 设置私钥文件权限(仅限所有者读写)
chmod 600 ~/.ssh/id_rsa

# 设置公钥文件权限(可读)
chmod 644 ~/.ssh/id_rsa.pub

5. 实际应用场景

场景 1:免密码登录远程服务器
  1. 生成密钥对(如 id_rsaid_rsa.pub)。
  2. 将公钥上传到远程服务器
    cat ~/.ssh/id_rsa.pub | ssh user@remote_host 'cat >> ~/.ssh/authorized_keys'
    
  3. 验证免密登录
    ssh user@remote_host
    
场景 2:GitHub/GitLab 身份认证
  1. 生成密钥并添加注释
    ssh-keygen -t ed25519 -C "github_user@example.com"
    
  2. 复制公钥内容
    cat ~/.ssh/id_ed25519.pub
    
  3. 将公钥粘贴到 GitHub/GitLab 的 SSH 设置中

6. 高级用法

修改私钥密码
ssh-keygen -p -f ~/.ssh/id_rsa
查看密钥指纹
ssh-keygen -l -f ~/.ssh/id_rsa.pub
导出密钥为其他格式
  • OpenSSH 转 PEM 格式
    ssh-keygen -m PEM -t rsa -b 4096 -f my_key
    
  • PEM 转 OpenSSH 格式
    ssh-keygen -i -f my_key.pem > my_key.pub
    

7. 注意事项

  1. 私钥保护:私钥文件(如 id_rsa)必须严格保密,避免泄露。
  2. 密码短语:建议为私钥设置强密码短语,防止未授权访问。
  3. 密钥备份:定期备份私钥文件,避免丢失。
  4. 算法兼容性:部分旧系统可能不支持 Ed25519,需确认目标服务器支持的算法。

通过以上步骤和用法,你可以高效地使用 ssh-keygen 生成和管理 SSH 密钥,实现安全的远程访问和身份认证。










4️⃣ 参考 4

ssh-keygen 命令详解:SSH 密钥生成与管理工具

一、基本功能与用途

ssh-keygen 是 OpenSSH 套件中的核心工具,用于:

  • 生成 SSH 密钥对(公钥/私钥)
  • 管理现有密钥(转换格式、修改密码、显示指纹等)
  • 为 SSH 服务创建主机密钥
  • 支持多种加密算法(RSA、ED25519、ECDSA 等)
二、核心参数详解
ssh-keygen [选项] [-f 输出文件]
选项功能描述
-t指定密钥类型:rsaed25519ecdsadsa(不推荐)
-b指定密钥长度(如 RSA 推荐 2048/4096,ED25519 固定 256 无需指定)
-C添加注释(通常为邮箱,如 user@example.com
-f指定密钥文件保存路径(默认 ~/.ssh/id_*
-N设置私钥密码(空字符串 '' 表示无密码)
-P更改现有私钥密码
-q安静模式,不显示进度信息
-y从私钥提取公钥内容
-l显示密钥指纹(用于验证服务器身份)
-Fknown_hosts 文件中查找主机密钥(用于清理旧指纹)
-Rknown_hosts 文件中删除指定主机的密钥(用于修复 MITM 攻击警告)
三、常用场景示例
1. 生成 ED25519 密钥对(推荐)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 生成文件:~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)
2. 生成高强度 RSA 密钥(兼容旧系统)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 生成文件:~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub
3. 为服务器生成主机密钥
# 为 SSH 服务生成 ED25519 主机密钥
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
4. 修改私钥密码
ssh-keygen -p -f ~/.ssh/id_ed25519
# 交互式修改现有私钥的密码
5. 显示密钥指纹(验证服务器身份)
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# 输出类似:256 SHA256:XXXXXXXX... (ED25519)
6. 从私钥提取公钥
ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub
# 当公钥丢失时可通过私钥重新生成
7. 清理 known_hosts 中的旧指纹
# 删除 example.com 的旧密钥
ssh-keygen -R example.com
四、密钥文件格式与权限
  1. 密钥文件位置

    • 用户密钥:~/.ssh/ 目录下
    • 系统主机密钥:/etc/ssh/ 目录下(如 ssh_host_ed25519_key
  2. 标准文件名

    算法私钥文件名公钥文件名
    ED25519id_ed25519id_ed25519.pub
    RSAid_rsaid_rsa.pub
    ECDSAid_ecdsaid_ecdsa.pub
  3. 关键权限要求

    • 私钥文件:chmod 600 ~/.ssh/id_*(仅所有者可读可写)
    • 公钥文件:chmod 644 ~/.ssh/id_*.pub(可读)
    • .ssh 目录:chmod 700 ~/.ssh(仅所有者可访问)
五、高级用法
1. 生成不加密的临时密钥
ssh-keygen -t ed25519 -f /tmp/temp_key -N ''
# 用于自动化脚本(不推荐长期使用)
2. 创建证书签名密钥(SSH CA)
# 生成 CA 密钥
ssh-keygen -t ed25519 -f ~/.ssh/ca_key -C "SSH_CA"

# 使用 CA 签名用户公钥
ssh-keygen -s ~/.ssh/ca_key -I user_id -n username -V +52w ~/.ssh/user_key.pub
3. 转换密钥格式(PuTTY 兼容)
# 安装 putty-tools
sudo apt-get install putty-tools

# 将 OpenSSH 私钥转换为 PuTTY (.ppk) 格式
puttygen ~/.ssh/id_rsa -o id_rsa.ppk
六、安全最佳实践
  1. 优先使用 ED25519

    • 现代系统推荐使用 ED25519(更快、更安全)
    • RSA 仅用于兼容旧系统(如 Windows Server 2012 之前版本)
  2. 设置强密码保护私钥

    • 避免使用无密码的私钥(除非自动化需求)
    • 使用 ssh-agentkeychain 管理密码缓存
  3. 定期轮换密钥

    • 敏感系统建议每年更换一次密钥
    • 使用 ssh-keygen -Rssh-keyscan 同步新指纹
  4. 保护 known_hosts 文件

    • 定期检查 ~/.ssh/known_hosts,删除可疑条目
    • 使用 StrictHostKeyChecking=yes 强制验证主机密钥
七、常见问题处理
  1. SSH 连接时提示密钥权限问题

    # 修复权限
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/id_*
    chmod 644 ~/.ssh/*.pub
    
  2. 主机密钥变更警告

    # 删除旧指纹
    ssh-keygen -R example.com
    
    # 重新获取指纹
    ssh-keyscan example.com >> ~/.ssh/known_hosts
    
  3. 批量生成密钥(自动化)

    # 非交互式生成无密码密钥
    ssh-keygen -t ed25519 -f /path/to/key -N '' -q
    
总结

ssh-keygen 是 SSH 生态系统的基础工具,熟练掌握其用法对于安全管理远程连接至关重要。建议优先采用 ED25519 算法,并通过合理的权限设置和定期轮换机制保障密钥安全。在自动化场景中,可结合 ssh-agent 和无密码密钥实现安全的非交互式登录。










5️⃣ 参考 5

ssh-keygen 是一个用于生成、管理和转换 SSH 认证密钥的工具,它提供了多种选项来生成不同类型的密钥对(公钥和私钥),并可以对密钥进行各种配置和操作。以下是 ssh-keygen 的详细说明:

语法

ssh-keygen [-q] [-b bits] [-t type] [-N new_passphrase] [-C comment] [-f output_keyfile]

常见选项

  1. -t type
    指定密钥的类型:

    • rsa: RSA 密钥(默认类型,推荐用于大多数场景)。
    • dsa: DSA 密钥(不再推荐,已被弱安全模型淘汰)。
    • ecdsa: 椭圆曲线 DSA 密钥(适用于现代系统,安全性较高)。
    • ed25519: Ed25519 密钥(基于椭圆曲线,性能和安全性更优,推荐)。
  2. -b bits
    指定密钥的位数:

    • RSA 密钥建议使用 2048 或更高(如 4096)。
    • ECDSA 和 Ed25519 不需要指定,它们使用固定的密钥长度。
  3. -N new_passphrase
    设置密钥的密码短语(passphrase)。密码短语用于保护私钥,即使私钥文件泄露,也需要密码才能使用。可以留空(不推荐)。

  4. -C comment
    添加注释(如用户名或主机名),用于标识密钥。

  5. -f output_keyfile
    指定生成的密钥文件名(默认为 ~/.ssh/id_<type>,如 id_rsa)。

  6. -q
    静默模式,减少输出信息。

常见用法

1. 生成默认的 RSA 密钥对
ssh-keygen -t rsa -b 4096
  • 默认生成 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。
  • 推荐使用 4096 位密钥,安全性更高。
2. 生成 Ed25519 密钥对
ssh-keygen -t ed25519
  • Ed25519 是一种现代算法,性能和安全性更优。
  • 默认生成 ~/.ssh/id_ed25519~/.ssh/id_ed25519.pub
3. 指定文件名和注释
ssh-keygen -t rsa -b 4096 -f ~/.ssh/custom_key -C "my_custom_key"
  • 将密钥保存到 ~/.ssh/custom_key~/.ssh/custom_key.pub
  • 注释为 my_custom_key
4. 生成无密码短语的密钥(不推荐)
ssh-keygen -t ed25519 -N ""
  • 生成的私钥没有密码保护。

高级用法

  1. 修改密钥密码短语

    ssh-keygen -p -f ~/.ssh/id_rsa
    
    • 修改 id_rsa 的密码短语。
  2. 生成 SSH 公钥(用于手动部署)

    ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
    
    • 提取公钥内容。
  3. 检查密钥指纹

    ssh-keygen -l -f ~/.ssh/id_rsa.pub
    
    • 显示公钥的指纹(用于验证密钥)。
  4. 合并多个公钥文件

    ssh-keygen -i -f key1.pub > combined_key.pub
    ssh-keygen -i -f key2.pub >> combined_key.pub
    
    • 合并多个公钥到一个文件。
  5. 删除旧密钥

    ssh-keygen -R [hostname]
    
    • ~/.ssh/known_hosts 中删除指定主机的密钥。

使用场景

  • 生成密钥对并部署到服务器

    1. 在本地生成密钥对:
      ssh-keygen -t ed25519
      
    2. 将公钥复制到远程服务器:
      ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
      
  • 禁用密码登录(增强安全性)

    1. /etc/ssh/sshd_config 中设置:
      PasswordAuthentication no
      
    2. 重启 SSH 服务:
      sudo systemctl restart sshd
      

注意事项

  • 备份密钥文件:私钥丢失会导致无法登录服务器。
  • 保护私钥:不要将私钥文件暴露给他人。
  • 定期更新密钥:长期使用的密钥建议定期更换。

通过 ssh-keygen,可以轻松生成和管理 SSH 密钥,从而提高远程登录的安全性和便利性。










6️⃣ 参考 6

ssh-keygen 命令详解

ssh-keygen 是生成、管理和转换 SSH 密钥的核心工具,用于建立安全的远程连接(如 GitHub、GitLab、服务器登录等)。以下是详细使用方法和参数解析:


一、基础语法
ssh-keygen [选项]

二、核心参数说明
  1. -t <密钥类型>

    • 指定密钥算法类型,常用值:
      • rsa(默认,兼容性好)
      • ed25519(更安全高效)
      • ecdsa(椭圆曲线算法)
    • 示例:
      ssh-keygen -t ed25519
      
  2. -b <密钥长度>

    • 设置密钥的位数(仅对 RSA/ECDSA 有效):
      • RSA 推荐 4096 位:-b 4096
      • ECDSA 推荐 384 位:-b 384
    • 示例:
      ssh-keygen -t rsa -b 4096
      
  3. -C "<注释>"

    • 添加密钥注释(通常用邮箱标识所有者)
    • 示例:
      ssh-keygen -C "your_email@example.com"
      
  4. -f "<文件路径>"

    • 指定密钥保存路径和文件名(管理多密钥必备
    • 示例:
      ssh-keygen -f ~/.ssh/github_key  # 生成私钥 github_key 和公钥 github_key.pub
      
  5. -N "<密码>"

    • 为私钥设置加密密码(增强安全性)
    • 示例:
      ssh-keygen -N "my_secure_password"
      
  6. -p

    • 修改现有私钥的密码(会提示输入原密码)
    • 示例:
      ssh-keygen -p -f ~/.ssh/id_rsa
      

三、操作流程示例

场景:为 GitHub 生成专用密钥

# 步骤 1:生成密钥对
ssh-keygen -t ed25519 -C "github@example.com" -f ~/.ssh/github_key

# 步骤 2:按提示操作
Enter passphrase (empty for no passphrase): [输入密码或直接回车]
> 生成文件:github_key(私钥)和 github_key.pub(公钥)

# 步骤 3:将公钥添加到 GitHub
cat ~/.ssh/github_key.pub  # 复制输出内容到 GitHub SSH Keys 设置

四、多密钥管理(关键配置)

当存在多个密钥(如 GitHub/GitLab/服务器)时,需配置 ~/.ssh/config 文件:

# GitHub 专用密钥
Host github.com
  HostName github.com
  IdentityFile ~/.ssh/github_key  # 指定私钥路径
  User git

# GitLab 专用密钥
Host gitlab.com
  HostName gitlab.com
  IdentityFile ~/.ssh/gitlab_key
  User git

# 通用默认密钥(可选)
Host *
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_ed25519  # 默认密钥

五、其他实用命令
  1. 查看公钥指纹(验证密钥):

    ssh-keygen -l -f ~/.ssh/github_key.pub
    
    • -l:显示密钥指纹(SHA256 摘要)
  2. 转换密钥格式(如 PEM 转 OPENSSH):

    ssh-keygen -p -m PEM -f keyfile
    
  3. 删除缓存的密钥

    ssh-add -D  # 清除 ssh-agent 中所有密钥
    

六、注意事项
  1. 文件权限

    • 私钥权限必须为 600
      chmod 600 ~/.ssh/*
      
    • config 文件权限为 644
      chmod 644 ~/.ssh/config
      
  2. 密码安全性

    • 强烈建议用 -N 为私钥设置密码,避免泄露导致风险。
  3. 覆盖确认

    • 若密钥文件已存在,会提示 Overwrite (y/n)?,输入 y 强制替换。

常见问题解决

  • 问题:密钥生成后连接失败
    检查 ~/.ssh/config 中的 Host 配置是否匹配远程地址。

  • 问题:提示 Permissions 0644 are too open
    执行 chmod 600 ~/.ssh/your_key 修复权限。

  • 问题:多平台密钥冲突
    确保每个平台在 config 中有独立 Host 块并指定 IdentityFile










7️⃣ 参考 7

ssh-keygen 是 OpenSSH 套件中用于生成、管理和转换 SSH 密钥对的工具,支持 RSA、DSA、ECDSA、Ed25519 等算法。以下是其核心功能和使用详解:


一、基本用法

  1. 生成密钥对
    默认生成 RSA 密钥(推荐 4096 位):

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
    • -t:指定密钥类型(如 rsaed25519ecdsa
    • -b:密钥长度(仅对部分算法有效)
    • -C:添加注释(通常为邮箱或用途)

    生成文件默认存储在 ~/.ssh/ 目录下:

    • id_rsa:私钥(需严格保密)
    • id_rsa.pub:公钥(可公开分发)
  2. 密钥格式转换

    • 导入其他格式密钥(如 PuTTY 的 .ppk):
      ssh-keygen -i -m PKCS8 -f key.ppk > id_rsa
      
    • 导出为指定格式(如 PEM):
      ssh-keygen -m PEM -f ~/.ssh/id_rsa
      

二、核心参数与功能

参数说明
-f <file>指定密钥文件路径(默认生成 id_rsaid_rsa.pub
-N <pass>设置私钥密码(保护私钥,防止泄露后被滥用)
-p修改已有私钥的密码
-y从私钥提取公钥内容
-l显示公钥指纹(用于校验密钥一致性)
-R <host>known_hosts 删除指定主机的公钥记录
-A自动生成默认密钥类型(RSA/Ed25519/ECDSA)

三、使用场景

  1. SSH 免密登录

    • 将公钥复制到远程服务器的 ~/.ssh/authorized_keys
      ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
      
    • 验证权限:
      • .ssh 目录权限:700
      • authorized_keys 文件权限:600
  2. Git 仓库认证

    • 生成密钥后,将公钥添加到 Git 托管平台(如 GitHub、GitLab)的 SSH 密钥设置中。
    • 使用私钥克隆仓库:
      git clone git@github.com:user/repo.git
      
  3. 安全审计

    • 检测弱密钥:
      ssh-keygen -T ~/.ssh/id_rsa
      
    • 验证密钥完整性:
      ssh-keygen -w ~/.ssh/id_rsa -W "verify"
      

四、安全注意事项

  1. 密钥管理

    • 私钥必须严格保密,避免泄露。
    • 推荐使用强密码(Passphrase)保护私钥。
    • 定期轮换密钥(如每 90 天)。
  2. 权限设置

    • .ssh 目录权限:700
    • 私钥文件权限:600
    • 公钥文件权限:644
  3. 算法选择

    • RSA:兼容性广,推荐 4096 位。
    • Ed25519:安全性高,性能优(OpenSSH 6.5+ 支持)。
    • ECDSA:平衡安全性与性能,需服务器支持。

五、常见问题

  1. 权限错误
    若提示 Permission denied,检查 .ssh 目录和文件的权限是否合规。

  2. 密钥覆盖
    生成密钥时若文件已存在,需使用 -f 指定新路径或覆盖现有文件。

  3. 密钥格式兼容性
    使用 -m 参数指定格式(如 PEMOpenSSH)以适配不同系统。


通过合理配置 ssh-keygen,可显著提升远程登录和代码托管的安全性,避免密码泄露风险。具体操作细节可参考官方网页或结合实际场景调整参数。










8️⃣ 参考 8

以下是对 ssh-keygen 命令的详细解析,涵盖其核心功能、常用操作及安全实践,综合自多篇权威资料:


🔐 一、功能概述

ssh-keygen 是 OpenSSH 提供的密钥管理工具,用于生成、转换和管理 SSH 认证密钥对(公钥 + 私钥),实现安全的无密码登录和加密通信。

  • 核心作用:替代传统密码认证,提升远程登录的安全性和便捷性。
  • 密钥类型:支持 RSA(默认)、DSA(已逐渐淘汰)、ECDSA、Ed25519(推荐)等算法。

⚙️ 二、基础用法与选项

1. 生成密钥对

bash ssh-keygen -t <算法类型> -b <密钥长度> -C "注释" -f <输出路径>

  • 常用参数:
  • -t rsa | ed25519:指定密钥类型(推荐 Ed25519 或 RSA-4096)。
  • -b 4096:设置 RSA 密钥长度(默认 2048,4096 更安全)。
  • -C "备注":添加注释(如邮箱),便于识别密钥用途。
  • -f ~/.ssh/id_rsa:自定义私钥存储路径(默认 ~/.ssh/id_rsa)。
  • 生成流程:
  • 执行命令后需确认存储路径、设置私钥口令(Passphrase)(可选但强烈建议)。
  • 生成文件:
  • 私钥:~/.ssh/id_rsa(严格保密,权限需为 600)⚠️。
  • 公钥:~/.ssh/id_rsa.pub(可公开分发)。
2. 密钥管理操作
操作命令示例用途
🔑 修改私钥口令ssh-keygen -p -f ~/.ssh/id_rsa更新私钥保护密码(需验证旧密码)
🔍 查看公钥指纹ssh-keygen -l -f ~/.ssh/id_rsa.pub验证密钥真实性(防篡改)
🔄 转换密钥格式ssh-keygen -e -m PEM -f id_rsa.pub导出为 OpenSSL/PKCS 格式
🗑️ 删除已知主机记录ssh-keygen -R hostname清除 known_hosts 中旧密钥
3. 密钥部署与免密登录
  1. 将公钥部署到远程服务器: bash ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
    → 自动追加公钥到服务器的 ~/.ssh/authorized_keys。
  2. 验证免密登录: bash ssh user@remote_host
    → 若配置成功,直接登录(需输入私钥口令,若设置)。

🔒 三、安全实践要点

  1. 私钥权限:
  • 必须限制为 600(仅用户可读写): bash chmod 600 ~/.ssh/id_rsa
    否则 SSH 会拒绝使用(避免未授权访问)。
  1. 口令短语(Passphrase):
  • 强烈建议设置:即使私钥泄露,仍需口令解密。
  • 要求:长度 10-30 字符,混合大小写/数字/符号(避免常见短语)。
  1. 文件权限链:
  • ~/.ssh 目录权限应为 700
  • authorized_keys 文件权限应为 600 → 防止其他用户篡改密钥。

⚠️ 四、常见问题解决

  • Permission denied (publickey):
  • 检查私钥权限是否为 600
  • 确认公钥已正确写入服务器的 authorized_keys。
  • 兼容性问题:
  • 旧系统(如不支持 Ed25519)改用 RSA: bash ssh-keygen -t rsa -b 4096 -C "fallback_key"
  • 密钥遗忘或泄露: → 重新生成密钥对,并更新所有关联服务器的 authorized_keys(无法恢复口令)。

💎 五、扩展用途

  • 主机密钥管理:系统管理员可用其生成服务器的 SSH 主机密钥。
  • 证书转换:支持 PKCS#11 格式与 OpenSSH 密钥互转(-i/-e)。

建议结合实操练习加深理解,可通过 man ssh-keygen 查阅完整选项。遇到复杂场景时,注意备份原始密钥并逐步验证配置。










9️⃣ 参考 9

ssh-keygen 是 SSH 协议中用于生成、管理和转换 SSH 密钥对的工具,常用于配置免密登录(如 SSH 服务器、GitHub/GitLab 等)。以下是其核心功能和使用详解:


1. 生成密钥对(基础命令)

ssh-keygen -t <密钥类型> -b <密钥长度> -C "注释"
  • 常用参数
    • -t:密钥类型(默认 rsa),可选值:
      • rsa:传统 RSA 算法(推荐 -b 4096
      • ed25519:更安全高效的椭圆曲线算法(推荐)
      • ecdsa:椭圆曲线算法(兼容旧系统)
    • -b:密钥长度(如 RSA 推荐 4096,Ed25519 固定长度无需指定)
    • -C:注释(一般填写用途,如邮箱或服务器信息)
    • -f:指定密钥保存路径(默认 ~/.ssh/id_<类型>

示例

# 生成默认的 RSA 密钥(~/.ssh/id_rsa)
ssh-keygen

# 生成 Ed25519 密钥(更推荐)
ssh-keygen -t ed25519 -C "my_key_for_github"

# 指定自定义路径和密钥长度
ssh-keygen -t rsa -b 4096 -f ~/.ssh/my_custom_key

2. 密钥文件说明

生成的密钥对包含两个文件:

  • 私钥(如 id_rsaid_ed25519):
    • 必须严格保密,权限需设为 600chmod 600 ~/.ssh/id_rsa)。
  • 公钥(如 id_rsa.pubid_ed25519.pub):
    • 可公开分发,需添加到目标服务器的 ~/.ssh/authorized_keys 文件中。

3. 常见使用场景

(1) 配置免密登录到服务器
  1. 生成密钥对(若尚未生成)。
  2. 将公钥上传到服务器:
    ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
    
    或手动追加公钥到服务器的 ~/.ssh/authorized_keys
(2) 配置 Git 服务(GitHub/GitLab)
  1. 生成密钥对(如 github_ed25519)。
  2. 将公钥内容粘贴到 Git 服务的 SSH Keys 配置页面。
  3. 配置 Git 客户端使用指定私钥:
    # ~/.ssh/config 中添加:
    Host github.com
      IdentityFile ~/.ssh/github_ed25519
    

4. 其他实用操作

(1) 修改密钥密码
ssh-keygen -p -f ~/.ssh/id_rsa
  • 为现有密钥添加或更新密码(passphrase)。
(2) 转换密钥格式
# 将 OpenSSH 私钥转为 PEM 格式(兼容其他工具)
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
(3) 删除密钥的已知主机记录
ssh-keygen -R server_ip
  • 当服务器公钥变更导致连接失败时,清除旧记录。

5. 安全注意事项

  1. 私钥权限
    • 确保私钥权限为 600.ssh 目录权限为 700
  2. 密码保护
    • 生成密钥时建议设置密码(passphrase),避免私钥泄露后被直接使用。
  3. 密钥备份
    • 私钥建议加密备份,公钥可随意分发。

6. 扩展知识

  • 代理转发:使用 ssh-agent 管理密钥密码,避免频繁输入:
    eval $(ssh-agent)
    ssh-add ~/.ssh/id_ed25519
    
  • 多密钥管理:通过 ~/.ssh/config 为不同主机指定不同密钥:
    Host server1
      HostName server1.example.com
      User user1
      IdentityFile ~/.ssh/server1_key
    
    Host github.com
      User git
      IdentityFile ~/.ssh/github_key
    

掌握 ssh-keygen 可以极大提升 SSH 连接的效率和安全性,特别是在管理多服务器或 Git 服务时。










🔟 参考 10

ssh-keygen 参数详解:完整指南

一、密钥生成参数
1. -t:指定密钥类型
ssh-keygen -t ed25519  # 推荐:现代椭圆曲线算法(2013年)
ssh-keygen -t rsa -b 4096  # 兼容:RSA算法,指定4096位长度
ssh-keygen -t ecdsa -b 521  # 椭圆曲线DSA,可选256/384/521位
ssh-keygen -t dsa  # 不推荐:DSA算法(已被弃用,<=1024位)
  • 推荐配置:优先使用 ed25519,RSA 仅用于兼容旧系统
2. -b:指定密钥长度(比特位)
ssh-keygen -t rsa -b 4096  # RSA推荐至少2048位,敏感系统用4096位
ssh-keygen -t ecdsa -b 521  # ECDSA可选256/384/521位(521位安全性最高)
# ed25519无需指定-b,固定256位安全强度
  • 安全建议:RSA 低于 2048 位存在安全风险(如 1024 位已被破解)
3. -f:指定密钥文件路径
ssh-keygen -f ~/.ssh/custom_key  # 保存到自定义路径
ssh-keygen -f /etc/ssh/ssh_host_rsa_key  # 系统主机密钥路径
  • 注意:私钥文件(如 custom_key)需严格权限控制(chmod 600
4. -C:添加注释(Comment)
ssh-keygen -C "admin@example.com"  # 公钥中嵌入邮箱注释
ssh-keygen -C "web-server-prod"  # 用于标识服务器用途的注释
  • 用途:在 ~/.ssh/authorized_keys 中便于识别不同密钥用途
5. -N:设置私钥密码(Passphrase)
ssh-keygen -N 'strong_password' -f ~/.ssh/secure_key  # 设置密码
ssh-keygen -N '' -f /tmp/automation_key  # 无密码(自动化场景)
  • 安全建议:始终为私钥设置强密码,无密码密钥仅限自动化脚本使用
二、密钥管理参数
1. -P:修改现有私钥密码
ssh-keygen -P 'new_password' -f ~/.ssh/id_rsa  # 修改密码
ssh-keygen -P '' -f ~/.ssh/id_rsa  # 移除密码(谨慎操作)
  • 操作步骤:会先要求输入旧密码,再设置新密码
2. -y:从私钥提取公钥
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub  # 重建公钥
ssh-keygen -y -f /etc/ssh/ssh_host_ed25519_key  # 查看主机公钥内容
  • 应用场景:公钥文件丢失时,可通过私钥重新生成公钥
3. -l:显示密钥指纹(Fingerprint)
ssh-keygen -l -f ~/.ssh/id_ed25519.pub  # 显示SHA256指纹
ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub  # 显示MD5指纹(兼容旧系统)
  • 输出示例
    256 SHA256:XXXXXXXX... user@host (ED25519)
    
4. -B:显示密钥的 Bubble Babble 编码
ssh-keygen -B -f ~/.ssh/id_rsa.pub
# 输出类似:xexax-wofyr-ludak-sonax-gixex
  • 用途:便于人类记忆和口头传递密钥验证信息
三、高级功能参数
1. -A:自动生成所有类型的主机密钥
sudo ssh-keygen -A  # 为SSH服务生成所有支持的主机密钥
# 等效于生成ed25519、rsa、ecdsa等类型的主机密钥
  • 应用场景:新安装SSH服务后初始化主机密钥
2. -T:测试密钥的安全性
ssh-keygen -t rsa -b 2048 -f test_key
ssh-keygen -T /dev/stdout -f test_key  # 测试密钥抗暴力破解能力
  • 输出:显示密钥在不同攻击模型下的估计破解时间
3. -c:修改密钥注释
ssh-keygen -c -C "new_comment@example.com" -f ~/.ssh/id_rsa
  • 注意:仅修改公钥中的注释字段,不影响密钥对本身
4. -F:在 known_hosts 中查找主机
ssh-keygen -F example.com  # 查找example.com的主机密钥
ssh-keygen -F 192.168.1.1  # 按IP查找
  • 输出:显示匹配的主机密钥条目或 # not found
5. -R:从 known_hosts 删除主机密钥
ssh-keygen -R example.com  # 删除旧的/错误的主机密钥
  • 场景:当服务器重装系统后,需要清除本地缓存的旧指纹
四、证书相关参数(SSH CA)
1. -s:使用 CA 签署用户/主机证书
# 签署用户证书
ssh-keygen -s /path/to/ca_key -I user_id -n username -V +52w user_key.pub

# 签署主机证书
ssh-keygen -s /path/to/ca_key -h -I server_id -n server1,server2 -V +1y host_key.pub
  • 参数说明
    • -I:证书标识符(唯一ID)
    • -n:允许的用户名/主机名(逗号分隔)
    • -V:有效期(如 +52w 表示52周)
    • -h:签署主机证书(而非用户证书)
2. -L:查看证书详情
ssh-keygen -L -f user_key-cert.pub  # 查看证书信息
  • 输出:显示证书有效期、主体、权限等详细信息
五、格式转换参数
1. -p:更改密钥格式(OpenSSH/PuTTY)
# OpenSSH私钥 → PuTTY (.ppk) 格式(需putty-tools)
puttygen ~/.ssh/id_rsa -o id_rsa.ppk

# PuTTY → OpenSSH格式
puttygen id_rsa.ppk -O private-openssh -o ~/.ssh/id_rsa
  • 应用场景:在 Windows(PuTTY)和 Linux 之间迁移密钥
2. -m:指定密钥格式
ssh-keygen -m PEM -f rsa_key  # 生成PEM格式密钥(兼容OpenSSL)
  • 常见格式RFC4716(OpenSSH默认)、PEM(OpenSSL)
六、其他实用参数
1. -q:安静模式(不显示进度信息)
ssh-keygen -q -t ed25519 -f /tmp/auto_key -N ''  # 脚本自动化
2. -v:详细模式(显示生成过程)
ssh-keygen -v -t rsa -b 4096  # 调试模式,显示密钥生成细节
3. --version:显示版本信息
ssh-keygen --version  # 查看OpenSSH版本
七、参数组合最佳实践
  1. 生成高强度 RSA 密钥(兼容旧系统)
ssh-keygen -t rsa -b 4096 -C "admin@example.com" -f ~/.ssh/id_rsa
  1. 创建无密码 ED25519 密钥(自动化)
ssh-keygen -t ed25519 -N '' -f /etc/ansible/keys/ansible_key
  1. 重置服务器主机密钥(防 MITM 攻击)
sudo rm /etc/ssh/ssh_host_*  # 删除现有主机密钥
sudo ssh-keygen -A  # 重新生成所有类型主机密钥
sudo systemctl restart sshd  # 重启SSH服务
  1. 使用 CA 签署短期用户证书
ssh-keygen -s ca_key -I user1 -n user1 -V +1d user1_key.pub
八、安全注意事项
  1. 密钥长度选择

    • RSA:≥2048 位(敏感系统建议 4096 位)
    • ED25519:固定 256 位(无需指定 -b
    • ECDSA:推荐 521 位
  2. 权限严格控制

    • 私钥文件:chmod 600
    • 公钥文件:chmod 644
    • .ssh 目录:chmod 700
  3. 密码策略

    • 使用 ssh-agent 缓存密码(避免重复输入)
    • 定期更换私钥密码(至少每年一次)
  4. 证书优势

    • 使用 SSH CA 证书替代传统密钥对,可实现批量管理和自动撤销
    • 证书有效期可控,降低长期密钥泄露风险

掌握这些参数后,你可以根据不同场景灵活生成和管理 SSH 密钥,大幅提升远程连接的安全性和管理效率。