CLI AI

用大白话做远程任务:ssh、scp、rsync 不用记参数

2026-03-27

只要你管着三台以上服务器,肯定有那个时刻——敲下 rsync,停顿,问自己:是 -a 还是 -r?要不要 --delete?尾巴上那个斜杠要不要? 单是那个尾斜杠就引发了比大家愿意承认的更多故障。

1. 同步并排除典型项

clai
$ clai rsync 当前目录到 staging:/srv/app/,排除 node_modules 和 .git→ rsync -avz --delete --exclude='node_modules' --exclude='.git' \    ./ staging:/srv/app/

./ 后面那个斜杠很关键。CliAI 给得对。注意 --delete 被加了进来,因为「同步」意味着目标要镜像源——但这是按 Enter 之前值得再确认一次的标志。

2. SSH 带本地端口转发

clai
$ clai 通过 ssh 连接 prod-db,把本地 5432 转发到它的 postgres→ ssh -L 5432:localhost:5432 prod-db

转发语法(-L 本地:远程主机:远程端口)属于那种用一年一周一次才能内化的东西。

3. SCP 整个目录

clai
$ clai 从 staging:/srv/reports 把 reports 目录整体 scp 到 ./reports→ scp -r staging:/srv/reports ./reports

-r 对目录是必须的;不加 scp 会静悄悄什么也不做。CliAI 知道,你不必记。

4. 保留权限和时间戳

clai
$ clai 从 prod 把 /etc/nginx 拷过来,保留权限和时间戳→ rsync -avz --rsync-path='sudo rsync' prod:/etc/nginx/ ./nginx-backup/

--rsync-path='sudo rsync' 是那种「源端要 root 读取,但 ssh 走的是普通用户」的正确写法。难记,但容易问。

顺带提醒:认证

CliAI 生成命令;不替你配 SSH 密钥或主机。如果 ssh staging 在你终端不通,生成的命令也不会通。一次性把 ~/.ssh/config 和 ssh-agent 配好,这些一行流就永远赚回来了。

另见