给新买的阿里云 ECS 配置密码登录,是很多人的默认做法。省事,但密码稍微简单一点,或者几个月没换过,服务器就容易被扫描工具盯上。翻开 /var/log/secure(Ubuntu 上是 /var/log/auth.log),常能看到成批来自陌生 IP 的失败记录。

阿里云的 SSH 密钥登录思路是:本地保存私钥,服务器保存与之配对的公钥。连接时双方完成验证,密码不在网络上传输,暴力猜密码的路子就走不通了。对要长期维护的服务器来说,这比单靠一个复杂密码可靠得多。
一个常见的场景
设想一个小团队有三台 ECS,分别跑官网、后台接口和测试环境,运维一直用同一个 root 密码登录。某天有人翻日志,发现 /var/log/secure 里有几千条来自不同境外 IP 的失败记录,对方在逐个尝试常见用户名和弱口令。
这类情况的处理通常分三件事:为每台服务器创建密钥对,关闭密码登录,把 22 端口的来源限制在办公网络的出口 IP。下面的步骤就按这个顺序展开。
第一步:在控制台创建密钥对
进入 ECS 管理控制台,在左侧导航找到密钥对,点击创建。填写名称、选择地域,创建完成后系统会下载一个以 .pem 结尾的私钥文件。
这个私钥只下载一次,控制台之后不再提供。如果丢了,只能重新创建密钥对并绑定到实例。下载后放在只有自己能访问的目录里,不要通过聊天工具或网盘发给别人。
第二步:把密钥对绑定到实例
新购实例时,在购买页的登录凭证选项中直接选择刚创建的密钥对即可。已经在运行的实例,在实例列表中找到目标机器,进入更多操作,选择绑定密钥对。
部分操作要求实例处于停止状态,具体以控制台提示为准,别在业务高峰期直接动手。绑定成功后,公钥会写入服务器上对应用户的授权文件中,之后就可以用私钥登录了。
第三步:本地连接服务器
这一步在本地电脑上完成,Linux 和 Windows 的操作方式不同,下面分开说明。
Linux 与 macOS
系统终端自带 ssh 客户端。先收紧私钥权限,否则 ssh 会因为文件过于开放而拒绝使用,报错里通常会出现 UNPROTECTED PRIVATE KEY FILE 的字样:
- 执行 chmod 400 your-key.pem,让私钥只对当前用户可读。
- 执行 ssh -i your-key.pem root@你的公网IP 发起连接。
如果镜像默认用户不是 root,比如部分系统默认是 ecs-user,就把命令里的用户名换成实际账号。第一次连接时终端会询问是否信任服务器指纹,确认 IP 无误后输入 yes。
每次都敲 -i 比较烦,可以在 ~/.ssh/config 里写一段配置,指定 HostName、User 和 IdentityFile,之后直接用别名连接。
Windows
这里说的 Windows 指的是本地电脑。如果服务器本身是 Windows 实例,密钥对登录一般不适用,需要用实例密码通过远程桌面连接。
本地连接 Linux 服务器有两条路。一是使用 Windows 自带的 OpenSSH 客户端,命令和 Linux 基本一致,但要先处理私钥权限。可以在 PowerShell 中用 icacls 去掉私钥的继承权限,只保留当前用户的读取权限,否则同样会被拒绝。二是使用 PuTTY 或 Xshell 这类图形工具。PuTTY 不直接识别 .pem,需要先用 PuTTYgen 导入私钥并导出 .ppk 格式,再在连接配置的 Auth 选项里指定这个文件。
第四步:关闭密码登录
密钥能登录,不代表密码登录已经关掉。如果 PasswordAuthentication 仍然开着,攻击者照样可以继续猜密码。确认密钥连接正常之后,再修改服务器的 SSH 配置。
用编辑器打开 /etc/ssh/sshd_config,确认下面两项:
- PubkeyAuthentication yes:允许公钥认证。
- PasswordAuthentication no:禁止密码登录。
改完先执行 sshd -t 检查语法,没有报错输出就说明没问题。然后重启服务,CentOS 等系统一般用 systemctl restart sshd,Ubuntu 上服务名通常是 ssh,要以实际系统为准。
关键一步是:在关闭密码登录之前,另开一个终端窗口,用密钥再连一次,确认能进去。当前会话先别关。如果配置出错导致断开,又没有可用的连接,只能通过控制台的远程连接功能进入服务器修复。
常见问题与注意事项
有几处容易踩坑。首先是 Windows 实例,前面已经提过,它一般不走 SSH 密钥对登录,别在它身上反复折腾密钥。
其次是安全组。22 端口如果对 0.0.0.0/0 全部开放,入口就直接暴露在公网上。密钥登录本身很安全,但扫描和撞库的噪音依然会持续。最好只放行固定的办公出口 IP。出口 IP 会变的话,就定期在安全组里更新,别图省事全开。
然后是多人协作。多人共用一把私钥,等于谁都能进,离职时也没法单独收回权限。更合理的做法是每人一把密钥,公钥分别写入对应账号,人员变动时只删除相应的公钥。
最后,私钥一旦泄露,就等于把服务器的登录凭证交了出去。不要提交到代码仓库,也不要写进公开的部署模板或截图里。一旦怀疑泄露,应尽快更换密钥对,并检查服务器上的登录记录。
小结
整个流程并不复杂:创建密钥对,绑定到实例,本地收紧权限后连接,确认无误再关闭密码登录。Linux 和 Windows 的差别主要在本地工具和私钥权限的处理上。对承载业务的服务器来说,这几步的操作成本不高,换来的是少了很多不必要的暴露面。手上如果还有几台 ECS 在用密码登录,可以先从最重要的那台开始切换。