第一次给阿里云ECS选登录方式时,多数人都会卡在一个选择上,用密码还是用密钥对?密码看着省事,可服务器一旦暴露在公网上,暴力破解的尝试很快就会出现。密钥对由一对公钥和私钥组成,公钥放在服务器上,私钥留在自己手里,登录时两者配对验证,密码本身不会在网络上传输。下面从创建、绑定、登录到日常管理,把整个流程走一遍。

先分清密钥对和AccessKey
新手最容易混的就是这两个词。阿里云里确实有两类”密钥”,用途不一样。
- 密钥对(Key Pair):用于通过SSH登录ECS实例,是一对非对称密钥,私钥下载到本地。
- AccessKey(访问密钥):用于调用阿里云API或SDK,由AccessKey ID和AccessKey Secret组成。
一句话区分,密钥对负责进服务器,AccessKey负责调接口。两者不能互相代替。AccessKey尤其不能写进代码仓库,也别随手发给同事。
创建密钥对
登录ECS控制台,在左侧导航找到”网络与安全”,进入”密钥对”页面,点击”创建密钥对”。名称可以填得直接一点,比如 prod-web-keypair。地域要和目标ECS实例保持一致,密钥对是按地域管理的,选错了后面绑定时会找不到。
提交后控制台会生成密钥对并提示下载私钥,文件后缀通常是 .pem。私钥只能下载一次,之后控制台不会再给。丢了就只能重新创建并更换绑定,所以下载完成后马上备份到可靠的位置,比如加密的密码管理器或受控的存储。
导入本地已有的公钥
如果团队本来就在本地用 ssh-keygen 生成过密钥,也可以选择”导入密钥对”,省得再下载一份。生成时推荐用ED25519算法,密钥更短,同等场景下通常也比传统RSA更省心。命令大致如下。
ssh-keygen -t ed25519 -C “ops@example.com” -f ~/.ssh/aliyun_prod
执行后得到两个文件,私钥 aliyun_prod 和公钥 aliyun_prod.pub。在导入页面粘贴公钥内容即可。这种方式下私钥从头到尾不离开本地,阿里云侧只保存公钥,安全边界更清楚。
绑定到ECS实例
密钥对建好后,还要绑到具体实例上。在ECS实例列表里找到目标机器,通过”更多”进入密钥对管理,选择新密钥对完成绑定。更换时通常要求实例处于停止状态,所以尽量安排在业务低峰期,并提前确认哪些依赖服务需要随之重启。
如果是新购实例,步骤就简单多了。在购买页面的”登录凭证”一栏直接选”密钥对”,指定已有的密钥对即可,不用事后再绑。
一次换钥匙后的排查
某电商团队维护一台生产ECS时,把密钥对从 keyA 换成了 keyB,本地配置却没同步更新。第二天运维同学还用旧私钥连接,一直报 Permission denied,排查了半小时才发现:服务器上的公钥已经换了,他手里还是旧私钥。之后团队定了个规矩,更换前先把新私钥发给所有需要登录的人,并在变更单里写清生效时间。这个小流程之后再没出过类似的问题。
用密钥对登录
拿到私钥后,先在本地收紧权限。权限过于开放时SSH会直接拒绝使用私钥,这一步不能省。执行下面这条命令即可。
chmod 400 prod-web-keypair.pem
然后连接服务器。默认用户一般是 root 或 ecs-user,具体要看镜像。连接命令可以这样写。
ssh -i prod-web-keypair.pem root@你的公网IP
Windows用户可以用 PuTTY,也可以直接用 Windows Terminal 或 PowerShell 里自带的OpenSSH客户端,过程一样,只要把私钥路径指对。
日常管理的几条底线
密钥对安全与否,很大程度取决于平时怎么管,下面几条值得长期执行。
- 私钥文件只给本人读写,不要通过聊天工具或邮件传来传去。
- 开发、测试、生产用不同的密钥对。一把钥匙泄露时,影响范围才能控制在一个环境内。
- 有人离职或设备丢失,就换掉相关密钥对,并翻一遍登录日志,看看有没有异常连接。
- 在安全组里把SSH端口(默认22)的来源限制到办公网络或堡垒机IP段,别对全网开放。
- 定期轮换密钥,长期没换过的生产环境密钥优先处理。
如果服务器之前开着密码登录,等密钥登录确认没问题后,可以在 sshd 配置里把 PasswordAuthentication 设为 no,然后重启SSH服务。这一步能挡住大量自动化的暴力破解。改之前一定先保留一个已经登录的会话,万一配置写错,还能从这个会话里改回来,否则自己也可能被关在门外。
小结
流程本身不复杂,创建或导入,绑到实例,私钥自己保管好,然后用SSH登录。安全性很大程度取决于私钥怎么保管、环境怎么隔离、访问范围收得有多紧。这几件事做扎实,比纠结某个控制台选项更划算。