SSH 密钥登录入门与安全加固

举报
yd_286077367 发表于 2026/11/09 00:37:29 2026/11/09
【摘要】 SSH 密钥登录入门与安全加固摘要:本文从零介绍 SSH 密钥登录的基本原理与配置流程,并给出生产环境中常用的安全加固实践,帮助开发者在云服务器(如华为云 ECS、ECS 控制台、各类 Linux 发行版)上安全地替代密码登录。 一、为什么用密钥而不是密码传统密码登录 SSH 存在两个痛点:密码在网络上以挑战-应答方式传输,虽然 SSH 协议本身已加密,但一旦服务器遭遇暴力破解脚本,弱密码...

SSH 密钥登录入门与安全加固

摘要:本文从零介绍 SSH 密钥登录的基本原理与配置流程,并给出生产环境中常用的安全加固实践,帮助开发者在云服务器(如华为云 ECS、ECS 控制台、各类 Linux 发行版)上安全地替代密码登录。

一、为什么用密钥而不是密码

传统密码登录 SSH 存在两个痛点:密码在网络上以挑战-应答方式传输,虽然 SSH 协议本身已加密,但一旦服务器遭遇暴力破解脚本,弱密码很快会被试出;另一方面,运维人员在多台机器上记忆或粘贴密码,容易把凭据写入文档或聊天工具,增加泄露面。

SSH 密钥登录把"知道什么"换成"拥有什么":客户端持有私钥,服务器保存对应的公钥。私钥不出本机,登录时由客户端用私钥对服务器发来的随机挑战做签名,服务器用公钥验签通过即放行。整个过程不传输私钥本身,也天然抵抗字典和暴力破解。

二、生成密钥对

在本地或跳板机上执行:

ssh-keygen -t ed25519 -C "your-name@device" -f ~/.ssh/id_ed25519

优先选择 Ed25519:密钥短、签名快、安全性优于传统的 RSA 2048。如果目标服务器版本较老不支持 Ed25519,再回退到 ssh-keygen -t rsa -b 4096。生成时若提示"overwrite",请确认是否要覆盖已有密钥。

生成完毕后,私钥 id_ed25519 留在本地,公钥 id_ed25519.pub 将部署到服务器。务必为私钥设置严格权限:

chmod 600 ~/.ssh/id_ed25519

三、把公钥部署到服务器

3.1 使用 ssh-copy-id(推荐)

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

该命令会自动把公钥追加到服务器 ~/.ssh/authorized_keys,并修正目录与文件权限。

3.2 手动部署

若无法使用 ssh-copy-id(例如只能临时用密码登录),可手动操作:

  1. 复制公钥内容(cat ~/.ssh/id_ed25519.pub)
  2. 在服务器上确保 ~/.ssh 目录存在,执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

3.3 通过华为云控制台注入密钥

在华为云 ECS 控制台创建或修改密钥对时,可下载私钥文件(.pem),并在创建实例时关联。通过控制台注入的方式适合首次没有密码/无法 SSH 入站的场景,后续仍建议补充自己的 ed25519 密钥。

四、验证密钥登录

在本地执行:

ssh -i ~/.ssh/id_ed25519 user@server-ip

首次连接会提示确认 host key,核对指纹后输入 yes。若直接进入服务器 shell 且不再要求密码,说明密钥登录已生效。可用 -v 参数查看调试输出,确认用的是 publickey 认证。

五、安全加固

5.1 禁用密码登录

在 /etc/ssh/sshd_config 中确认或添加:

PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no

然后重载:systemctl reload sshd。重要:在关闭密码登录前,务必已在当前会话外另行验证密钥登录可用,否则一旦断连将无法再用密码救回。

5.2 绑定特定用户与 root 登录控制

PermitRootLogin prohibit-password
AllowUsers your-user deploy-user

prohibit-password 允许 root 仅通过密钥登录;结合 AllowUsers 把可登录账户白名单化,进一步缩小攻击面。

5.3 密钥权限与所有者

authorized_keys 的属主必须是登录用户本人,sshd 在 StrictModes(默认开启)下会拒绝属主/权限不匹配的密钥文件。服务器端 ~/.ssh 属主不正确是导致"有公钥却仍要密码"的最常见原因。

5.4 限制源 IP 与失败锁定

  • 通过云安全组/防火墙只放通行运维网段到 22 端口;
  • 配合 fail2ban 对反复认证失败的源地址做临时封禁;
  • 条件允许时把 SSH 迁移到非标准端口(例如 2222),降低自动化扫描的命中概率,但注意端口变更不能替代真正的访问控制。

5.5 私钥保护

  • 生成私钥时务必设置 passphrase(密码短语),私钥被拖走后仍多一层保护;
  • 在 ssh-agent 中缓存 passphrase,避免每次交互输入;
  • 不要在脚本或 CI 里把私钥以明文写入文件,优先使用托管式密钥(如华为云密钥对服务、KMS 或 CI 的 Secret 变量)。

六、日常运维小贴士

  • 一台新机器上线的标准动作为:注入公钥 → 验证密钥登录 → 关闭密码登录 → 绑定安全组 → 纳入监控/审计。
  • 定期轮换密钥:离职、机器重建或怀疑泄露时,在服务器 `autho

rized_keys` 中移除旧公钥并重新部署新公钥。

  • 使用 ssh-keygen -lf ~/.ssh/id_ed25519.pub 核对公钥指纹,方便在多人协作时确认"这是谁的公钥"。
  • 若使用跳板机(bastion),可在 ~/.ssh/config 中用 ProxyJump 简化串联,但跳板机本身的密钥权限同样要按上述规范收紧。

七、总结

SSH 密钥登录用非对称签名替代了明文或弱密码认证,是服务器安全基线里性价比最高的一步。生成 ed25519 密钥对、把公钥写入 authorized_keys、关闭 PasswordAuthentication、收紧 PermitRootLogin 与 AllowUsers、配合安全组和 fail2ban,这几项组合起来就能覆盖绝大多数入侵场景。把密钥轮换和私钥密码短语纳入日常规范,安全性会从"能用"进一步走到可审计、可回收。

作者声明:本文内容为个人学习与实践总结,不涉及任何商业推广。配置生产环境前请在测试机验证,并在修改 sshd_config 前保留可通过控制台或 VNC 登录的救回通道。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。