用 Claude Code 管理远程服务器的典型场景
装好 xssh 并为 agent 安装 skill 后(见 快速开始),你只需要用自然语言描述任务。下面是常见场景,以及 agent 在背后用到的 xssh 命令,方便你理解和审查它的操作。
排查线上故障
web1 上的接口返回 502,帮我查一下原因。
agent 通常会这样做:
xssh status web1 # CPU、内存、磁盘、端口、服务概况
xssh diag web1 # 自动诊断,给出发现和建议命令
xssh logs web1 --unit nginx --since 15m --priority err
xssh logs web1 --file /var/log/app/error.log --grep timeout --tail 100
输出是精简、无颜色码的纯文本,并带有真实退出码,agent 不会被大段日志淹没。
部署与发布
在 web1 的 /srv/app 拉取最新代码,安装依赖并重启服务。
xssh session open web1 --name w
xssh session run w -- 'cd /srv/app && git pull --ff-only'
xssh session run w -- 'npm ci'
xssh session run w -- 'sudo systemctl restart app'
session 会在多次调用之间保持 shell 状态,cd 之后的目录、激活的虚拟环境都还在。sudo 的密码自动从钥匙串代填,agent 看不到密码。
长时间任务
工具调用一般有超时限制,构建、数据迁移、备份这类任务容易被打断。xssh 的 job 在远端独立运行,断线或本机守护进程重启都不受影响:
xssh job start web1 --name build -- './build.sh --release'
xssh job wait <ID> --timeout 90s # 每次最多等 90 秒,未完成返回 124
xssh job logs <ID> # 增量读取日志
修改配置文件
xssh file read web1 /etc/nginx/sites-enabled/app.conf
xssh file edit web1 /etc/nginx/sites-enabled/app.conf --sudo \
--old 'proxy_read_timeout 30s;' --new 'proxy_read_timeout 120s;'
xssh exec web1 --sudo -- nginx -t
file edit 要求旧文本唯一匹配,写入是原子的,旧内容自动备份到远端 ~/.xssh/backups;如果文件在读取后被别人改过,会拒绝写入,避免覆盖他人修改。
上传、下载与同步文件
xssh cp ./dist web1:/srv/app/ --exclude '*.map'
xssh cp web1:/var/backups/db.dump ./
xssh cp db:/srv/db.dump staging:/tmp/ # 主机到主机
未变化的文件自动跳过,大文件支持断点续传,结束时返回变更清单和 sha256。
多台服务器批量执行
xssh exec web1,web2,web3 -- 'df -h /'
xssh exec @prod -- 'systemctl is-active app' # 按标签并行
每台服务器的结果单独成块,并附带各自的退出码。
交互式程序与远程 agent
xssh 可以驱动 REPL、vim、top,甚至远程服务器上的 Claude Code:
xssh session run w -- claude
xssh session send w '修复测试失败' --enter --timeout 10m
xssh 会识别全屏界面和“忙碌”标志,只在界面稳定后返回当前屏幕。
安全边界
- 密码由你录入,存在系统钥匙串,agent 只拿到主机别名。
- 主机密钥变化时 xssh 以退出码 78 停止,必须由你核对指纹后确认。
- 所有远程操作写入审计日志,可用
xssh audit --tail 30或桌面程序查看。
相关阅读:xssh 与 OpenSSH 的区别 · 下载 xssh