5.8 KiB
5.8 KiB
name, description
| name | description |
|---|---|
| linux-ssh-operator-skill | 通过 SSH 连接并操作 Linux 服务器:执行远程命令、查看日志、管理 systemd 服务、传输文件(scp/rsync)、配置 SSH 别名、安装公钥启用免密登录、排障。用户提到 ssh/scp/rsync、远程服务器 IP:端口、配置 ssh 别名、ssh-copy-id、免密登录、systemctl/journalctl、部署到服务器、在服务器上运行命令、远程拷贝文件 等场景时使用。 |
Linux SSH 运维助手(中文说明)
本文件是
SKILL.md的中文说明版,便于阅读与维护;技能实际触发仍以SKILL.md为准。
概述
这个 Skill 用于通过 SSH 安全地连接 Linux 服务器,并执行可重复、可验证的远程操作,包括:
- 执行远程命令
- 查看系统与服务日志
- 管理
systemd服务 - 上传和下载文件
- 配置 SSH 别名
- 安装公钥并启用免密登录
- 进行常见运维排障
适合以下场景:
- 登录远程 Linux 服务器
- 在服务器上运行命令
- 查看
journalctl/ 应用日志 - 启动、停止、重启服务
- 把文件部署到服务器
- 从服务器拉取日志、配置或产物文件
- 按“别名 + IP + 密码”快速配置一键 SSH 免密登录
工作流程
- 先确认授权,以及目标信息:主机、端口、用户名。
- 优先使用 SSH 密钥进行非交互连接,避免在聊天记录或文件里保存密码。
- 优先先做只读检查,再执行修改,最后进行验证。
- 如果需要密码提示或交互式工具,使用真实终端或启用 TTY。
快速开始
配置 SSH 密钥(推荐)
生成一把 ed25519 密钥:
ssh-keygen -t ed25519 -C "codex" -f ~/.ssh/id_ed25519
把公钥安装到目标服务器(示例端口为 22):
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 USER@SERVER_IP
可选:在 ~/.ssh/config 中配置主机别名:
Host my-server
HostName SERVER_IP
Port 22
User USER
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
之后可直接连接:
ssh my-server
一键配置别名 + 免密登录
当用户提供“别名、主机/IP、密码”,并希望直接通过 ssh 别名 登录时,优先使用下面的流程:
- 使用辅助脚本写入或更新 SSH 别名:
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_alias_setup.sh my-server 192.168.1.10 --user root --install-key
- 如果
ssh-copy-id提示输入密码,请在 TTY 中输入一次密码。 - 安装完成后验证免密登录:
ssh -o BatchMode=yes my-server 'echo SSH_OK; id -un 2>/dev/null || echo root'
- 告诉用户
scp和rsync也可以直接复用这个别名:
scp ./file.txt my-server:/root/
rsync -av ./dir/ my-server:/root/dir/
补充说明:
scripts/ssh_alias_setup.sh在本机没有~/.ssh/id_ed25519时会自动生成。- 它会幂等更新
~/.ssh/config,默认使用root、端口22、StrictHostKeyChecking=accept-new。 - 如果要做临时测试,可以设置
SSH_CONFIG_FILE=/path/to/temp-config。
运行远程命令
直接执行:
ssh my-server uname -a
带 sudo 执行(通常需要 TTY):
ssh -tt my-server sudo systemctl status nginx --no-pager
使用封装脚本执行(统一参数风格,支持环境变量默认值如 REMOTE_USER、REMOTE_PORT、REMOTE_KEY):
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_run.sh my-server -- uname -a
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_run.sh --tty --sudo my-server -- systemctl restart nginx
传输文件
上传文件:
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh push my-server ./local.txt /tmp/local.txt
下载文件:
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh pull my-server /var/log/syslog ./syslog
常见运维操作
- 磁盘空间:
df -h - 目录占用:
du -sh /path/* | sort -h - 内存查看:
free -h - 进程查看:
ps aux --sort=-%mem | head - 日志查看:
journalctl -u SERVICE -n 200 --no-pager - 日志跟踪:
tail -n 200 -f /path/log - 服务管理:
systemctl status|restart|stop SERVICE - 网络排查:
ss -lntp、ip a、ip r、curl -v http://127.0.0.1:PORT/
安全注意事项
- 不要把密码保存到仓库文件、脚本或聊天记录中。
- 尽量避免使用
StrictHostKeyChecking=no。 - 首次连接建议核验主机指纹;只有在临时环境自动化场景下,才考虑
accept-new。 - 对于破坏性命令(如删除、关机、防火墙调整),必须先确认再执行,并展示将要运行的确切命令。
附带脚本
scripts/ssh_alias_setup.sh
用于创建或更新 SSH 别名,并可选执行 ssh-copy-id,支持:
- 指定别名、主机、用户、端口、私钥
- 自动生成默认的
~/.ssh/id_ed25519 - 幂等更新
~/.ssh/config - 可选直接运行
ssh-copy-id安装公钥 - 使用
--dry-run预览即将执行的动作
scripts/ssh_run.sh
用于通过 SSH 执行远程命令,支持:
- 指定用户、端口、私钥
- 设置连接超时
- 启用 TTY
- 使用
sudo或sudo -n - 使用
--accept-new处理首次连接主机 - 使用
--dry-run预览实际将执行的命令
默认可读取这些环境变量:
REMOTE_USERREMOTE_PORTREMOTE_KEYREMOTE_CONNECT_TIMEOUT
scripts/ssh_copy.sh
用于通过 scp 上传或下载文件,支持:
push上传文件到远程服务器pull从远程服务器下载文件- 递归复制目录
- 指定用户、端口、私钥
- 使用
--accept-new - 使用
--dry-run预览命令
默认可读取这些环境变量:
REMOTE_USERREMOTE_PORTREMOTE_KEY
参考资料
references/ssh-playbook.md:SSH 安全建议、常见命令、主机指纹处理与故障排查说明。