返回列表

亚马逊云信用额度 亚马逊云AWS伺服器SSH密匙对管理

亚马逊aws / 2026-05-07 16:31:47

下载.png

开场:SSH 密匙对管理,听起来很硬核,其实你只需要管好三件事

在 AWS 上管理服务器时,SSH 密匙对就像你家的“钥匙套装”。门锁在实例上,钥匙掌握在你手里。你可能会觉得“我有钥匙就行了呀”,但现实往往更戏剧化:钥匙忘了放哪、密匙文件权限不对、轮换计划从未开始、同一把钥匙被多人共享……然后你就会发现:服务器不是不会给你开门,是你把钥匙管理搞成了“开盲盒”。

本文围绕标题“亚马逊云 AWS 伺服器 SSH 密匙对管理”,用偏实操的方式,把从生成密匙对到连接、轮换、撤销与排查常见问题的关键步骤讲清楚。你会看到一些建议背后的“为什么”,也会看到很多人踩坑的“怎么踩”。保证你看完能直接上手,并且能把坑提前绕开。

先搞清楚概念:密匙对是什么?为什么要有公钥和私钥?

亚马逊云信用额度 公钥、公钥、还是公钥:AWS 需要的是“公钥登门”

SSH 使用的密匙对由两部分组成:

  • 私钥(Private Key):必须由你自己保存,千万别泄露。它的作用是用来证明“我就是我”。
  • 公钥(Public Key):放到服务器端。实例通过它来校验你提交的签名是否匹配。

AWS 上你会创建“密匙对”(Key Pair)。AWS 会帮你把公钥写到你创建的实例里(更准确说,是在初始化过程中把它放到对应用户的 authorized_keys 里)。而私钥不会被上传到 AWS——这也是为什么丢了私钥就等于你把家钥匙扔到了宇宙黑洞。

你以为你在管理“文件”,其实你在管理“风险”

密匙对管理的核心不是按钮在哪里,而是风险控制:

  • 私钥泄露 → 别人也能进你的服务器(你就变成守门员给对手开门)。
  • 私钥权限放松 → 系统可能拒绝使用,导致你连接不了。
  • 长期不轮换 → 一把钥匙用到天荒地老,风险就越堆越高。
  • 多个环境复用同一把钥匙 → 影响面扩大,审计也更难看。

所以你要做的是:把密匙当成“安全资产”,而不是普通文件。

在 AWS 创建密匙对:从控制台到本地文件的正确打开方式

在哪里创建:EC2 的 Key Pairs

在 AWS 控制台进入 EC2,找到 Key Pairs(密匙对)。通常你会看到创建入口。创建时你需要:

  • 亚马逊云信用额度 给密匙对取个名字(建议带上环境与用途,例如:prod-bastion-2026-05)。
  • 选择密匙类型(常见是 RSA)。

创建后 AWS 会给你下载一个私钥文件(例如 .pem)。注意:AWS 不会再给你第二次下载私钥。你可以把它理解为:第一次给你钥匙原件,之后只会告诉你“钥匙你自己看着办”。

文件落地:私钥保存在哪里才算“靠谱”

把私钥文件保存到一个专用目录,比如:

  • 你的个人电脑:~/.ssh/aws-keys/
  • 服务器跳板机(如果你有跳板):把私钥只放在跳板机的受控目录

更关键的是权限。私钥文件最好仅对你可读。一般 Linux/macOS 下,你会希望权限类似:

chmod 600 your-key.pem

Windows 上也要确保权限受控(至少不要任何人都能读)。如果权限太宽,SSH 客户端常常会直接拒绝,报错大概类似“Bad permissions”。这不是它故意刁你,是它在保护你——防止别人用同一台机器偷看你的私钥。

把公钥“装进实例”:创建实例时的密匙对选择

创建实例时选对 Key Pair,不要临时起意

当你启动 EC2 实例时,流程里通常有一步会让你选择“密匙对”。你要选:

  • 与当前环境匹配的密匙对
  • 与当前用户/用途匹配的密匙对
  • 能对应你本地保存的私钥文件

如果你在创建实例时选错了密匙对,后续你就会遇到连接失败,但错误并不会告诉你“你选错了钥匙”。它只会让你怀疑人生:明明钥匙对了,怎么就握不上门把手?所以这一关请认真对待。

实例创建完成后还来得及吗?可以,但别靠运气

理论上你可以通过其他方式把新的公钥写入服务器的 ~/.ssh/authorized_keys。但这通常意味着你得能用别的方式登录(例如已有正确的密钥、或有控制台串行/用户数据方式)。所以最佳实践仍然是:创建时就选对密匙对。

如果你确实要“补救”,那就把它当作变更管理来做:记录是什么原因、换了什么密匙、谁批准、何时生效。

连接 AWS 伺服器:SSH 命令怎么写才不会翻车

最常见的连接步骤:端口、用户、IP/域名

你连接实例通常会用:

  • 实例的公网 IP 或弹性 IP(除非你走堡垒机/内网方式)
  • 安全组允许入站 22(或你自定义的 SSH 端口)
  • 正确的用户名(不同 AMI 的默认用户名可能不同)

示例命令(以 Linux 常见情况为例,用户名可能是 ec2-userubuntucentos 等):

ssh -i your-key.pem ec2-user@your-instance-public-ip

如果你把端口改成了别的,比如 2222,那么加:

ssh -i your-key.pem -p 2222 ec2-user@your-instance-public-ip

如果你不确定默认用户名是什么,你可以查看所用镜像的文档或在实例创建时的提示信息里找线索。

遇到“Permission denied (publickey)”怎么办?别慌,按顺序排查

这个错误是 SSH 世界里最常见的“你不是你”。常见原因按优先级排:

  1. 私钥与实例绑定的公钥不匹配:最常见。
  2. 私钥文件权限太松:SSH 客户端会拒绝使用私钥。
  3. 用户名不对:公钥可能被写到另一个用户目录。
  4. 安全组/网络不通:有时你以为是密钥问题,实际上端口根本没通。
  5. 实例端 SSH 配置或 authorized_keys 没写进去:极少,但也可能。

建议你用“先网络后密钥”的思路:网络不通,再好钥匙也没用;网络通了,再看密钥。

AWS 安全组与 SSH 密匙对管理:把门锁之外的门也管好

安全组不是装饰品:至少要限制来源 IP

密匙对能证明“你是谁”,但安全组负责控制“谁能敲门”。两者缺一不可。

建议至少做到:

  • SSH 端口入站仅允许你的办公网络 IP 段,或仅允许跳板机的安全组。
  • 不要开放到 0.0.0.0/0(除非你明确有安全策略并且有理由)。
  • 生产环境优先使用堡垒机(Bastion)或 SSM(Session Manager),降低暴露面。

有些人把安全组当成“临时开个口子”,然后临时变长期。那口子就像没关上的窗户:风不一定马上吹进来,但总会有一天你会发现屋里全是尘土。

密匙轮换与撤销:别让钥匙变成“永不过期的护身符”

为什么要轮换?因为世界不完美

轮换的理由很现实:

  • 员工离职/交接:私钥可能在某台电脑上、某个聊天窗口里出现过。
  • 误操作:把 .pem 发到了不该发的地方。
  • 密钥泄露:任何线上系统都有被“意外曝光”的可能。

轮换不是为了制造麻烦,是为了把影响范围缩小。你轮换越早,未来踩到坑的成本就越低。

轮换怎么做:策略比动作更重要

常见策略:

  • 按环境分开:开发、测试、生产不要共用同一把密钥。
  • 按时间或事件分开:比如每季度或每次重大变更后轮换。
  • 按用途分开:运维跳板、数据库维护、临时故障排查不要混用。

轮换动作一般包含:

  1. 创建新的密匙对。
  2. 把新的公钥部署到目标实例(通过创建新实例或变更 authorized_keys)。
  3. 验证新密钥可用(连接成功、权限正确)。
  4. 撤销旧密钥的使用范围(移除 authorized_keys 或停止与新实例使用旧密匙对)。
  5. 更新运维文档与交接记录。

注意:在移除旧密钥前,务必确认新密钥已可用,否则你会在关键时刻“锁死自己”。

撤销与删除:你以为删了就结束,其实还要确认“授权链”

AWS 控制台里你可以删除某个 Key Pair(密匙对)。但是否意味着旧实例立刻不可用?通常要看实例上到底写入了什么:实例在创建后已经把公钥写进了 authorized_keys,删除 Key Pair 并不会自动把实例里的 authorized_keys 清掉(它只是对“未来创建/配置”产生影响)。

亚马逊云信用额度 所以你要做的是:把撤销落实到服务器端授权键,或者通过重新构建实例完成治理。安全不是靠删除按钮完成的,而是靠“授权链断开”。

命名与目录管理:把“密匙对”变成可追溯资产

命名要带信息:别只叫 key1、final、真的final

很多团队的问题从命名开始:密匙对叫 my-key、文件叫 final.pem。等出事时你会发现:final 到底是哪个 final?哪天生成的?哪个环境?哪个负责人?

建议命名包含至少这些元素:

  • 环境:dev/test/prod
  • 用途:bastion/app/db
  • 时间:YYYY-MM 或版本号
  • 负责人或团队缩写(可选)

例如:prod-app-2026-05-ops

目录结构:让你未来不用“回忆杀”

私钥存储建议使用目录按环境和用途分层。例如:

~/.ssh/aws-keys/
  dev/
    app/
    bastion/
  prod/
    app/
    bastion/

你找文件就像找文件夹,而不是像在抽屉里翻中奖彩票。

亚马逊云信用额度 多用户协作与权限收口:不是每个人都该持有同一把私钥

共享私钥?这不是“省事”,这是“放大事故”

把同一把私钥发给多个同事,确实省事,但代价很高:

  • 谁泄露不清楚,追责难。
  • 离职后无法精确撤销某个成员的访问。
  • 审计和合规更难做。

建议做法是:每个运维人员持有自己的密匙对,或使用更高级的访问方式(例如基于 IAM 的受控会话)。至少也要做到“人-钥匙-权限”可追溯。

权限系统思路:最小权限原则用在 SSH 上也同样有效

如果你必须给多个角色使用服务器,尽量确保:

  • 每个角色用不同用户(或不同密钥)
  • 用户权限按需要开放(比如对需要管理的用户使用更高权限,对其他人保持受限)
  • 必要时限制命令(高级用法,按需)

亚马逊云信用额度 密匙对管理不是孤立存在,它是整套访问控制的一部分。

常见错误与快速排查清单:把“折腾”变少一点

排查顺序:网络 → 安全组 → 用户 → 密钥 → 实例端配置

当你连接失败时,请按这个顺序快速定位:

  1. 网络是否通:公网 IP 是否正确、路由是否存在。
  2. 安全组入站是否允许:22 端口是否开放到你的来源 IP 或跳板机安全组。
  3. 用户名是否正确:AMI 默认用户不一致导致公钥写入到不同账户。
  4. 私钥是否匹配:你用的 pem 是否就是该实例对应的密钥对。
  5. 私钥权限是否正确:是否是 600 或等效安全权限。
  6. 实例端是否正常:SSH 服务是否运行,authorized_keys 是否存在。

错误现象对照表:你看到的报错大概在说什么

  • Connection timed out:多半是网络/安全组问题,不是密钥问题。
  • No route to host:路由或网络路径不通。
  • Permission denied (publickey):私钥不匹配、用户名不对或 authorized_keys 不在该用户下。
  • Bad permissions:本地私钥权限不对。
  • Host key verification failed:实例被替换/HostKey 变化,需确认是否是正常替换或潜在风险。

记住:不要一上来就怀疑“是不是 AWS 坏了”。大多数情况是你把钥匙拿错了,或者门口的路被安全组挡住了。

安全建议:让密匙管理从“能用”升级到“稳用”

别把私钥当附件随手发

私钥是“凭证”。你可以把它理解成:只要拿到它,就等同于拿到门禁卡。尽量避免把私钥放在:

  • 公开代码仓库或同步盘的无权限区域
  • 聊天软件的文件转发历史里
  • 随意命名的共享文件夹中

如果你必须在团队中协作,优先采用受控的方式:集中化存储(受权限控制)、审计、最小访问等。

优先考虑无密钥访问:SSM Session Manager 是更现代的方向

虽然本文重点讲密匙对,但很多团队在成熟后会逐步减少对 SSH 密钥的依赖,例如使用 AWS Systems Manager 的 Session Manager。它能减少暴露端口和密钥管理的摩擦。

当然,不是所有场景都适用,但这是值得纳入路线图的选择。

实操范例:从创建到连接的一条龙流程(你可以照着做)

步骤 1:创建密匙对并下载私钥

进入 EC2 Key Pairs,创建新的密匙对,保存好 .pem 文件。

确认文件权限:

chmod 600 your-key.pem

步骤 2:创建或启动实例时选择该密匙对

启动实例页面选择同名 Key Pair。并确保安全组允许你的 IP 访问 SSH。

亚马逊云信用额度 步骤 3:SSH 连接验证

用正确用户名连接:

ssh -i your-key.pem your-user@your-instance-public-ip

如果成功,你就拿到了“能连”的证据;如果失败,就按前面的排查清单逐项排。

步骤 4:建立轮换计划(别等出事才想起来)

记录这把密匙的创建时间、用途、负责人,并在团队文档中写清:

  • 多久轮换一次
  • 轮换时怎么部署新公钥
  • 如何验证
  • 如何回滚

你不写计划,事故会替你写,并且用血的代价写得特别清楚。

收尾:把“密匙对管理”当成长期运营,而不是一次性配置

AWS 伺服器的 SSH 密匙对管理,看似是“创建密匙、下载文件、连上就结束”的小事,但真正决定你安全和效率的,是你对密匙生命周期的管理能力:生成时选对、保存时保护、连接时核对、协作时追溯、轮换时有章法、撤销时断授权。

如果你只记住一句话,那就是:私钥永远属于你,公钥负责证明你,但授权链断开才是真的安全。

愿你少踩坑,多连成功;愿你的服务器像门一样可靠,你只负责开门,不负责被锁在门外。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系