SSH authorized_keys 限制选项详解

SSH 公钥认证不仅提供无密码登录的便利,还支持细粒度的访问控制。通过 authorized_keys 中的选项,可以限制持有该公钥的用户能够执行的操 作——比如禁止端口转发、限制允许执行的命令、甚至限定登录来源 IP。这些选项是 SSH 服务器安全加固的重要手段。 authorized_keys 基础回顾 在深入限制选项之前,先回顾 authorized_keys 文件的基本格式: 1 [options] ssh-rsa AAAAB3NzaC1... user@hostname options 部分是可选的,多个选项用逗号分隔。这一部分就是我们控制公钥权限的入口。 常用限制选项详解 1. command:强制执行特定命令 command 选项强制使用该公钥登录时只能执行指定的命令,忽略客户端发送的任何命令。 1 2 # 限制只能执行特定命令 command="/usr/bin/git-shell-wrapper" ssh-ed25519 AAAA... user@workstation 实际效果: 1 2 $ ssh git@server # 强制执行 /usr/bin/git-shell-wrapper,忽略用户输入的其他命令 这在提供 git 访问权限时特别有用,确保用户只能运行 git 相关操作,无法获得完整 shell。 2. from:限制登录来源 IP from 选项限定公钥只能从特定主机或网络登录。 1 2 3 4 5 6 7 8 9 10 11 # 只允许从特定 IP 登录 from="192.168.1.100" ssh-ed25519 AAAA....

July 13, 2026 · 3 min · 黑豆子

SSH 动态端口转发:构建安全 SOCKS 代理

SSH 动态端口转发允许你通过 SSH 隧道创建一个 SOCKS5 代理,所有流量通过远程服务器转发,实现安全上网和内网访问。本文详细介绍其工作原理和实战配置。 什么是动态端口转发 动态端口转发将本地端口转变为 SOCKS5 代理服务器。当应用连接到这个本地端口时,SSH 会将流量转发到远程服务器,由远程服务器代为访问目标地址。 1 2 3 4 5 6 7 8 本地主机 SSH 服务器 目标网站 +--------+ +-----------+ +----------+ | 浏览器 | ---> SOCKS ---> SSH ---> | | ---> 目标网站 | | | 应用 | (1080) 隧道 | 远程主机 | | 目标服务器| +--------+ +-----------+ +----------+ | | | +-------- 本地 1080 端口 -------------+ | 加密隧道 | 典型应用场景: 在公共 WiFi 下保护上网流量(加密传输) 访问内网受限服务 绕过网络限制 隔离环境下的安全上网 基础命令 启动 SOCKS 代理 1 ssh -D 1080 -N -f user@example....

July 8, 2026 · 5 min · 黑豆子

SSH ControlMaster:复用连接提升多会话效率

在日常工作中,我们经常需要同时打开多个 SSH 连接到同一台服务器。每次连接都需要经历 TCP 握手、TLS 协商(如果是跳板机)、密钥交换等过程,既浪费时间又消耗资源。SSH 提供的 ControlMaster 特性可以让我们复用已建立的连接,大幅提升多会话场景下的效率。 什么是 ControlMaster? ControlMaster 是 SSH 的连接复用功能。它允许在第一个 SSH 会话建立后,创建一个控制 socket(套接字文件)。后续的 SSH 连接可以通过这个 socket 复用已有的网络连接,无需重新建立 TCP 连接和身份验证。 核心优势: 减少连接建立时间(从数秒缩短到毫秒级) 降低跳板机/堡垒机负载 支持多会话共享同一个加密通道 工作原理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 首次连接(无 ControlMaster): 客户端 ----TCP 握手----> 服务器 客户端 ----密钥交换----> 服务器 客户端 ----认证-------> 服务器 客户端 <---会话建立---- 后续连接(无 ControlMaster): 客户端 ----TCP 握手----> 服务器(重复一遍) ... 首次连接(启用 ControlMaster): 客户端 ----TCP 握手----> 服务器 客户端 ----密钥交换----> 服务器 客户端 ----认证-------> 服务器 客户端 <---会话建立---- 同时创建: /tmp/ssh-control/%r@%h:%p 后续连接(复用 ControlMaster): 客户端 ----控制 socket通信----> 已有连接复用 客户端 <---瞬间建立---- 配置方法 方式一:全局配置文件 编辑 ~/....

July 7, 2026 · 3 min · 黑豆子

SSH ForceCommand:限制用户只能执行特定命令

SSH 的 ForceCommand 功能可以在用户连接时强制执行预设的命令,忽略客户端尝试自行执行的命令。这在需要限制用户只能进行特定操作(如只允许 SFTP、只允许 git 推送)的场景下非常有用。 ForceCommand 工作原理 ForceCommand 是 sshd_config 中的一个指令,它会: 强制执行预设的命令,忽略用户客户端传递的任何命令 同时忽略 ~/.ssh/rc 脚本 通过用户的登录 Shell 执行预设命令(shell -c "command") 原始命令仍可通过环境变量 SSH_ORIGINAL_COMMAND 获取(仅读取,不能执行) 1 2 3 # 查看当前默认配置 sshd -T | grep forcecommand # 输出:forcecommand none 基础配置示例 1. 禁止执行任何命令,只允许端口转发 1 2 # /etc/ssh/sshd_config ForceCommand /bin/true 这样配置后,用户无法执行任何远程命令,但可以正常使用端口转发(-L/-R)。 2. 记录用户尝试执行的命令 1 ForceCommand /usr/local/bin/audit_command.sh 审计脚本示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!...

July 2, 2026 · 3 min · 黑豆子

SSH FIDO2 安全密钥认证配置指南

什么是 FIDO2 安全密钥? FIDO2 是一个开放认证标准,旨在提供更安全的密码替代方案。在 SSH 认证场景中,FIDO2 安全密钥(如 YubiKey、Titan Security Key 等)可以存储私钥,实现硬件级别的私钥保护。 与传统 SSH 密钥相比,FIDO2 安全密钥具有以下优势: 私钥永不离开硬件设备:即使计算机被攻破,攻击者也无法获取私钥 需要物理按键:每次认证都需要用户触摸密钥确认,防止远程恶意使用 支持 PIN 保护:可设置 PIN 码作为额外验证层 支持常驻密钥:密钥可存储在设备上,在多台机器间共享使用 支持的密钥类型 OpenSSH 支持两种 FIDO2 密钥类型: ecdsa-sk:基于 ECDSA 曲线的安全密钥 ed25519-sk:基于 Ed25519 的安全密钥(推荐) 生成 FIDO2 SSH 密钥 基本生成命令 1 ssh-keygen -t ed25519-sk -C "your-email@example.com" 生成过程中需要: 按提示触碰安全密钥的金属感应区 输入设备 PIN 码(如已设置) 常用生成选项 1. 创建常驻密钥(可在多台设备使用) 1 ssh-keygen -t ed25519-sk -O resident -C "resident-key@example.com" 常驻密钥存储在安全密钥内部,可通过 ssh-add -K 从其他机器加载。 2. 禁用触控要求(不推荐) 1 ssh-keygen -t ed25519-sk -O no-touch-required -C "no-touch@example....

June 22, 2026 · 2 min · 黑豆子

OpenSSH 后量子密钥交换配置指南

概述 随着量子计算技术的发展,传统加密算法面临潜在威胁。SSH 作为最常用的远程访问协议,其安全性尤为重要。本文介绍 OpenSSH 后量子密钥交换的配置方法,帮助管理员保护 SSH 连接免受"现在收集,以后解密"(Harvest Now, Decrypt Later)攻击。 为什么需要后量子密钥交换? “现在收集,以后解密"攻击 即使量子计算机尚未实用化,攻击者已经开始收集加密的 SSH 流量。当量子计算机足够强大时,这些历史数据可能被解密。这就是所谓的"现在收集,以后解密”(也称"收获现在,解密 later")攻击。 OpenSSH 官方文档指出:整个 SSH 连接的隐私取决于密钥协商。如果攻击者能够破解密钥协商,他们就能解密整个会话。攻击者无需实时执行此攻击——他们可以现在收集加密的 SSH 会话,然后在获得量子计算机后解密。 时间线 现在:攻击者开始收集加密数据 2030 年左右:RSA 和 ECDH 可能被量子计算机破解 2035 年:NIST 建议全面迁移到后量子密码学 OpenSSH 后量子支持历程 版本 发布时间 后量子支持 OpenSSH 9.0 2022年4月 默认启用 sntrup761x25519-sha512 OpenSSH 9.9 2024年 新增 mlkem768x25519-sha256 OpenSSH 10.0 2025年4月 mlkem768x25519-sha256 成为默认 OpenSSH 10.1 未来 未使用后量子算法时发出警告 RFC 9941 2026年4月 标准化 sntrup761x25519-sha512 支持的算法 混合密钥交换算法 sntrup761x25519-sha512 混合:NTRU Prime (sntrup761) + X25519 SHA-512 用于密钥派生 RFC 9941 标准化 mlkem768x25519-sha256...

June 18, 2026 · 2 min · 黑豆子

SSH 密钥轮换完整指南

SSH 密钥轮换是安全运维中的重要实践。本文将介绍为什么需要轮换 SSH 密钥,以及如何实现安全、便捷的密钥轮换方案。 为什么要轮换 SSH 密钥 长期使用同一个 SSH 密钥会带来以下风险: 密钥泄露风险:密钥可能通过各种途径泄露(备份泄漏、离职人员带走等) 密钥老化:长时间使用的密钥可能被暴力破解或通过其他方式破解 合规要求:许多安全标准和合规要求强制定期更换认证凭据 最小权限原则:定期轮换可以确保只有当前需要访问的用户持有有效密钥 手动轮换流程 1. 生成新密钥 1 2 3 4 5 # 使用 Ed25519 算法(推荐) ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new -C "your-email@example.com" # 或使用 RSA(如果需要兼容旧系统) ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_new -C "your-email@example.com" 2. 分发公钥到服务器 1 2 3 4 5 6 7 # 方式一:使用 ssh-copy-id ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@server # 方式二:手动添加到远程服务器的 authorized_keys ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/....

June 2, 2026 · 3 min · 黑豆子

SSH Agent 转发配置与安全指南

在日常开发和运维工作中,我们经常需要通过多台跳板机 SSH 到内网服务器。每次都需要在每台机器上配置密钥或者输入密码,非常麻烦。SSH Agent 转发(Agent Forwarding)正是解决这一问题的利器。 什么是 SSH Agent SSH Agent 是一个后台运行的程序(守护进程),它负责管理用户的私钥。当你使用 SSH 连接服务器时,SSH Agent 会自动提供私钥进行认证,无需每次都输入密码或指定密钥文件。 核心组件 ssh-agent:后台守护进程,启动后会在环境变量中设置 SSH_AUTH_SOCK ssh-add:用于将私钥添加到 agent 管理列表 工作原理 1 2 [本地主机] ----SSH 隧道----> [跳板机] ----SSH----> [目标服务器] (持有私钥) (转发请求) (验证签名) 当启用 Agent Forwarding 后,跳板机会作为代理,将服务器的认证请求转发回本地主机,由本地的 SSH Agent 完成签名验证。 配置步骤 第一步:启动 SSH Agent 1 2 3 4 5 6 # 启动 ssh-agent $ ssh-agent -s # 输出示例: # SSH_AUTH_SOCK=/tmp/ssh-XXXX/agent.259996; export SSH_AUTH_SOCK; # SSH_AGENT_PID=260133; export SSH_AGENT_PID; 第二步:添加私钥 1 2 3 4 5 6 7 # 将私钥添加到 agent $ ssh-add ~/....

May 3, 2026 · 3 min · 黑豆子

SSH 证书认证实战指南

SSH 证书认证是一种比传统公钥认证更安全的方案。本文介绍 SSH 证书的工作原理和配置方法。 传统公钥认证的问题 传统的 SSH 公钥认证需要在每台服务器上添加用户的公钥: 1 2 # 用户将公钥发送到服务器 ssh-copy-id user@server 这种方式在大规模环境中存在以下问题: 密钥管理困难:新增或撤销用户需要手动更新所有服务器 无时效性:公钥永久有效,离职后难以撤销 无法追踪:无法知道谁在什么时候登录过 扩展性差:成百上千台服务器时维护成本极高 SSH 证书认证的原理 SSH 证书认证引入**证书颁发机构(CA)**的概念: CA 密钥:管理员创建一个 CA 私钥,用于签发证书 用户证书:CA 使用私钥对用户公钥进行签名,生成证书 服务器信任 CA:服务器只需配置信任 CA 公钥,无需逐个添加用户公钥 证书验证:用户登录时提交证书,服务器通过 CA 公钥验证证书有效性 证书包含的信息 用户公钥 用户 ID(Key ID) 有效期(起始时间 + 结束时间) 允许的登录用户名(Principals) CA 签名 创建 SSH CA 首先创建 CA 密钥对。建议使用 ED25519 算法: 1 2 3 4 5 # 创建用户证书CA ssh-keygen -t ed25519 -f ~/.ssh/user_ca -C "SSH User CA" # 创建主机证书CA(可选,用于验证服务器身份) ssh-keygen -t ed25519 -f ~/....

April 29, 2026 · 3 min · 黑豆子

Ed25519 密钥算法详解

Ed25519 是一种基于 EdDSA(Edwards-curve Digital Signature Algorithm)的数字签名算法,使用 Curve25519 椭圆曲线的变形 Ed25519。相比传统的 RSA 和 ECDSA,Ed25519 在安全性、性能和易用性上都有显著优势,已成为现代密码学的首选签名算法之一。 Ed25519 的核心优势 1. 密钥体积小 Ed25519 的密钥非常紧凑,公钥仅 32 字节,私钥 32 字节(种子)。这相比 RSA 2048 的 256 字节公钥和 1700+ 字节的私钥,存储和传输成本大幅降低。 公钥长度对比: 1 2 3 Ed25519 公钥: 82 字节(Base64 编码后) RSA 2048 公钥: 382 字节(Base64 编码后) ECDSA P-256 公钥: 162 字节(Base64 编码后) 2. 签名速度快 Ed25519 的签名和验证速度都非常快。其设计充分利用了现代 CPU 的特性,比 ECDSA 快约 3-5 倍,比 RSA 快得多。 3. 安全性高 128 位安全强度:等效于 RSA 3072 位或 AES-128 抗侧信道攻击:实现设计避免了时序攻击等侧信道风险 确定性签名:不需要随机数生成器,避免了 ECDSA 的随机数重用漏洞 4....

April 12, 2026 · 3 min · 黑豆子