mcpField
S
ssh-hardening

ssh-hardening

github.com/mikr13安全6247 次安装2 周前更新
代码仓库

关于 ssh-hardening

ssh-hardening 是用于收紧 SSH 服务端认证与访问控制的技能,面向系统管理员。它强调先验证密钥登录和策略,再启用限制,并保留恢复路径。

主要功能

  1. 01检查服务、监听端口与访问规则
  2. 02验证管理员密钥登录和 sudo
  3. 03生成密钥并支持预览及防覆盖
  4. 04应用托管的仅密钥策略
  5. 05验证、测试并恢复 SSH 配置

适用场景

  1. 01限制认证方式前准备 SSH 访问
  2. 02检查特定用户上下文的条件规则
  3. 03应用常规的仅密钥策略
  4. 04故障后验证访问并恢复配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mikr13/secure-server-setup-skills --skill ssh-hardening

安装后在 Claude Code 中输入/ssh-hardening确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
sshd-config.md
scripts/
generate-ssh-keys.sh
setup-ssh-hardening.sh

详细介绍

SSH 加固

在限制身份验证之前,先确保管理访问可用。在新的登录成功之前,保持当前会话和服务提供商控制台可用。

检查并确保访问

  1. 确认当前活动的守护进程/服务/套接字、实际监听端口、管理和自动化身份、Include 顺序以及相关的 Match 规则。记录针对实际用户、客户端地址和主机名的 sshd -T -C 结果。

  2. 使用现有的非 root 管理员。如果需要创建账户,请按照发行版的用户/组约定单独创建,安装其公钥,然后在另一个会话中验证密钥登录和 sudo,之后再进行任何锁定操作。

  3. 在本地客户端上生成带有口令或由硬件支持的个人密钥。scripts/generate-ssh-keys.sh 提供预览/不覆盖行为;其 --interactive 模式适用于人工终端,而 --no-passphrase 是明确的服务密钥选项。

  4. 测试指定密钥,且不允许回退到密码验证:

    ssh -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -i ~/.ssh/server_admin [email protected]
    

    在这个新会话中,验证所需的 sudo 操作。密码回退或已打开的会话不能证明密钥访问可用。

配置授权策略

编辑包含文件、有条件的访问规则或启用配置之前,请阅读 references/sshd-config.md。

设置辅助脚本 支持常规的仅密钥策略。它要求存在一个非 root 管理员;不会创建账户、替换 AllowUsers/AllowGroups、更改端口或移除转发功能。现有的多因素身份验证需要经过审核的手动策略,而非使用此辅助脚本。

sudo bash scripts/setup-ssh-hardening.sh --user administrator --client-address 203.0.113.10 --dry-run

在已验证密钥/sudo 访问且获准配置/启用后:

sudo bash scripts/setup-ssh-hardening.sh --user administrator --client-address 203.0.113.10 --key-access-confirmed --apply --activate

对于必须验证的管理员,请重复指定 --user。当基于主机名的 Match 规则适用时,请设置 --client-host。辅助脚本会验证所提供的客户端上下文;还应检查其他相关网络/主机名。它会写入受管理的前置 drop-in 文件,并在更早的值或条件规则覆盖所请求的策略时拒绝报告成功。文件名靠前本身并不能证明优先级。

验证与恢复

  • 语法:sudo sshd -t。文件中的有效策略:sudo sshd -T -C user=administrator,host=client.example.com,addr=203.0.113.10。
  • 在所有相关上下文中验证 root、密码和键盘交互式身份验证限制;确保所需的密钥登录以及任何预期的 MFA 仍可使用。
  • 启用后,使用指定密钥建立新的登录并检查 sudo。从受控客户端测试被拒绝的身份验证方式。在这些测试通过之前,保留原会话。
  • 如果脚本在验证或启用期间失败,它会恢复原有受管理 drop-in 文件的准确内容,并在需要时尝试重新加载恢复后的策略。之后如需回滚,请使用打印出的受保护备份目录;恢复其中保存的文件,或者如果此前不存在该文件,则移除新建的受管理文件。然后通过保留的会话/控制台验证并重新加载实际服务。

分别报告文件验证、启用和实时访问测试的结果。不要将 ClientAliveInterval 描述为用户空闲超时,也不要硬编码过时的协议/加密设置。

评论

支持 Markdown