返回列表

Azure 优惠券 Azure微软云服务器SSH密钥对管理

微软云Azure / 2026-05-11 12:48:21

下载.png

前言:SSH密钥对不是“文件”,是你的门禁卡

如果把服务器想成一家店铺,那么SSH密钥对就是你手里的门禁卡:卡片(私钥)要牢牢保管,门口的机器(公钥)要正确安装。很多人刚开始会觉得“上传一下公钥就行了”,然后在某一天突然发现:登录不了、权限不对、旧密钥还在、轮换地狱开始了……

本文就围绕标题“Azure微软云服务器SSH密钥对管理”,用更接地气的方式,把密钥对从生成到生命周期管理讲明白。你会看到:如何生成密钥、如何把公钥喂给Azure实例、如何避免权限事故、如何做轮换与撤销,以及遇到登录失败到底该怎么查。准备好了吗?把私钥收好,咱们开门营业。

你需要先搞清楚:Azure里SSH密钥对到底在管什么

在Azure上,SSH登录通常依赖“私钥+公钥”这一对儿。用户在本地用私钥证明身份,Azure虚拟机在远端用公钥校验。

私钥:千万别出门

私钥是“能开门的那把钥匙”。它只应该在你本地或受控的安全存储里存在。不要把私钥复制到不受信任的机器上,不要用邮箱/聊天工具转发,不要随便提交到代码仓库(对,就是你“临时拷一下”的冲动)。

公钥:可以上门“贴在墙上”

Azure 优惠券 公钥通常可以发布给服务器。服务器保存公钥,日常验证登录是否能用对应的私钥解密签名。

密钥对管理:你真正要管的是“生命周期”

密钥对不是一劳永逸。你至少会遇到四类问题:

  • 新增服务器:如何快速、规范地安装公钥。
  • 权限变更:某个账号离职/角色变更,如何撤销访问。
  • 安全升级:定期轮换密钥,降低被长期破解的风险。
  • 故障排查:登录失败时如何判断是密钥问题还是网络/账号问题。

接下来我们按这个节奏走。

第一步:生成SSH密钥对(本地生成,远端只放公钥)

Azure上并不要求你“必须用某一种工具生成密钥”,常见的做法是用OpenSSH生成一对密钥。关键点是:算法、位数、文件权限、以及命名规范。

推荐算法:优先选ed25519

如果你还在用老式RSA(特别是4096以下那种),那也能用,但现代更推荐ed25519,原因是安全性强、速度快、密钥更短更好管理。

在Linux/macOS或Windows(OpenSSH)上,可以使用类似命令生成:

ssh-keygen -t ed25519 -C "your-email-or-tag" -f ~/.ssh/azure_demo_ed25519

生成过程中你会被询问是否设置passphrase(口令)。强烈建议设置,哪怕麻烦一点点:如果私钥文件被拷走,没有口令就等于拿到钥匙还没配门锁。

文件权限:别让系统“替你乱来”

很多登录失败,罪魁祸首不是公钥,而是私钥文件权限太宽。

你可以检查一下权限(以Linux/macOS为例):

chmod 600 ~/.ssh/azure_demo_ed25519
chmod 644 ~/.ssh/azure_demo_ed25519.pub

私钥通常要求600,公钥可以644。

命名规范:别让自己在未来“认不出哪把钥匙属于哪个环境”

建议在命名里带上环境和用途,比如:

  • prod:生产
  • stage:预发
  • dev:开发
  • appname:应用名

例如:~/.ssh/prod_web_1_ed25519。未来你轮换、撤销的时候会感谢现在的自己。

第二步:把公钥加入Azure虚拟机(或云端用户配置)

Azure创建Linux虚拟机时,通常会要求你提供SSH公钥。你也可以在后续通过标准方式把公钥写入目标用户的~/.ssh/authorized_keys里。下面按“常见场景”说。

场景A:创建虚拟机时直接填入公钥

当你在Azure门户创建Linux虚拟机(VM)时,往往会有类似“SSH public key”的输入框。你需要把.pub文件内容复制进去。

公钥文件通常在:

~/.ssh/azure_demo_ed25519.pub

复制时注意:是整行内容。别只复制开头的“ssh-ed25519”标签就以为完事了。整段包括后面的key串和注释。

复制进Azure后,一般就能完成初次部署的登录授权。

场景B:已创建的虚拟机后续添加公钥

如果你已经有一台VM,但忘了在创建时填公钥,别慌。你可以通过已有方式登录(例如你还有其他可用的管理员方式),然后把新的公钥写入授权列表。

在目标机器上,对应用户执行(示例为azureuser):

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

把公钥追加到authorized_keys里,每个公钥单独一行。

然后确认权限:

chmod 600 ~/.ssh/authorized_keys

这里又是一个“常见坑”:权限错了,SSH会拒绝使用。

避免重复公钥与混乱:加之前先去重

如果你频繁轮换密钥,很容易把同一个公钥重复塞进去,虽然通常不会导致致命错误,但会让审计和排查变得更痛苦。你可以在写入前做检查(例如用grep找一找key指纹)。

第三步:SSH客户端配置(让你登录更顺滑,也更不容易踩坑)

有了密钥对之后,下一步就是让你的SSH客户端能“准确指路”。你不想每次都手动加-i,也不想把不同环境的IP账号混着用。

Azure 优惠券 使用ssh config管理多环境

编辑本地~/.ssh/config,加入例如:

Host vm-prod-web-1
  HostName 1.2.3.4
  User azureuser
  IdentityFile ~/.ssh/prod_web_1_ed25519
  IdentitiesOnly yes

之后你登录只要:

ssh vm-prod-web-1

IdentitiesOnly yes很关键:确保SSH只用你指定的IdentityFile,而不是试图对其他密钥“碰碰运气”。这能减少登录失败时的排查范围。

常见错误提示与含义

  • Permission denied (publickey):公钥可能没装对、用户名不对、authorized_keys权限不对,或你用错私钥。
  • Bad permissions:通常是~/.ssh或私钥/authorized_keys权限问题。
  • no matching key exchange method:可能是服务端/客户端算法协商问题(较少见,通常是老客户端或旧配置)。
  • Connection timed out:网络层问题(NSG、防火墙、路由)。密钥再对也没用。

看到提示你就该先分流:到底是认证问题还是网络问题。

第四步:权限与安全基线(很多人卡在这里,但其实原因很“朴素”)

SSH密钥对管理的核心不仅是“生成”和“粘贴”,还包括一套可预期的权限策略。

服务器侧权限基线

在Linux服务器上,对典型目录和文件的权限保持一致:

  • ~/.ssh:700
  • ~/.ssh/authorized_keys:600

另外,确认home目录的属主一致,避免出现你以为是某用户,结果实际不归它管的尴尬。

本地侧权限基线

本地的私钥一般建议:

  • 私钥:600
  • 公钥:644

另外,如果你在团队里共享这把钥匙(强烈不建议),至少要确保每个人都知道passphrase的重要性。

建议:不同用途不同密钥对

比如:

  • 运维管理员:用管理密钥
  • 应用部署用户:用部署密钥
  • 自动化脚本(CI/CD):用专用密钥,并设定轮换策略

这样你撤销某类访问时不会牵连其他业务。

第五步:密钥轮换(是的,你早晚要做,而且应该做得有条理)

轮换密钥并不意味着“把旧的立刻删掉然后祈祷”。正确姿势是:在一段重叠期内同时保留新旧密钥,确保业务与运维无中断。

轮换的推荐节奏:新增→验证→撤销旧

假设你要给prod_web_1轮换:

  1. 生成新密钥对(本地)
  2. 把新公钥追加到服务器的authorized_keys
  3. 在本地用新私钥验证登录
  4. 确认稳定后,再移除旧公钥
  5. 保留必要的审计记录与变更说明

如果你直接删旧密钥再测试,属于“电视剧式操作”。测试没过,就会变成“谁来救场”的呼叫地狱。

如何标记轮换的版本(让你以后看得懂)

给公钥的-C注释部分加版本信息,例如:

ssh-keygen ... -C "prod_web_1 v2 2026-05"

这样查看authorized_keys时,你一眼就能分辨是哪一轮。

移除旧密钥要小心:删的是旧公钥,不是整文件

你应该只移除对应那一行(或者对应key段),不要一时手滑清空整个authorized_keys。如果多人协作,还要确认别把别人的公钥删了。

第六步:撤销与应急(当账号离职或怀疑泄露,别硬扛)

撤销的目标很明确:让“怀疑被泄露的私钥”无法再登录。

撤销方法:从authorized_keys移除公钥

如果你怀疑某把私钥泄露了,那么需要在服务器侧移除对应公钥。步骤:

  • 定位authorized_keys中的目标公钥(可以通过注释或key片段匹配)
  • 删除该行
  • 保存并确认权限正确(600/700)
  • 从本地尝试使用泄露的那把私钥登录(应失败)

注意:如果你不止一台服务器,别只撤销一台。SSH密钥通常是“通用”的,你要看它是否被投喂到了多台机器。

应急策略:为避免“全员断网”,不要只靠一次撤销

更安全的应急方式是先:

  • 先新增一个紧急可用的替代密钥
  • 验证能登录
  • Azure 优惠券 再撤销被怀疑密钥

这样你的运维权限不会在最慌的时候突然消失。

第七步:排查登录失败(把不确定变成确定)

登录失败的原因通常分为三大类:密钥/权限、账号/配置、网络。你要像侦探一样分层排查,而不是把所有排查都写进同一个“猜猜看”Excel里。

1)先看SSH客户端日志:-vvv是你的放大镜

用:

ssh -vvv vm-prod-web-1

关注这些点:

  • Azure 优惠券 它到底加载了哪些identity文件
  • 它是否真的把publickey发给了服务器
  • 服务器拒绝的具体原因(publickey被拒通常有提示)

2)确认用户名与服务端账户存在

很多人把User写错了。比如Azure默认用户叫azureuser,你却用ubuntu去连,当然失败。

确认方法:

  • 查看你在创建VM时填写的用户名
  • 如果能通过控制台/其他方式登录,检查真实用户

3)检查authorized_keys权限和内容

在服务器上检查:

ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys | tail -n 5

重点是权限与内容是否存在、是否多余空格/换行导致内容异常(少见但也发生过)。

4)如果是网络问题:端口没通就别怪密钥

通常SSH默认端口22。你要检查:

  • 虚拟机网络安全组(NSG)是否放行22
  • 是否有防火墙策略
  • 公网IP是否正确、是否走了跳板/私网连接

如果是timed out,优先怀疑网络。

第八步:团队协作与审计(让“知道怎么做”变成“能复盘怎么做”)

当你从个人使用升级到团队运维,SSH密钥对管理就要开始“讲规矩”。否则到最后,没人知道到底谁把哪把密钥加过。

建议的管理要点

  • 密钥命名包含环境、用途、版本号、创建时间
  • 轮换和撤销要形成变更记录(谁、何时、影响范围)
  • 避免共享同一把密钥给多个人(至少要做到可追溯)
  • 自动化脚本使用单独密钥,且设置更短轮换周期

审计思维:你要能回答三个问题

  • 这台VM上当前有哪些公钥?对应哪些负责人或系统?
  • 最近一次轮换是什么时间?发生了哪些变更?
  • 如果怀疑某把密钥泄露,影响范围覆盖哪些VM?

当你能回答这三个问题,SSH密钥对管理就已经从“手工魔法”升级为“可控工程”。

Azure 优惠券 实战操作清单:把流程装进你的口袋

下面给你一个简化但完整的清单。你以后每次做SSH密钥对相关变更,都照着勾一遍。

创建/初始化

  • 生成新密钥对(推荐ed25519)
  • 设置passphrase
  • 检查私钥权限(600)
  • 在Azure创建VM时填入公钥,或后续写入authorized_keys
  • 本地配置ssh config(IdentityFile+User+HostName)
  • 验证:能用新密钥登录

轮换

  • 生成新密钥对(带版本标记)
  • 追加新公钥到authorized_keys
  • 验证登录成功
  • 确认一段重叠期无异常
  • 移除旧公钥
  • 记录变更与影响范围

撤销/应急

  • 新增紧急可用替代密钥(如需要)
  • 从authorized_keys移除疑似泄露对应公钥
  • 验证泄露密钥登录失败
  • 检查是否影响多台VM与多账号
  • 更新团队记录与后续复盘

常见坑位总结:你踩过的,可能大部分是这些

  • 把私钥发给了服务器:不需要也不应该。服务器只需要公钥。
  • authorized_keys权限不对:SSH直接拒绝使用,常见错误。
  • 复制公钥不完整:只复制了部分内容导致无法匹配。
  • Azure 优惠券 用错用户名:User写错就是“公钥再美也不能进门”。
  • 多环境密钥混用:导致排查时越来越像在做迷宫游戏。
  • 轮换时直接删旧:重叠期缺失会带来不必要的中断风险。
  • 忘记撤销旧密钥:你以为结束了,其实旧门禁卡还在。

结语:把密钥对管理做成“流程”,你的未来会感谢你

Azure上的SSH密钥对管理,本质上就是:生成可靠的密钥、正确安装公钥、遵守权限基线、按节奏轮换与撤销,并且在失败时有可复盘的排查路径。

Azure 优惠券 你不必成为安全专家,但你需要像工程师一样做事情:有命名、有记录、有验证。这样当有一天你不得不面对“登录失败”“权限撤销”“疑似泄露”,你不会慌,你会按清单执行。

最后送你一句话:密钥管理最怕的不是复杂,而是“随手一做”。把它做成流程,你就赢了。

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