AI服务器安全加固:从SSH到GPU访问的实操清单
AI服务器安全加固的核心不是装一堆安全软件,而是先把“谁能连进来、能连哪些端口、连进来能做什么”这三件事管住。
对大多数跑训练或推理的GPU服务器来说,最容易被利用的入口是开放的SSH、未加限制的Jupyter/API端口,以及多人共用root账号。
下面按可落地的顺序给出操作清单,适用于Ubuntu 20.04/22.04或同类Linux发行版,操作前请确认你有控制台或带外管理权限,避免改错SSH后把自己锁在外面。
先摸清暴露面:哪些端口正在对公网开放
加固前先做一次自查,别凭感觉关端口。
登录服务器后执行:
ss -tulnp
重点看监听在0.0.0.0或::的端口,尤其是22、8888、6006、8000、9000这类常见训练和推理端口。
如果服务器有公网IP,再配合云厂商安全组确认入方向规则。
预期结果是:只保留必要的管理端口和业务端口,其余先记录再处理。
同时检查是否有异常登录:
last -n 20
grep 'Failed password' /var/log/auth.log | tail -20
如果发现大量失败登录或陌生IP成功登录,先修改密码、禁用可疑账号,再继续后面的加固。
SSH加固:密钥登录、禁root、限来源
SSH是AI服务器最常被暴力破解的入口,优先处理。
- 在本地生成密钥并上传公钥:
ssh-keygen -t ed25519 -C "ops@ai-node"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
- 确认免密登录成功后,编辑
/etc/ssh/sshd_config,修改或确认以下项:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
- 如果管理IP固定,再加一层来源限制:
AllowUsers ops@192.168.1.0/24
- 检查配置并重启:
sshd -t
systemctl restart sshd
避坑:改完不要直接关闭当前终端,先新开一个窗口用密钥登录验证,确认成功后再退出旧会话。
如果用了AllowUsers,务必把实际登录用户和网段写对。
网络层收口:防火墙只放行必要端口
以UFW为例,先放行SSH再启用,防止断连:
ufw allow from 192.168.1.0/24 to any port 22 proto tcp
ufw allow 8000/tcp
ufw enable
ufw status numbered
GPU训练常用的Jupyter或TensorBoard端口,不要直接暴露公网,建议只允许跳板机或内网网段访问。
如果必须公网访问,至少在前面加Nginx反向代理并配置认证。
云服务器还要同步检查安全组,安全组和系统防火墙是两层,别只改一层。
GPU与训练服务的访问控制
多人共用GPU服务器时,常见问题是所有人都用root跑任务,一旦某个服务被攻破,整机权限全丢。
建议:
- 为每个使用者创建独立系统用户,加入
docker或专用用户组,按需授权。 - 训练服务不要以root启动,检查
systemd服务文件中的User=项。 - 如果使用Docker,避免把
/var/run/docker.sock挂载给不可信容器。 - 用
nvidia-smi确认GPU访问正常,同时检查是否有未知进程占用GPU:
nvidia-smi
ps aux | grep -E 'python|train' | grep -v grep
发现陌生训练进程,先保留现场再排查来源,不要直接kill了事。
验证加固是否生效
改完后做三项检查:
- 从非授权IP尝试SSH,预期被拒绝或超时。
- 用
ss -tulnp复查,确认没有多余公网监听。 - 查看
/var/log/auth.log,确认没有新的异常登录记录。
安全加固不是一次性的,建议把端口清单、账号列表和防火墙规则纳入日常巡检。
AI服务器承载训练数据和模型资产,入口越少,后续排错和审计越轻松。
如果你还在调整GPU环境,可结合服务器监控一起做,先保证能看见异常,再谈拦截。