华为云 ECS 安全加固实战:SSH 密钥登录 + Tailscale 私有网络
新开的云服务器暴露在公网上,22 端口很快就会被各种扫描器盯上。今天在一台华为云 ECS(Ubuntu 24.04 LTS,2 核约 2G 内存,40G 磁盘)上做了两件事:改用 SSH 密钥登录并关闭密码登录,再用 Tailscale 组建私有网络,让 SSH 不再依赖公网端口。下面是完整步骤和踩过的坑。
一、配置 SSH 密钥登录
1. 本地生成密钥
在自己的电脑上执行:
ssh-keygen -t ed25519 -C "my-laptop"
ed25519 密钥短、安全、速度快,一路回车即可(建议设置私钥口令)。公钥默认在 ~/.ssh/id_ed25519.pub。
2. 把公钥写入服务器
先用密码登录服务器,然后:
mkdir -p /root/.ssh
chmod 700 /root/.ssh
echo "<你的公钥内容>" >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
权限很关键:.ssh 目录必须是 700,authorized_keys 必须是 600,否则 sshd 会直接忽略密钥。本地有 ssh-copy-id 的话也可以用 ssh-copy-id root@<服务器公网IP> 一步完成。
3. 测试密钥登录
保持当前会话不要关闭,另开一个终端:
ssh -i ~/.ssh/id_ed25519 root@<服务器公网IP>
能免密进入,才进行下一步。
4. 关闭密码登录
编辑 /etc/ssh/sshd_config,设置:
PasswordAuthentication no
注意 Ubuntu 24.04 的坑:主配置文件开头会 Include /etc/ssh/sshd_config.d/*.conf,而 sshd 对同一选项以首次出现的值为准。云镜像里的 50-cloud-init.conf 常常写着 PasswordAuthentication yes,会让你的修改失效。检查一下:
grep -r PasswordAuthentication /etc/ssh/sshd_config.d/
把其中的值也改为 no,然后校验并重启:
sshd -t && systemctl restart ssh
sshd -T | grep -i passwordauthentication
最后一条输出 passwordauthentication no 才算真正生效。再开新终端确认密钥仍能登录,之后再关掉旧会话。万一把自己锁在外面,还可以通过华为云控制台的 VNC 远程登录补救。
二、安装 Tailscale 组建私有网络
curl -fsSL https://tailscale.com/install.sh | sh
systemctl enable --now tailscaled
tailscale up
tailscale up 会打印一个登录链接,在浏览器中打开并授权该设备加入你的 tailnet。完成后查看分配的地址:
tailscale ip -4
会得到一个 100.x.x.x 的地址。Tailscale 基于 WireGuard,节点之间尽量点对点直连,打不通时才经由中继转发,流量全程加密;对于个人或小团队管理几台服务器来说,免费额度完全够用,也不需要自己维护 VPN 服务端。本地电脑同样安装 Tailscale 并登录同一账号后,就可以走私有网络登录:
ssh root@<服务器Tailscale IP>
确认稳定可用后,可以到华为云控制台的「安全组 → 入方向规则」中删除或收紧 22 端口的放行规则,让 SSH 彻底不暴露在公网上。建议先保留控制台 VNC 作为兜底通道。
三、两个小提示
重启后短暂拒绝连接。 新建或刚重启的 ECS,系统和 sshd 启动需要一点时间,前几十秒出现 Connection refused 或超时是正常的,稍等再试即可,不必急着排查配置。
小内存加 swap。 2G 内存跑点编译或容器容易 OOM,进程被内核直接杀掉时往往没有明显报错,排查起来很费时间。建议加 2G swap:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
free -h
最后一行写入 /etc/fstab 保证重启后自动挂载,free -h 能看到 Swap 一栏即表示成功。
总结
密钥登录替代密码,从根源上杜绝暴力破解;sshd_config.d 下的覆盖配置是 Ubuntu 24.04 最容易忽略的地方,务必用 sshd -T 验证。Tailscale 让服务器管理走私有网络,配合安全组关闭公网 22 端口,攻击面会小很多。整个过程最重要的原则只有一条:每一步改动都先验证,再关掉旧会话。
- 点赞
- 收藏
- 关注作者
评论(0)