讲解"/etc/ssh/sshd_config "的"HostKey /etc/ssh/ssh_host_ed25519_key" 笔记250702

3 阅读15分钟

讲解"/etc/ssh/sshd_config "的"HostKey /etc/ssh/ssh_host_ed25519_key" 笔记250702

好的,我们来详细讲解 /etc/ssh/sshd_config 文件中的 HostKey /etc/ssh/ssh_host_ed25519_key 配置项。

核心作用:

这行配置指令 明确告诉 SSH 守护进程 (sshd) 使用位于 /etc/ssh/ssh_host_ed25519_key 的文件作为服务器的主机密钥对中的私钥文件,用于基于 Ed25519 算法的服务器身份验证。

深入解析:

  1. HostKey 指令:

    • 这是 sshd_config 文件中用于指定服务器主机密钥(Host Key)私钥文件路径的指令。
    • 主机密钥是 SSH 协议安全性的基石。每个 SSH 服务器都拥有一个(或多个)独特的、长期存在的密钥对(公钥 + 私钥)。
    • 当客户端第一次连接服务器时,服务器会将其主机密钥的公钥发送给客户端。客户端会将这个公钥保存在本地(通常是 ~/.ssh/known_hosts 文件)作为该服务器身份的“指纹”或“身份证”。
    • 在后续连接中,客户端会用保存的公钥来验证服务器发送过来的签名,确保它连接的是同一个服务器,而不是中间人伪装的服务器(防止“中间人攻击”)。
  2. /etc/ssh/ssh_host_ed25519_key

    • 路径: 这是服务器主机密钥对中的私钥文件在文件系统中的标准位置。
    • 文件类型: 这是一个私钥文件。它包含高度敏感的信息,必须受到严格保护(权限通常设置为 600,即 -rw-------,且所有者是 root)。
    • 命名含义:
      • ssh_host_ed25519_key: 表明这个私钥是用于 ed25519 算法的服务器主机密钥。
      • 对应的公钥文件通常位于同一目录下,文件名是 ssh_host_ed25519_key.pub。这个 .pub 文件是服务器发送给客户端进行身份验证的部分,可以(且应该)安全地分发。
  3. ed25519 算法:

    • 类型: 这是一种基于椭圆曲线密码学(ECC)的公钥签名算法。
    • 优点:
      • 安全性高: 目前被认为是非常安全的算法,能抵抗已知的密码分析攻击。
      • 速度快: 密钥生成、签名和验证操作都非常高效,比传统的 RSA(在相同安全强度下)快得多。
      • 密钥短: 提供相当于 RSA 3072-4096 位密钥的安全强度,但密钥本身长度只有 256 位(公钥和签名也都很短)。这使得传输和存储更高效。
    • 现代推荐: Ed25519 是当前最推荐用于 SSH 的密钥类型,优先于旧的 RSA(尤其是短于 3072 位的 RSA)和 DSA(已基本被弃用)。
  4. 为什么需要这行配置?

    • 显式指定: 虽然 sshd 在启动时通常会尝试自动加载 /etc/ssh/ 目录下存在的、格式正确的 ssh_host_*_key 文件(如 ssh_host_rsa_key, ssh_host_ecdsa_key, ssh_host_ed25519_key),但显式使用 HostKey 指令列出它们有以下好处:
      • 明确性: 清晰告知 sshd 管理员希望使用哪些特定的主机密钥算法。
      • 顺序控制: 指令出现的顺序决定了 sshd 向客户端提供算法时的优先级(通常靠前的优先级更高)。客户端会优先选择双方都支持且列表中靠前的算法。
      • 禁用旧算法: 如果配置文件中只列出 HostKey /etc/ssh/ssh_host_ed25519_key,并注释掉或删除旧的 ssh_host_rsa_keyssh_host_ecdsa_keyHostKey 行,那么 sshd不会使用那些旧密钥。这是提升安全性的重要步骤(禁用弱算法如过短的 RSA)。
      • 错误排查: 如果密钥文件路径非标准或名称特殊,必须用 HostKey 显式指定。
      • 确保加载: 避免因文件权限问题或其他原因导致自动加载失败而没有密钥可用(虽然显式指定失败同样会导致 sshd 无法启动)。
  5. 典型配置场景:

    • 现代安全配置:/etc/ssh/sshd_config 中,你会看到类似这样的一或多个 HostKey 行,按优先级排列:
      HostKey /etc/ssh/ssh_host_ed25519_key  # 最优先推荐使用 Ed25519
      #HostKey /etc/ssh/ssh_host_rsa_key      # 较安全的 RSA (e.g., 3072/4096位) 作为备选
      #HostKey /etc/ssh/ssh_host_ecdsa_key    # ECDSA (如 ecdsa-sha2-nistp256) 也可作为备选
      
      在这个例子中,管理员明确启用了 ed25519,禁用了旧的 RSA 和 ECDSA(通过注释 #)。更常见的做法是保留一个足够强的 RSA 作为兼容性备选。
  6. 客户端视角:

    • 当客户端连接时,sshd 会根据配置的 HostKey 行(及其顺序),告诉客户端它支持哪些主机密钥算法(如 ssh-ed25519, rsa-sha2-256, rsa-sha2-512, ecdsa-sha2-nistp256)。
    • 客户端从中选择一个它自己支持且最偏好的算法(通常也会优先选择 ed25519)。
    • 服务器然后使用该算法对应的私钥(本例中的 /etc/ssh/ssh_host_ed25519_key)进行签名操作来证明自己的身份。
  7. 重要注意事项:

    • 私钥安全: /etc/ssh/ssh_host_ed25519_key 包含服务器的私钥,绝对不能泄露!务必确保其权限为 600 (-rw-------) 且所有者是 root
    • 公钥分发: 客户端连接的 known_hosts 文件中存储的是对应的公钥(来自 ssh_host_ed25519_key.pub 的内容)。
    • 修改后需重启: 更改 sshd_config 文件(包括 HostKey 行)后,必须重新加载或重启 sshd 服务 (sudo systemctl reload sshdsudo systemctl restart sshd) 才能生效。
    • 密钥轮换: 虽然主机密钥是长期存在的,但出于安全最佳实践,应定期(如每年)轮换主机密钥。轮换时需要生成新密钥对,更新 sshd_config 中的 HostKey 行(或添加新行),将新的公钥分发给所有客户端(或让客户端在首次连接新密钥时确认),并安全地删除旧密钥。轮换 ed25519 密钥的命令通常是 sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" (注意这会覆盖旧文件!操作前务必备份并理解后果)。

总结:

HostKey /etc/ssh/ssh_host_ed25519_key 这行配置是 SSH 服务器安全配置的核心部分。它:

  1. 指定了服务器用于身份验证的私钥文件位置。
  2. 强制 sshd 使用现代、安全且高效的 Ed25519 算法。
  3. 有助于控制服务器向客户端提供的算法及其优先级
  4. 禁用老旧、不安全算法的关键手段(通过只保留此配置并注释掉其他 HostKey 行)。
  5. 保障了客户端能够验证它连接的是真正的目标服务器,而不是冒充者。

理解和正确配置 HostKey 指令,特别是优先使用 Ed25519,对于维护 SSH 服务的安全性和性能至关重要。










1️⃣ 参考 1

关于 /etc/ssh/sshd_config 中的 HostKey 指令与 /etc/ssh/ssh_host_ed25519_key 文件的解析

一、HostKey 指令的作用与配置
  1. 核心功能
    HostKey 是 OpenSSH 服务器配置文件 /etc/ssh/sshd_config 中的关键指令,用于指定 SSH 服务使用的私钥文件路径。这些私钥是服务器身份认证的核心,通过非对称加密技术(如 RSA、ECDSA、Ed25519)实现以下功能:

    • 身份验证:向客户端证明服务器合法性,防止中间人攻击。
    • 加密协商:在 SSH 连接建立阶段,服务器用私钥解密客户端发送的随机数,生成会话密钥,保障后续通信安全。
  2. 配置语法
    /etc/ssh/sshd_config 中,HostKey 的典型配置如下:

    # 指定协议版本 2 的密钥
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    
    • 多密钥支持:可同时配置多种算法密钥(如 RSA、ECDSA、Ed25519),以兼容不同客户端。
    • 协议版本:SSH-1 和 SSH-2 的密钥需分开配置(SSH-1 已淘汰,建议仅使用 SSH-2)。
  3. 支持的密钥类型

    密钥类型文件路径算法特点
    RSA/etc/ssh/ssh_host_rsa_key经典算法,兼容性好,但速度较慢
    ECDSA/etc/ssh/ssh_host_ecdsa_key基于椭圆曲线,性能优于 RSA
    Ed25519/etc/ssh/ssh_host_ed25519_key现代算法,安全性高,性能最佳

    推荐优先使用 Ed25519,因其抗攻击性强且计算效率高。

二、/etc/ssh/ssh_host_ed25519_key 文件详解
  1. 文件作用

    • 私钥文件:存储服务器基于 Ed25519 算法生成的私钥,仅限 root 用户读写(权限 600)。
    • 安全职责
      • 服务器身份认证:客户端首次连接时,公钥(ssh_host_ed25519_key.pub)会被缓存到客户端的 ~/.ssh/known_hosts 文件,后续连接通过比对公钥验证服务器身份。
      • 加密通信:参与会话密钥协商,确保数据传输的机密性和完整性。
  2. 生成与维护

    • 自动生成:安装 OpenSSH 服务器时,系统默认生成 Ed25519 密钥对(私钥 + 公钥)。
    • 手动生成(如需重建):
      ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
      
      • -t ed25519:指定算法类型。
      • -f:指定私钥路径。
      • -N "":设置空密码短语(避免交互输入)。
  3. 安全注意事项

    • 权限严格管控:私钥文件权限必须为 600(仅 root 可读写),防止泄露:
      chmod 600 /etc/ssh/ssh_host_ed25519_key
      
    • 定期轮换密钥:若怀疑密钥泄露,需重新生成并更新所有客户端的 known_hosts 条目。
    • 备份与恢复:备份密钥文件时,需确保存储介质安全,避免物理丢失或未授权访问。
三、安全最佳实践
  1. 配置优化建议

    • 禁用弱算法:在 /etc/ssh/sshd_config 中注释掉旧算法(如 RSA 1024 位):
      # HostKey /etc/ssh/ssh_host_rsa_key  # 若无需兼容旧客户端,可禁用
      
    • 强制使用 Ed25519:通过防火墙或配置限制客户端仅能使用 Ed25519 连接。
  2. 日志与监控

    • 启用详细日志记录,便于审计异常连接:
      LogLevel VERBOSE
      
    • 监控 /var/log/auth.log(或 /var/log/secure)中的 SSH 登录尝试。
  3. 客户端兼容性

    • 保留至少两种密钥类型(如 Ed25519 + RSA),以兼容不同版本的 OpenSSH 客户端。
四、故障排查与维护
  1. 权限异常处理

    • 若私钥权限被误改为 640(组可读),SSH 服务将拒绝启动。修复命令:
      chmod 600 /etc/ssh/ssh_host_ed25519_key
      
    • 使用脚本定期检查所有密钥文件权限:
      #!/bin/bash
      KEY_FILES=(
        "/etc/ssh/ssh_host_rsa_key"
        "/etc/ssh/ssh_host_ecdsa_key"
        "/etc/ssh/ssh_host_ed25519_key"
      )
      for file in "${KEY_FILES[@]}"; do
        if [ "$(stat -c %a "$file")" != "600" ]; then
          echo "警告:$file 权限异常,需修复为 600"
          chmod 600 "$file"
        fi
      done
      
  2. 服务重启与验证

    • 修改配置后重启 SSH 服务:
      systemctl restart sshd
      
    • 验证服务状态:
      systemctl status sshd  # 确保状态为 active (running)
      
总结
  • HostKey 指令:通过指定多类型私钥文件,确保 SSH 服务的身份认证与加密通信安全。
  • ssh_host_ed25519_key:作为现代高性能密钥,需严格管控权限并定期轮换,以抵御潜在攻击。
  • 安全强化:结合防火墙规则、日志监控和客户端兼容性策略,构建纵深防御体系。










2️⃣ 参考 2

/etc/ssh/sshd_configHostKey /etc/ssh/ssh_host_ed25519_key 的详解

在 OpenSSH 服务器的配置文件 /etc/ssh/sshd_config 中,HostKey 指令用于指定 SSH 服务器使用的 主机密钥文件路径。这些密钥是 SSH 协议中用于验证服务器身份的核心部分,确保客户端能够安全地连接到正确的服务器,防止中间人攻击(MITM)。以下是关于 HostKey /etc/ssh/ssh_host_ed25519_key 的详细讲解:


1. HostKey 的作用

  • 身份验证
    当客户端通过 SSH 连接到服务器时,服务器会使用 HostKey 指定的私钥生成签名,并发送给客户端。客户端通过验证该签名确认服务器身份。
  • 加密通信
    SSH 协议使用主机密钥作为基础,建立安全的加密通道(如 Diffie-Hellman 密钥交换)。
  • 防止中间人攻击
    客户端会检查服务器的公钥是否与之前存储的指纹一致。如果不一致,客户端会发出警告,提示可能存在中间人攻击。

2. ssh_host_ed25519_key 的算法特点

/etc/ssh/ssh_host_ed25519_keyEd25519 算法 的私钥文件,对应的公钥文件为 /etc/ssh/ssh_host_ed25519_key.pub。Ed25519 是基于椭圆曲线的加密算法,具有以下优势:

  • 高性能
    相比 RSA 或 DSA,Ed25519 的加密和签名速度更快,尤其适合资源受限的环境。
  • 安全性
    256 位的密钥长度提供了与 RSA 4096 位相当的安全性,但密钥更短。
  • 现代标准
    Ed25519 是 SSH 2.0 协议推荐的算法之一,广泛用于现代系统。

3. HostKey 配置详解

/etc/ssh/sshd_config 中,HostKey 行的语法如下:

HostKey /path/to/key_file

例如:

HostKey /etc/ssh/ssh_host_ed25519_key
  • 默认配置
    OpenSSH 默认会自动加载以下密钥文件(如果存在):
    /etc/ssh/ssh_host_rsa_key       # RSA 算法(SSH 1 和 SSH 2)
    /etc/ssh/ssh_host_dsa_key       # DSA 算法(SSH 2,已不推荐)
    /etc/ssh/ssh_host_ecdsa_key     # ECDSA 算法(SSH 2)
    /etc/ssh/ssh_host_ed25519_key   # Ed25519 算法(SSH 2)
    
  • 启用/禁用
    如果注释掉某一行(如 #HostKey /etc/ssh/ssh_host_ed25519_key),则表示禁用该算法的主机密钥。建议保留 Ed25519 密钥以提高安全性。

4. 生成和管理 Ed25519 密钥

如果服务器没有自动生成 Ed25519 密钥,需要手动创建:

  1. 生成密钥

    sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
    
    • -t ed25519:指定使用 Ed25519 算法。
    • -f:指定输出文件路径。
    • 系统会生成私钥文件(ssh_host_ed25519_key)和公钥文件(ssh_host_ed25519_key.pub)。
  2. 设置权限

    • 私钥文件权限必须严格限制为 600
      sudo chmod 600 /etc/ssh/ssh_host_ed25519_key
      
    • 公钥文件权限可以宽松些,但通常建议设置为 644
      sudo chmod 644 /etc/ssh/ssh_host_ed25519_key.pub
      
  3. 验证密钥指纹: 使用 ssh-keygen 命令生成公钥的 SHA256 指纹,确保与客户端记录的一致:

    ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
    

    输出示例:

    256 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ssh-ed25519 (ED25519)
    

5. 配置建议

  • 优先使用 Ed25519
    由于其高效性和安全性,建议将 HostKey 配置为优先使用 Ed25519 密钥。
  • 禁用过时算法
    注释掉旧版算法(如 DSA)的 HostKey 行,以避免安全风险:
    #HostKey /etc/ssh/ssh_host_dsa_key
    
  • 定期更新密钥
    虽然 Ed25519 密钥不需要频繁更换,但建议在服务器重建或安全事件后重新生成密钥。

6. 重启 SSH 服务

修改 /etc/ssh/sshd_config 后,需重启 SSH 服务使配置生效:

sudo systemctl restart sshd
# 或旧版系统
sudo service sshd restart

7. 客户端验证

当客户端首次连接服务器时,会显示服务器的 Ed25519 公钥指纹。用户需手动确认指纹是否与预期一致,以确保连接的安全性。例如:

ssh user@server_ip

输出示例:

The authenticity of host 'server_ip (server_ip)' can't be established.
ED25519 key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)?

8. 常见问题

  • 连接失败
    如果 HostKey 文件不存在或权限错误,SSH 服务可能无法启动。检查日志(/var/log/securejournalctl -u sshd)以排查问题。
  • 密钥冲突
    确保 HostKey 文件路径与 /etc/ssh/sshd_config 中的配置一致,避免路径错误。

9. 与 Ed25519 的兼容性问题

  • 客户端不支持 Ed25519
    如果客户端(如 Xshell 5)不支持 Ed25519,可尝试以下方法:
    1. 升级客户端
      使用支持 Ed25519 的工具(如 MobaXterm 22.1+ 或 Xshell 6+)。
    2. 修改服务器配置
      /etc/ssh/sshd_config 中添加支持旧算法(如 RSA):
      HostKeyAlgorithms +ssh-rsa,ssh-dss
      
      然后重启 SSH 服务:
      sudo systemctl restart sshd
      
    3. 客户端配置
      在 Xshell 中手动添加支持的算法(如 ssh-rsassh-dss)。

10. 总结

通过合理配置 HostKey 和 Ed25519 密钥,可以显著提升 SSH 服务器的安全性和性能。建议结合其他安全措施(如禁用 root 登录、限制用户访问)进一步加固系统。










3️⃣ 参考 3

/etc/ssh/sshd_config 中 HostKey 配置详解:ed25519 主机密钥

一、HostKey 配置项的核心作用

在 SSH 服务中,HostKeysshd_config 配置文件中的关键参数,其作用是:

  • 指定 SSH 服务器用于身份验证的主机密钥文件路径
  • 当客户端连接服务器时,服务器会发送此密钥供客户端验证其身份
  • 防止中间人攻击(MITM),确保客户端连接到真实的服务器
二、ed25519 主机密钥的技术细节

/etc/ssh/ssh_host_ed25519_key 是典型的 ED25519 算法主机密钥文件,其特点如下:

  1. 算法优势

    • ED25519 是基于 Curve25519 椭圆曲线的数字签名算法
    • 相比传统的 RSA/DSA,它具有:
      • 更高的安全性:同等密钥长度下安全性更高(256 位密钥等效于 3072 位 RSA)
      • 更快的性能:签名和验证速度显著提升
      • 更小的密钥体积:私钥仅 32 字节,公钥 32 字节
  2. 密钥文件结构

    • 私钥文件ssh_host_ed25519_key(权限必须为 600)
    • 公钥文件ssh_host_ed25519_key.pub(客户端验证时使用)
  3. OpenSSH 支持情况

    • 自 OpenSSH 7.0(2014 年)起全面支持 ED25519
    • 目前是推荐使用的现代 SSH 主机密钥算法
三、配置文件中的 HostKey 行解析
# /etc/ssh/sshd_config 中的典型配置
HostKey /etc/ssh/ssh_host_ed25519_key
  • 功能:告诉 SSH 服务器使用 /etc/ssh/ssh_host_ed25519_key 作为 ED25519 算法的主机私钥
  • 多算法支持:SSH 服务器可同时配置多种算法的主机密钥,例如:
    HostKey /etc/ssh/ssh_host_rsa_key    # RSA 密钥(兼容旧客户端)
    HostKey /etc/ssh/ssh_host_ed25519_key # ED25519 密钥(推荐现代配置)
    
四、生成和管理 ed25519 主机密钥
  1. 手动生成新密钥

    # 生成 ED25519 主机密钥对
    ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
    
    # 确保文件权限正确(关键!权限错误会导致 SSH 服务启动失败)
    chmod 600 /etc/ssh/ssh_host_ed25519_key
    chmod 644 /etc/ssh/ssh_host_ed25519_key.pub
    
  2. 系统初始化时的密钥生成

    • 大多数 Linux 发行版在安装 SSH 服务(如 openssh-server)时会自动生成主机密钥
    • 若密钥丢失或需要更新,可通过 dpkg-reconfigure openssh-server(Debian/Ubuntu)或系统初始化工具重新生成
  3. 验证当前使用的主机密钥

    # 查看 SSH 服务器当前配置的主机密钥
    sshd -t -C user=root -C host=localhost -C addr=localhost
    
    # 或通过 SSH 连接时查看(客户端视角)
    ssh -Tv localhost 2>&1 | grep -i "key fingerprint"
    
五、安全注意事项
  1. 密钥保护

    • 主机私钥(ssh_host_ed25519_key)必须严格保护,仅 root 可读写(权限 600)
    • 泄露私钥会导致攻击者伪造服务器身份,引发严重安全风险
  2. 定期轮换密钥

    • 建议每年或服务器权限变更后轮换主机密钥
    • 轮换步骤:
      1. 生成新密钥
      2. 更新 sshd_config 中的 HostKey 配置
      3. 重启 SSH 服务
      4. 通知客户端更新服务器密钥指纹
  3. 客户端兼容性

    • ED25519 算法要求客户端 OpenSSH 版本 ≥ 6.5(2013 年)
    • 若存在旧客户端,需同时保留 RSA 等传统算法的主机密钥
六、配置示例与最佳实践
# 推荐的现代 SSH 主机密钥配置
HostKey /etc/ssh/ssh_host_ed25519_key    # 首选现代算法
HostKey /etc/ssh/ssh_host_rsa_key        # 保留 RSA 兼容旧客户端
# 可移除 DSA 等过时算法(DSA 已被 OpenSSH 弃用)
# HostKey /etc/ssh/ssh_host_dsa_key
总结

HostKey /etc/ssh/ssh_host_ed25519_key 配置使 SSH 服务器能够使用 ED25519 这一高效安全的现代密码学算法。正确配置和管理主机密钥是保障 SSH 服务安全的基础,建议结合服务器安全策略定期更新密钥,并确保密钥文件的权限严格控制。










4️⃣ 参考 4

  1. 关于/etc/ssh/sshd_config文件

    • 这是 SSH 服务端(sshd)的配置文件。SSH(Secure Shell)是一种加密的网络传输协议,用于远程登录、执行命令等操作。sshd_config文件用于定义 SSH 服务器的各种行为和策略,如端口号、认证方式、密钥管理等。
  2. HostKey 配置项

    • HostKey用于指定 SSH 服务器的主机密钥文件的位置。主机密钥是 SSH 服务器用于加密通信和身份验证的密钥对。在 SSH 连接过程中,客户端会检查服务器的主机密钥,以确保连接到正确的服务器并防止中间人攻击。
    • /etc/ssh/ssh_host_ed25519_key是其中一种主机密钥文件,它是采用 Ed25519 算法生成的主机密钥的私钥部分。Ed25519 是一种签名算法,它提供了高安全性和高效的性能特点。
    • 当 SSH 服务器启动时,它会加载这个配置文件中指定的主机密钥文件。如果有多个HostKey配置项,服务器会加载所有指定的密钥文件,这样可以同时支持多种密钥算法,以兼容不同的客户端和安全策略。

例如,在/etc/ssh/sshd_config文件中有以下内容:

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

这表示 SSH 服务器会加载三个主机密钥,分别使用 RSA、ECDSA 和 Ed25519 算法。这些密钥文件通常是在安装和配置 SSH 服务时自动生成的,如果密钥文件丢失或损坏,可能需要重新生成新的密钥来保证 SSH 服务的正常运行和安全性。










5️⃣ 参考 5

SSH服务器主机密钥配置解析

在SSH服务器配置文件/etc/ssh/sshd_config中,HostKey指令用于指定服务器使用的主机私钥文件。配置项HostKey /etc/ssh/ssh_host_ed25519_key的具体含义如下:

1. 核心作用
  • 身份验证:该指令指定服务器使用Ed25519算法生成的私钥文件,用于在SSH连接握手阶段向客户端证明服务器身份
  • 防中间人攻击:客户端首次连接时会记录服务器的公钥指纹,后续连接通过比对密钥防止伪装服务器
  • 协议支持:Ed25519密钥专用于SSH-2协议(现代SSH的标准协议),不兼容SSH-1协议
2. 密钥类型解析
密钥类型算法特点默认路径协议支持
ed25519椭圆曲线算法,密钥短(256位)安全性高/etc/ssh/ssh_host_ed25519_keySSH-2
rsa传统RSA算法,兼容性好/etc/ssh/ssh_host_rsa_keySSH-2
ecdsa椭圆曲线算法,性能均衡/etc/ssh/ssh_host_ecdsa_keySSH-2
dsa已淘汰的算法/etc/ssh/ssh_host_dsa_keySSH-2
rsa1传统算法/etc/ssh/ssh_host_keySSH-1
3. 配置实践建议
  • 多密钥支持:建议同时配置多种密钥增强兼容性:
    HostKey /etc/ssh/ssh_host_ed25519_key
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    
  • 密钥权限:私钥文件必须设置严格权限(仅root可读):
    chmod 600 /etc/ssh/ssh_host_ed25519_key
    
  • 密钥生成:若文件不存在,可用命令生成:
    ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
    
4. 技术优势
  • 安全性:Ed25519抵抗量子计算攻击的能力强于RSA-2048
  • 性能:签名速度比RSA快约4倍,验证速度快约10倍
  • 密钥精简:256位密钥提供相当于RSA-4096的安全性
  • 前向安全:每次会话使用临时密钥交换(ECDH)

注意:修改配置后需重启SSH服务生效:sudo systemctl restart sshd










6️⃣ 参考 6

在SSH服务配置文件/etc/ssh/sshd_config中,HostKey /etc/ssh/ssh_host_ed25519_key是用于定义服务器主机密钥的关键配置项。以下从功能、安全性和操作实践三个维度进行详细解析:


一、功能解析

  1. 主机密钥的作用

    • 身份验证HostKey指定服务器的私钥文件路径,客户端首次连接时会验证该密钥的指纹,确保连接的是目标服务器而非中间人伪造的节点。
    • 加密通信:基于非对称加密算法(如Ed25519),服务器用私钥加密数据,客户端用公钥解密,保障传输过程的安全性。
  2. Ed25519算法的特性

    • 安全性:基于椭圆曲线密码学(ECC),在相同安全强度下密钥长度更短(256位),抗暴力破解能力优于RSA-2048。
    • 性能优势:密钥生成和签名速度更快,资源消耗更低,适合高并发场景(如云服务器集群)。

二、配置操作指南

  1. 生成Ed25519密钥对
    使用ssh-keygen命令生成密钥文件:

    ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
    
    • -t ed25519:指定算法类型
    • -f:指定密钥文件路径(默认路径为/etc/ssh/ssh_host_ed25519_key)。
  2. 配置生效步骤

    • 修改sshd_config文件,确保包含以下行(若未注释):
      HostKey /etc/ssh/ssh_host_ed25519_key
      
    • 重启SSH服务:
      systemctl restart sshd
      
    • 客户端更新信任列表:
      ssh-keygen -R <服务器IP或域名>
      
      首次连接时需手动确认服务器指纹。

三、安全实践建议

  1. 禁用弱算法
    sshd_config中关闭不安全的密钥类型(如DSA、RSA-1024):

    HostKeyAlgorithms ssh-ed25519
    

    避免兼容旧系统导致的安全漏洞。

  2. 密钥管理与监控

    • 定期轮换密钥:建议每6-12个月生成新密钥,替换旧密钥文件并更新客户端信任列表。
    • 权限控制:确保私钥文件权限为600,禁止其他用户读取:
      chmod 600 /etc/ssh/ssh_host_ed25519_key
      
    • 日志审计:通过LogLevel VERBOSE记录密钥变更事件,结合SIEM工具监控异常连接。
  3. 防御中间人攻击

    • 客户端启用StrictHostKeyChecking=yes,避免自动信任未知主机。
    • 使用ssh-keyscan批量采集可信主机指纹,存入/etc/ssh/ssh_known_hosts

四、常见问题排查

  • 连接失败提示Host key verification failed
    原因:服务器密钥变更或IP被其他主机占用。
    解决:

    1. 客户端执行ssh-keygen -R <服务器IP>清除旧记录。
    2. 重新连接并确认新指纹。
  • 服务启动报错Could not load host key
    原因:密钥文件权限错误或路径配置错误。
    解决:

    1. 检查sshd_configHostKey路径是否与实际文件一致。
    2. 修复权限:chown root:root /etc/ssh/ssh_host_ed25519_key

总结

HostKey /etc/ssh/ssh_host_ed25519_key是SSH服务安全性的核心配置,通过采用Ed25519算法实现高强度加密和身份验证。实际部署中需结合密钥轮换、权限管理和日志监控,构建纵深防御体系。对于遗留系统,建议逐步淘汰RSA等旧算法,全面迁移至Ed25519等现代加密标准。










7️⃣ 参考 7

/etc/ssh/sshd_config 配置文件中,HostKey /etc/ssh/ssh_host_ed25519_key 这一行的作用是指定 SSH 服务器(sshd)使用 Ed25519 算法生成的主机密钥文件。以下是详细的解释:


1. 什么是主机密钥(Host Key)?

  • 主机密钥是 SSH 服务器的身份凭证,用于客户端验证服务器的真实性(防止中间人攻击)。
  • 当客户端首次连接服务器时,会记录服务器的公钥。后续连接时,客户端会检查此密钥是否一致。如果密钥变更,客户端会发出警告。

2. Ed25519 算法

  • 安全高效:Ed25519 是一种基于椭圆曲线密码学(EdDSA)的算法,相比传统的 RSA 或 ECDSA 密钥,它在保持高安全性的同时,计算速度更快、密钥更短(仅 256 位)。
  • 现代支持:OpenSSH 从 6.5 版本开始支持 Ed25519,推荐在新系统上优先使用。

3. 配置解析

  • HostKey 指令:用于指定 SSH 服务器使用的主机密钥文件路径。
  • 示例配置
    HostKey /etc/ssh/ssh_host_ed25519_key
    
    • 表示服务器会使用 /etc/ssh/ssh_host_ed25519_key(私钥)和 /etc/ssh/ssh_host_ed25519_key.pub(公钥)作为主机的身份密钥。

4. 典型配置场景

  • 多个密钥支持:服务器可以同时配置多种密钥类型(如 RSA、ECDSA、Ed25519),以提高兼容性。例如:

    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    
    • 客户端会选择其支持的最新算法进行验证。
  • 密钥生成:若文件不存在,可用以下命令生成 Ed25519 密钥对:

    sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
    

5. 相关操作

  1. 检查当前密钥

    sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
    

    输出示例:

    256 SHA256:xxxxxx... root@hostname (ED25519)
    
  2. 重启 SSH 服务

    sudo systemctl restart sshd   # 大多数 Linux 系统
    
  3. 查看密钥指纹(供客户端验证):

    ssh-keyscan -t ed25519 your_server_ip
    
  4. 日志排查

    journalctl -u sshd -f   # 查看 SSH 服务日志
    

6. 安全性注意

  • 文件权限:私钥文件(如 ssh_host_ed25519_key)应仅对 root 可读:

    chmod 600 /etc/ssh/ssh_host_ed25519_key
    chown root:root /etc/ssh/ssh_host_ed25519_key
    
  • 密钥轮换:若怀疑密钥泄露,需重新生成密钥并通知客户端更新。


常见问题

  • 错误:Missing host key
    检查密钥文件是否存在,或重新生成密钥。

  • 客户端不兼容 Ed25519
    旧版本 SSH 客户端可能不支持 Ed25519,需在服务器配置中补充其他密钥类型(如 RSA)。


通过以上配置,Ed25519 密钥将作为服务器的身份凭证之一,增强安全性和性能。如果目标是兼容性和安全性平衡,建议同时启用 RSA 或 ECDSA 作为备用。










8️⃣ 参考 8 authorized_keys 讲解

authorized_keys 文件是 SSH 公钥认证机制的核心,它决定了哪些用户可以使用哪些公钥登录到特定的服务器用户账户。理解这个文件对于实现安全、便捷的无密码登录至关重要。

核心作用:

当用户尝试通过 SSH 公钥认证方式登录服务器上的某个用户账户(例如 user1)时,SSH 守护进程 (sshd) 会检查该用户家目录下的 ~/.ssh/authorized_keys 文件。如果连接客户端提供的公钥与该文件中记录的某个公钥完全匹配,并且满足该公钥条目可能附带的所有限制条件,那么客户端就可以使用对应的私钥进行身份验证,无需输入密码即可登录。

深入解析:

  1. 文件位置与权限:

    • 路径: ~/.ssh/authorized_keys
      • ~ 代表目标用户的家目录(例如 /home/user1)。
      • .ssh 目录通常是隐藏目录。
    • 权限: 极其重要!
      • .ssh 目录权限:必须是 700 (drwx------)。只有目录所有者可以读、写、执行(进入)。
      • authorized_keys 文件权限:必须是 600 (-rw-------) 或更严格(如 640,但 600 是最安全的)。只有文件所有者可以读写,其他任何用户(包括同组用户)都不能访问。
    • 为什么严格权限? 如果其他用户能写入这个文件,他们可以添加自己的公钥,从而获得该账户的登录权限。如果其他用户能读取这个文件,他们能看到允许登录的公钥,虽然公钥本身不是秘密,但知道哪些密钥有效可能有助于攻击者进行更有针对性的攻击。
    • 所有者: 文件及其父目录 .ssh 的所有者必须是目标登录用户本人(user1)。
  2. 文件格式:

    • 每一行代表一个被授权的公钥。
    • 每行通常以公钥类型(如 ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256)开头,后面跟着一长串 Base64 编码的公钥数据,最后可能有一个注释(通常用于标识该密钥的来源或用途,例如 user1@laptop)。
    • 基本格式示例:
      ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJvH6tV7Q3bX1oK0ZzLmJgXdX9sYyW7bQeFpOcDwK1m+ user1@workstation
      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4...verylongstring...Mq/Ew== user1@old-laptop
      
  3. 核心功能:公钥匹配认证

    • 客户端连接时声明它想使用公钥认证,并告诉服务器它拥有的公钥类型(如 ssh-ed25519)。
    • 服务器 (sshd) 检查目标用户 ~/.ssh/authorized_keys 文件中是否有匹配类型的公钥。
    • 如果找到匹配类型的公钥行,服务器会生成一个随机挑战(challenge)。
    • 服务器将这个挑战发送给客户端。
    • 客户端使用其对应的私钥对挑战进行签名。
    • 客户端将签名发送回服务器。
    • 服务器使用存储在 authorized_keys 文件中的公钥来验证签名。
    • 如果验证成功,则确认客户端持有与授权公钥配对的私钥,身份验证通过。
  4. 高级功能:公钥选项 (Key Options) 在公钥行的开头(在密钥类型之前),可以添加以逗号分隔的选项,用于对该密钥的登录施加额外的安全限制或配置行为。这些选项极大地增强了公钥认证的灵活性和安全性。

    • 基本语法: option1="value1",option2="value2",... ssh-rsa AAAAB3Nza...
    • 常见且重要的选项:
      • command="command":
        • 作用: 强制规定,当用户使用此特定公钥登录时,无论用户请求执行什么命令,都只会执行这里指定的命令。执行后,连接会立即关闭。
        • 用途: 自动化任务(如备份、同步),限制密钥只能用于特定操作,提高安全性。常用于受限的自动化账户。
        • 示例: command="/usr/bin/backup-script.sh" ssh-ed25519 AAAAC3Nza... backup-key
      • from="pattern-list":
        • 作用: 限制允许使用此公钥连接的来源主机名或IP地址(支持通配符 *, ? 和 CIDR 如 192.168.1.0/24)。
        • 用途: 增强安全性,仅允许从可信网络或特定机器连接。防止密钥泄露后被用于从任意位置登录。
        • 示例: from="192.168.1.*, office.example.com" ssh-rsa AAAAB3Nza... office-key
      • no-agent-forwarding:
        • 作用: 禁止通过此连接转发 SSH 认证代理。
        • 用途: 防止用户利用此连接跳转到其他服务器(限制了横向移动)。
      • no-port-forwarding:
        • 作用: 禁止通过此连接进行端口转发(本地端口转发、远程端口转发、动态转发)。
        • 用途: 限制网络访问能力,提高安全性。
      • no-pty:
        • 作用: 不分配伪终端 (PTY)。意味着用户无法获得交互式 shell。
        • 用途: 强制命令执行,确保只能运行非交互式命令。
      • permitopen="host:port":
        • 作用: 限制允许此连接建立的端口转发目标(仅允许转发到指定的 host:port)。
        • 示例: permitopen="db.internal:5432" ssh-rsa ... (只允许转发到内部数据库的 5432 端口)
      • environment="NAME=value":
        • 作用: 设置连接建立时的环境变量。需要注意 sshd 默认配置 (PermitUserEnvironment) 可能禁止此功能。
      • cert-authority:
        • 作用: 表示该行包含的是一个用于验证证书签名的 CA 公钥,而不是普通的用户公钥。需要配合 SSH 证书使用。
      • restrict:
        • 作用 (OpenSSH 7.2+): 一个便捷选项,相当于同时启用 no-port-forwarding, no-agent-forwarding, no-X11-forwarding, no-pty, no-user-rc。是设置严格限制的快捷方式。你仍然可以在 restrict 后面添加其他选项来覆盖或添加限制(如 restrict, command="...")。
    • 选项组合: 可以组合多个选项以满足复杂需求。例如,限制来源IP、禁止转发、并强制运行特定命令:
      from="10.0.0.5",no-agent-forwarding,no-port-forwarding,no-pty,command="/opt/scripts/run-backup" ssh-ed25519 AAAAC3Nza... backup-bot
      
  5. 如何管理 authorized_keys 文件:

    • 手动编辑: 使用文本编辑器(如 vi, nano)直接编辑。务必注意权限!
    • 推荐工具 ssh-copy-id
      • 这是将本地公钥安全部署到远程服务器 authorized_keys 文件的最简单、最安全方法。
      • 命令:ssh-copy-id [-i /path/to/public_key] user@remote_host
      • 它会:
        1. 检查本地公钥(默认 ~/.ssh/id_rsa.pub~/.ssh/id_ed25519.pub,或用 -i 指定)。
        2. 通过密码登录到远程主机(需要输入用户密码)。
        3. 将公钥内容追加到远程用户 ~/.ssh/authorized_keys 文件的末尾。
        4. 自动设置 .ssh 目录和 authorized_keys 文件的正确权限(如果它们不存在)。
    • 追加公钥: 如果手动操作,将公钥文件(.pub)的内容 追加 (>>) 到 ~/.ssh/authorized_keys 中。不要覆盖文件!
      cat ~/.ssh/id_ed25519.pub | ssh user@remote_host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
      

总结与关键点:

  • 核心功能: authorized_keys 文件存储了允许通过 SSH 公钥认证登录到特定用户账户的所有公钥
  • 位置与权限: ~/.ssh/authorized_keys,权限必须为 600(文件)和 700(.ssh 目录)。权限错误是公钥登录失败最常见的原因之一!
  • 认证过程: 服务器用存储的公钥验证客户端用对应私钥生成的签名。
  • 强大选项: 通过在公钥行前添加选项(command=, from=, no-xxx-forwarding, restrict 等),可以对登录施加精细化的安全限制和控制登录后的行为。这是提升自动化账户和特权账户安全性的关键手段。
  • 安全部署: 优先使用 ssh-copy-id 工具安全地添加公钥。手动操作要极其小心权限和避免覆盖文件。
  • HostKey 的区别:
    • HostKey (在 sshd_config 中):服务器端的主机密钥(私钥),用于验证服务器的身份(防止中间人攻击)。
    • authorized_keys (在用户家目录下):用户账户的授权公钥列表,用于验证客户端的身份(允许谁以什么方式登录这个用户账户)。

理解并正确管理 authorized_keys 文件是实现安全、高效 SSH 访问的基础。结合严格的权限管理和使用公钥选项,可以大大提升服务器的安全性。










9️⃣ 参考 9 authorized_keys 讲解

关于 SSH 的 authorized_keys 文件的深度解析

一、核心概念与用途
  1. 定义与角色
    authorized_keys 是 SSH 协议中用于公钥认证的核心文件,存储了允许登录当前用户的公钥列表。其核心价值在于:

    • 无密码登录:客户端私钥与服务器端 authorized_keys 中的公钥匹配时,可免密登录。
    • 身份验证:通过非对称加密确保客户端身份合法,防止暴力破解和中间人攻击。
  2. 工作流程

    • 客户端连接:用户尝试通过 SSH 登录服务器。
    • 公钥匹配:服务器检查客户端提供的公钥是否存在于目标用户的 authorized_keys 文件中。
    • 挑战-响应:若公钥存在,服务器生成随机数并用对应私钥加密,客户端用私钥解密并返回结果,完成认证。
二、文件位置与权限管理
  1. 默认路径

    • 文件通常位于用户主目录的 .ssh 文件夹下:
      ~/.ssh/authorized_keys(每用户独立)
    • 系统级配置(罕见):
      /etc/ssh/authorized_keys/<username>(需在 sshd_config 中启用 AuthorizedKeysFile
  2. 权限要求

    • 文件权限:必须为 600(仅所有者可读写),否则 SSH 服务器会拒绝读取:
      chmod 600 ~/.ssh/authorized_keys
      
    • 目录权限.ssh 目录需为 700,防止未授权访问:
      chmod 700 ~/.ssh
      
三、文件内容与格式规范
  1. 内容结构

    • 每行一个公钥,格式为:
      [算法] [密钥数据] [注释]
    • 示例(Ed25519 算法):
      ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAomQ/bG9v4kR6jH0rLzQbT9oXqQzDcVJbKzYwE user@example.com
      
      • 算法:如 ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256
      • 密钥数据:Base64 编码的公钥主体。
      • 注释:可选字段,通常为 user@hostname,便于管理。
  2. 公钥生成

    • 使用 ssh-keygen 生成密钥对:
      ssh-keygen -t ed25519 -C "user@example.com"
      
      • -t:指定算法(推荐 Ed25519)。
      • -C:添加注释。
      • 私钥默认保存为 ~/.ssh/id_ed25519,公钥为 ~/.ssh/id_ed25519.pub
四、配置与使用指南
  1. 启用公钥认证

    • 确保 SSH 服务器配置 /etc/ssh/sshd_config 中包含:
      PubkeyAuthentication yes
      AuthorizedKeysFile .ssh/authorized_keys
      
    • 重启 SSH 服务使配置生效:
      systemctl restart sshd
      
  2. 添加公钥到文件

    • 手动添加:将公钥内容追加到 authorized_keys
      cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
      
    • 自动化工具:使用 ssh-copy-id 命令:
      ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote-host
      
  3. 禁用密码认证(增强安全)

    • sshd_config 中设置:
      PasswordAuthentication no
      
    • 重启 SSH 服务后,仅允许公钥认证。
五、安全最佳实践
  1. 密钥轮换策略

    • 定期更换密钥对(如每 90 天),减少泄露风险。
    • 生成新密钥后,更新所有服务器的 authorized_keys 文件。
  2. 访问控制

    • 限制 .ssh 目录和 authorized_keys 文件的权限。
    • 使用 chmodchown 确保所有权归当前用户。
  3. SSH 代理管理

    • 使用 ssh-agent 临时加载私钥,避免私钥明文存储:
      eval "$(ssh-agent -s)"
      ssh-add ~/.ssh/id_ed25519
      
  4. 审计与监控

    • 检查 authorized_keys 文件变更:
      ls -l ~/.ssh/authorized_keys
      
    • 监控 SSH 登录日志(/var/log/auth.log/var/log/secure)。
六、故障排除指南
  1. 常见问题与解决

    • 权限被拒绝:检查文件和目录权限是否为 600700
    • 密钥不匹配:确认公钥是否正确追加到文件,无多余空格或换行。
    • 算法不支持:确保 SSH 服务器支持该公钥算法(检查 sshd_config 中的 HostKey 配置)。
  2. 调试连接

    • 启用 SSH 详细日志:
      ssh -v user@remote-host
      
    • 检查输出中的公钥匹配过程,定位失败原因。
总结
  • authorized_keys 文件:SSH 公钥认证的核心,需严格管理权限和内容。
  • 安全强化:结合密钥轮换、访问控制和日志监控,构建零信任访问体系。
  • 自动化工具:优先使用 ssh-copy-idssh-agent 提升效率与安全性。










🔟 参考 10 authorized_keys 讲解

authorized_keys 是 SSH(Secure Shell)协议中用于实现 公钥认证 的关键文件。它的作用是存储允许通过公钥认证登录到 SSH 服务器的用户的公钥。当用户尝试通过 SSH 登录时,服务器会验证客户端提供的私钥是否与 authorized_keys 文件中的公钥匹配,从而决定是否允许登录。


1. authorized_keys 的作用

  • 身份验证
    通过公钥加密算法(如 RSA、Ed25519、ECDSA 等),authorized_keys 文件中的公钥用于验证客户端的身份。如果客户端能正确解密服务器发送的随机数,则证明其拥有对应的私钥,从而允许登录。
  • 安全性
    相比传统密码登录,公钥认证更安全,避免了暴力破解和密码泄露的风险。
  • 自动化与便利
    公钥认证无需输入密码,适合自动化脚本、频繁连接的场景(如 CI/CD、远程管理)。

2. authorized_keys 的位置与权限

  • 默认路径
    authorized_keys 文件通常位于用户的家目录下的 .ssh 目录中:

    ~/.ssh/authorized_keys
    

    例如,用户 liuwf 的路径为:

    /home/liuwf/.ssh/authorized_keys
    
  • 权限要求
    SSH 对权限非常严格,若权限错误,认证会失败:

    • 文件权限authorized_keys 文件权限必须为 600(仅文件所有者可读写):
      chmod 600 ~/.ssh/authorized_keys
      
    • 目录权限.ssh 目录权限必须为 700(仅目录所有者可读写执行):
      chmod 700 ~/.ssh
      
    • 用户主目录权限:用户的主目录不能对其他用户有写权限(例如 ~ 目录权限不能是 777775)。

3. 配置 authorized_keys 的步骤

以下是配置 authorized_keys 的完整流程:

3.1 生成 SSH 密钥对

在本地计算机上生成私钥和公钥:

ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t 指定算法(推荐使用性能更优的 Ed25519)。
  • 生成后,私钥保存在 ~/.ssh/id_ed25519,公钥在 ~/.ssh/id_ed25519.pub
3.2 将公钥复制到服务器

将公钥添加到服务器的 authorized_keys 文件中:

  • 方法一:使用 ssh-copy-id

    ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
    

    该命令会自动将公钥追加到服务器的 ~/.ssh/authorized_keys 文件中。

  • 方法二:手动复制

    1. 查看本地公钥内容:
      cat ~/.ssh/id_ed25519.pub
      
    2. 登录到服务器,创建 .ssh 目录和 authorized_keys 文件(如果不存在):
      mkdir -p ~/.ssh
      touch ~/.ssh/authorized_keys
      
    3. 将公钥内容粘贴到 authorized_keys 文件中:
      nano ~/.ssh/authorized_keys
      
3.3 设置权限

确保服务器上的权限正确:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3.4 测试连接

尝试通过 SSH 登录服务器:

ssh -i ~/.ssh/id_ed25519 user@server_ip

如果配置正确,无需输入密码即可登录。


4. authorized_keys 的格式

每行代表一个公钥条目,格式如下:

[选项] 密钥类型 密钥数据 [注释]
  • 示例
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL [...] user@example.com
    
  • 选项(可选):
    可以通过选项限制密钥的使用方式,例如:
    • command="...":限制该密钥只能执行特定命令。
    • no-port-forwarding:禁止端口转发。
    • from="IP地址":限制只能从特定 IP 登录。 示例:
    command="/bin/ls" no-port-forwarding ssh-rsa AAAAB3NzaC1yc2E [...] user@example.com
    

5. 常见问题与解决方法

5.1 权限错误导致认证失败
  • 错误提示
    Permission denied (publickey).
    
  • 解决方法
    检查 .ssh 目录和 authorized_keys 文件的权限是否正确:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
5.2 公钥未正确添加
  • 错误提示
    No matching key exchange method found.
    
  • 解决方法
    确认公钥已正确追加到 authorized_keys 文件中,且格式无误。
5.3 多个公钥共存
  • 支持多行
    authorized_keys 文件支持多行公钥,每行一个公钥。例如:
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL [...] user1@example.com
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCZ [...] user2@example.com
    
5.4 服务器未启用公钥认证
  • 检查配置文件
    /etc/ssh/sshd_config 中确保以下配置已启用:
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    
    修改后重启 SSH 服务:
    sudo systemctl restart sshd
    

6. 高级用法

6.1 限制密钥功能

通过在 authorized_keys 中添加选项,可以限制密钥的用途。例如:

  • 限制登录命令

    command="/bin/bash" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL [...] user@example.com
    

    用户登录后只能执行 /bin/bash,无法进行其他操作。

  • 限制来源 IP

    from="192.168.1.0/24" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL [...] user@example.com
    

    仅允许从 192.168.1.0/24 网段登录。

6.2 使用 Windows 客户端
  • 生成密钥
    在 Windows 上使用 OpenSSH 生成密钥:
    ssh-keygen -t ed25519 -C "user@windows"
    
  • 复制公钥
    使用 scp 或手动复制公钥到服务器。

7. 总结

项目说明
文件位置~/.ssh/authorized_keys
权限要求.ssh 目录权限 700authorized_keys 文件权限 600
生成密钥使用 ssh-keygen 生成密钥对
添加公钥使用 ssh-copy-id 或手动复制公钥到 authorized_keys
验证登录无需密码直接登录
常见问题权限错误、公钥格式错误、SSH 配置未启用公钥认证
高级功能限制密钥用途(如命令、IP、转发等)

通过正确配置 authorized_keys,可以大幅提升 SSH 登录的安全性和便捷性,是系统管理和自动化运维的重要工具。