用一个脚本管理远程 GPU 服务器:自动挂载目录、SSH 登录、运行命令、启动推理服务。 支持 AutoDL、自建服务器等,多台服务器随时切换。
RemoteAgent/
├── .env.example ← 配置模板(从这里开始)
├── .env ← 当前使用的服务器配置(不提交到 git)
├── .env.<名字> ← 每台服务器一个配置文件(不提交到 git)
├── anthropic_proxy.py ← Anthropic API 本地代理(用于远程运行 Claude Code)
├── scripts/
│ └── remote.sh ← 所有操作的统一入口
└── <挂载目录>/ ← 远程文件在本地的映射(不提交到 git)
复制模板,填入你的服务器信息:
cp .env.example .env.我的服务器用文本编辑器打开 .env.我的服务器,修改以下几行:
# AutoDL 控制台「快捷工具 → SSH 登录」里能找到登录指令
# 例如登录指令是:ssh -p 52979 root@connect.westd.seetacloud.com
REMOTE_HOST=connect.westd.seetacloud.com # 登录指令里 @ 后面的地址
REMOTE_USER=root # 登录指令里 @ 前面的用户名
REMOTE_PORT=52979 # 登录指令里 -p 后面的端口号
REMOTE_PROJECT_PATH=/root/autodl-tmp # 想挂载到本地的远程目录
REMOTE_CONDA_PATH=/root/miniconda3 # 远程的 conda 安装路径
REMOTE_CONDA_ENV=base # 要激活的 conda 环境
LOCAL_MOUNT_POINT="/本地/挂载/目录" # 远程文件将出现在本地的哪个目录bash scripts/remote.sh use 我的服务器bash scripts/remote.sh setup-ssh这一步只需要做一次。完成后就不需要再输密码了。
AutoDL 用户强烈推荐再执行一步,让 SSH 在重启后自动恢复:
bash scripts/remote.sh setup-ssh-persistent# 查看远程文件(会自动挂载,本地目录里就能看到远程文件)
bash scripts/remote.sh run "ls -la"
# 在远程执行命令(在 conda 环境里运行)
bash scripts/remote.sh run "python train.py"
# 进入远程 shell(交互式操作)
bash scripts/remote.sh ssh
# 查看 GPU、依赖包、checkpoint 状态
bash scripts/remote.sh check-env挂载成功后,在本地的 LOCAL_MOUNT_POINT 目录里就能直接看到并编辑远程文件。
AutoDL 每次重启实例,SSH 端口(有时还有地址)都会变。根据情况用不同命令:
在 AutoDL 控制台找到新的登录指令(如 ssh -p 53001 root@connect.westd.seetacloud.com),端口变了,地址没变:
bash scripts/remote.sh reconnect 53001新登录指令地址也变了(如从 connect.bjc1 变成 connect.westd):
bash scripts/remote.sh reconnect connect.westd.seetacloud.com 53001如果 reconnect 最后提示"连接失败",说明这台服务器是新的,还没配置免密 SSH。在普通终端运行:
bash scripts/remote.sh setup-ssh输入一次密码后,再跑一次 reconnect 就好了。
如果提前做了
setup-ssh-persistent(把公钥备份到数据盘),同一台实例重启后 SSH 会自动恢复,reconnect <新端口>一条命令就够了。
| 命令 | 说明 |
|---|---|
list |
列出所有服务器配置,标注当前默认 |
use <名字> |
切换默认服务器 |
-e <名字> <命令> |
临时使用某台服务器,不改默认 |
reconnect <端口> |
仅端口变了时重连(同地址重启) |
reconnect <地址> <端口> |
地址和端口都变了时重连(换了新地区) |
setup-ssh |
配置免密 SSH,每台新服务器第一次必须做 |
setup-ssh-persistent |
公钥备份到数据盘,重启后自动恢复(AutoDL 推荐) |
mount |
手动挂载远程目录到本地 |
umount |
卸载挂载 |
remount |
重新挂载(断开后用) |
ssh |
进入远程交互式 shell |
run <命令> |
在远程 conda 环境中执行命令 |
check-env |
检查 GPU、Python 包、checkpoint 状态 |
server start |
启动推理服务器(tmux 后台运行) |
server stop |
停止推理服务器 |
server status |
查看服务器状态、日志、GPU 占用 |
server logs |
实时查看服务器日志 |
.env 里调整推理相关配置:
SERVER_PORT=5000 # 服务端口
SERVER_GPUS=0,1 # 使用的 GPU 编号
SERVER_NUM_GPUS=2 # GPU 数量
SERVER_EXTRA_ARGS="" # 额外启动参数
SERVER_CHECKPOINT_PATH=./checkpoint # checkpoint 路径(相对于远程项目目录)
TMUX_SESSION=inference # tmux session 名称启动和管理:
bash scripts/remote.sh server start # 后台启动
bash scripts/remote.sh server status # 查看状态和日志
bash scripts/remote.sh server logs # 实时跟踪日志
bash scripts/remote.sh server stop # 停止# 查看所有服务器
bash scripts/remote.sh list
# 输出示例:
# [autodl] root@connect.westd.seetacloud.com:52979 ◀ 当前默认
# [czj] czj@10.100.164.161:22
# 切换默认服务器
bash scripts/remote.sh use czj
# 临时用另一台(不改默认)
bash scripts/remote.sh -e czj run "nvidia-smi"
bash scripts/remote.sh -e autodl server status添加新服务器:
cp .env.example .env.新名字- 修改连接信息
bash scripts/remote.sh use 新名字- 在普通终端运行
bash scripts/remote.sh setup-ssh
Q:挂载失败,提示 Permission denied 或 Host key verification failed?
还没配置免密 SSH。在普通终端运行 bash scripts/remote.sh setup-ssh,输入一次密码即可。
Q:本地挂载目录突然没内容了?
网络断开导致 SSHFS 挂载失效。运行 bash scripts/remote.sh remount 重新挂载。
Q:AutoDL 每次重启都要重新配置,麻烦吗?
做一次 setup-ssh-persistent,之后重启只需 reconnect <新端口>,十秒内搞定。
Q:换了新 AutoDL 实例(不是重启,是新租的),怎么办?
新实例需要重新 setup-ssh。流程:reconnect <新地址> <新端口> → 看到连接失败提示 → setup-ssh 输入密码 → 完成。
Q:公钥复制到多台服务器安全吗? 完全安全。公钥就像一把锁,私钥(钥匙)永远留在你本地,不会泄露。