云站指南建站与运维知识库
安全防护进阶约 10 分钟

服务器 SSH 安全加固:密钥登录与权限管理

用密钥认证、最小权限和谨慎的配置验证减少 SSH 风险,并避免把自己锁在服务器之外。

云站编辑组 · 内容编辑与技术审校发布于 2026年8月27日更新于 2026年10月30日7,800 次阅读涉及生产变更时,请先备份并验证

在可信客户端生成并保管密钥

建议为每台设备或用途建立独立密钥,并保护私钥不被复制或提交到代码仓库。可使用现代 OpenSSH 支持的 ed25519 密钥;若组织策略要求其他算法,遵循组织规范。

ssh-keygen -t ed25519 -a 64 -f ~/.ssh/site_admin_ed25519 -C "site-admin"
chmod 600 ~/.ssh/site_admin_ed25519

安装公钥并先验证新登录

将公钥放入目标账户的 authorized_keys,确认家目录、.ssh 和文件权限符合 OpenSSH 要求。已有会话不要关闭;另开终端验证密钥登录成功,并确认普通管理命令可用。

  • authorized_keys 应属于目标用户。
  • 私钥不能复制到服务器;服务器只保存公钥。
  • 先验证新会话,再继续更改认证策略。
  • 保留云控制台或其他带外恢复入口。

修改 sshd 配置前先备份

sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d-%H%M%S)
sudoedit /etc/ssh/sshd_config
sudo sshd -t

不要先禁用密码再验证密钥

若公钥路径、文件权限或用户名有误,关闭当前连接后可能无法登录。保持现有会话,先用第二个会话验证新配置。

逐步加载并准备回滚

确认 sshd -t 成功后,按照发行版服务名称平滑加载配置,常见服务名为 ssh 或 sshd。不要盲目更改 SSH 端口或防火墙;如果必须变更,先确认云防火墙和系统防火墙放行策略。

  1. 确认配置备份可读且当前会话仍保持连接。
  2. 检查 sshd -t 输出无错误。
  3. 执行服务 reload,并在新终端用目标账户验证。
  4. 验证失败时从云控制台恢复备份,重新检查配置。

远程安全加固要采用“先验证、再收紧、最后关闭旧通道”的顺序。

运维操作原则

Windows、macOS 客户端的差异

现在三大桌面系统的差异已经很小:Windows 10 起系统自带 OpenSSH 客户端,在 PowerShell 里 ssh、ssh-keygen 与 macOS、Linux 的用法和参数完全一致,密钥同样存放在用户目录的 .ssh 下。老教程里"Windows 必须装 PuTTY"已经过时——只有在环境确实无法使用自带客户端时才需要第三方工具,注意 PuTTY 使用自己的 .ppk 密钥格式,与 OpenSSH 私钥需要转换后才能互用。

生成密钥后建议顺手执行一次 ssh-add 私钥口令缓存(macOS 可配合 Keychain),避免每次连接都要输口令短语;服务器端不受客户端平台影响,本文其余步骤三端通用。

Permission denied (publickey) 排查顺序

  • 先加 -v 重跑:ssh -v user@host 的输出会写明"尝试了哪些密钥、为什么被拒",比盲猜快十倍。
  • 查权限:本机私钥 600;服务器上家目录、.ssh(700)与 authorized_keys(600)的权限和属主都必须属于登录用户。
  • 查用户名:云服务器常见登录用户是 root 或发行版专用账户(如 ubuntu),用户名写错是最高频原因。
  • 查密钥是否被加载:ssh-add -l 列出当前代理里的密钥,确认尝试的是你刚装的那把。

按这个顺序走一遍仍失败时,问题多半在服务端 sshd 配置(公钥认证被禁用、authorized_keys 路径不对),通过云控制台的带外登录检查 sshd 日志即可定位,此时务必保持一个已登录会话不退出。

下一步该读什么

相关教程

本文要点

先收集证据,再进行小范围变更;操作前留好备份,操作后用明确的检查项验证结果。

SSH密钥Linux安全加固

继续学习

继续阅读

全部教程
安全防护进阶9 分钟

网站被黑了怎么办:入侵后的应急处置

被黑后顺序比速度重要:隔离、取证、恢复、加固四步走,别让"直接重装"毁掉取证线索。恢复能不能活下来,取决于你的备份。

安全应急
2026年10月30日
Linux 入门入门9 分钟

Linux 定时任务入门:用 crontab 自动备份

把 crontab 五字段记成"分时日月周"口诀,落到一个每天自动打包网站的实例,避开服务器时区错位与百分号转义两个经典坑。

crontabLinux
2026年10月30日