小李在阿里云买了第一台ECS服务器,用默认的root密码登录。几天后打开日志,他发现每天都有上千次来自陌生IP的登录尝试。服务器没有被入侵,但这件事让他明白,SSH的登录方式和安全设置要在上线前配好,不能等出了问题再补。本文按实际操作顺序,讲阿里云服务器的SSH连接方法和基本加固步骤。

连接前先核对三项
第一次连接前,先在控制台确认下面三项。连不上的问题,大多出在这里。
- 公网IP:在ECS控制台实例列表中查看并记下。内网IP无法从外部直接连接。
- 安全组放行22端口:SSH默认使用22端口。安全组没有放行时,连接会一直等到超时,报错是 Connection timed out。
- 登录用户名:CentOS 和 Alibaba Cloud Linux 一般用root,Ubuntu 镜像默认用户是ubuntu。用错用户名,报错是 Permission denied,很容易被误认为是密钥的问题。
优先用密钥对登录
密码登录容易被暴力破解。密钥对安全得多,在阿里云控制台的“密钥对”页面就能创建。创建后,浏览器会下载一个以 .pem 结尾的私钥文件。这个文件只能下载一次,丢了无法再取回,要妥善保存。
创建实例时选择该密钥对,已有实例可以在控制台绑定。之后在本地终端依次执行:
第一步,收紧私钥文件权限。Linux 和 macOS 上运行 chmod 400 你的密钥文件名.pem。权限过宽时,SSH客户端会拒绝使用这把密钥,并提示 UNPROTECTED PRIVATE KEY FILE。
第二步,执行 ssh -i 你的密钥文件名.pem root@公网IP。第一次连接时,终端会询问是否信任服务器指纹,输入 yes 即可。之后直接登录。
Windows 10 及以上版本自带 OpenSSH 客户端,在 PowerShell 中用同样的命令即可。习惯图形界面的用户可以用 PuTTY 或 Xshell,导入 .pem 文件后连接。
改端口、禁密码前,先留好退路
小李密钥登录正常后,又修改了服务器上的 /etc/ssh/sshd_config,一共改了三项:
- Port 2222:换成非默认端口。这挡不住有针对性的攻击,但能减少大量只扫22端口的自动化尝试。
- PermitRootLogin no:禁止root直接登录。做这一项之前,要先创建普通用户,并确认它能用 sudo 提权。否则你会把自己锁在门外。
- PasswordAuthentication no:关闭密码登录,只接受密钥认证。同样要先确认密钥登录稳定可用。
改完后,先执行 sshd -t 检查配置语法,没有报错即可继续。然后按下面的顺序操作:
- 在安全组里先放行2222端口。顺序颠倒,重启后就进不去了。
- 执行 systemctl restart sshd 重启服务。Ubuntu 上的服务名是 ssh,应使用 systemctl restart ssh。
- 保持当前终端不关,另开一个窗口,用新端口测试连接。
- 新窗口登录成功后,再删除安全组中的22端口规则。
较新版本的 Ubuntu 由 systemd 的 ssh.socket 管理监听端口,只改 sshd_config 里的 Port 可能不生效,需要同时修改 socket 配置。改完后,用 ss -tlnp 确认实际监听的端口。
如果旧会话关掉后,新窗口连不上,只能通过控制台的“远程连接”功能进去修复。所以旧会话要留到最后再关。
限制来源IP,并安装 fail2ban
办公地点IP固定时,在安全组里只允许这个IP访问SSH端口,授权范围最小。外部扫描器连不到登录端口,自然也无从尝试。
如果IP经常变动,可以安装 fail2ban。它会读取SSH登录日志,对多次登录失败的IP自动封禁一段时间。以Ubuntu为例,执行 apt install fail2ban 即可启用默认的SSH防护规则。如果你已经改了端口,要检查它监控的端口是否和当前端口一致,否则它拦不住新端口上的失败登录。
常见报错怎么排查
- Connection timed out:安全组没放行端口,或公网IP填错。先查安全组规则,再核对IP。
- Permission denied (publickey):用户名不对,或者用的不是创建实例时绑定的那把私钥。
- UNPROTECTED PRIVATE KEY FILE:私钥权限过宽,执行 chmod 400 即可解决。
- REMOTE HOST IDENTIFICATION HAS CHANGED:服务器重装或换系统后,本地记录的指纹和新服务器对不上。确认是你自己的操作后,删除本地 known_hosts 中对应的那一行,再重新连接。如果你不清楚原因,先不要删,这也可能是中间人攻击。
SSH配置出错时,最稳妥的做法是保留一个已登录的会话作为退路,每次只改一项设置,改完立即验证。