拿到GPU服务器租用实例后,很多开发者会立刻上传代码,却忽略SSH口令、监听端口和服务暴露范围。训练脚本、模型权重与接口一旦直接暴露到公网,风险远高于普通开发机。本文用一套最小配置,完成实例上线前的基础检查。
一、问题背景
GPU算力平台常通过SSH、JupyterLab或WebUI提供入口。弱口令、无关端口或服务监听所有网卡,可能带来扫描与误访问。大模型训练和推理部署运行时间长,安全配置应在上传数据前完成。
安全并不是把所有端口关闭,而是只开放当前任务需要的入口,并限制访问来源。AI算力平台控制台规则与Linux主机配置应同时检查,避免只改其中一层。
二、环境准备
准备本地电脑、云GPU实例及备用会话。修改SSH前不要关闭当前连接,并记录端口规则、登录用户和应用端口。
润云智算提供按需GPU实例、平台镜像及SSH、JupyterLab等开发入口,可从官网查看实时资源。不同镜像的默认用户与访问方式可能不同,应以实例页面说明为准。
三、实操步骤
1. 在本地创建独立密钥
bash
ssh-keygen -t ed25519 -a 64 \
-f ~/.ssh/gpu_project_ed25519 \
-C "gpu-project"
为密钥设置口令,不要把私钥上传到聊天工具、网盘或代码仓库。.pub公钥可写入授权列表。
2. 安装公钥并测试新连接
bash
ssh-copy-id -i ~/.ssh/gpu_project_ed25519.pub user@server_ip
ssh -i ~/.ssh/gpu_project_ed25519 user@server_ip
没有ssh-copy-id时按平台文档添加公钥。确认新窗口能登录后再修改。
3. 收紧SSH配置
先备份配置:
bash
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sshd -t
在配置中确认或设置:
text
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
MaxAuthTries 3
先执行sudo sshd -t检查语法,再重载SSH。禁用密码前必须验证密钥登录;托管镜像应优先遵循平台文档。
4. 盘点真实监听端口
bash
ss -lntup
sudo lsof -i -P -n | head -n 30
区分127.0.0.1与0.0.0.0:前者仅本机访问,后者可能对外暴露。TensorBoard、Jupyter和临时API不应默认公开。
5. 用SSH隧道访问本地服务
假设Jupyter只监听实例的127.0.0.1:8888,可在本地执行:
bash
ssh -i ~/.ssh/gpu_project_ed25519 \
-L 8888:127.0.0.1:8888 user@server_ip
随后访问本地http://127.0.0.1:8888,无需把开发端口暴露公网。
6. 最小化平台端口规则
仅保留SSH和业务端口,并限制到可信来源。正式API还应配置鉴权、限流与日志。
最后验证允许与阻断结果并保存清单,再进入模型上传和推理部署。
四、常见问题与解决方案
1. 关闭密码后无法登录
保持原会话不要退出,恢复备份配置并检查公钥权限。~/.ssh通常应仅允许本人访问,authorized_keys也不应对其他用户开放写权限。
2. 服务端口未开放却仍可访问
检查进程监听地址、已有会话、反向代理及平台规则,确认测试的是公网地址而非SSH隧道。
3. Jupyter必须开放公网吗
多数个人开发场景不需要,可通过SSH隧道访问。确需共享时,应启用令牌或登录认证并限制来源。
4. 更换镜像后规则还在吗
平台规则和系统配置的保留方式可能不同。重建实例后应重新执行清单,不要假设旧配置自动继承。
五、总结
实例安全的核心是密钥登录、禁止高风险入口、盘点监听端口与限制来源。通过平台规则和主机配置双重检查,可以减少开发服务误暴露。
FAQ
Q1:SSH端口改成非常用端口就安全吗?
只能减少部分扫描,不能替代密钥、来源限制和登录日志。
Q2:私钥可以多人共用吗?
不建议。每位成员应使用独立密钥,便于撤销与审计。
Q3:训练结束后要做什么?
备份必要产物,删除临时凭据和敏感缓存,再按平台流程关停实例。
Q4:正式API只开放一个端口够吗?
端口最小化只是基础,还要配置鉴权、TLS、限流、日志和异常告警。