Files
smy-skills/linux-ssh-operator-skill/SKILL.zh-CN.md
shumengya 766eb935a9 improve linux-ssh-operator-skill: bug fixes, rsync support, tunneling docs
- Fix dry-run bug in ssh_alias_setup.sh (pub key check skipped when key was never generated)
- Remove dead code in ssh_run.sh (-- check after host arg was never reachable)
- Add --rsync/--delete flags to ssh_copy.sh for incremental rsync transfers
- Add -C/--compress flag to ssh_run.sh for slow-link connections
- Expand SKILL.md/SKILL.zh-CN.md: tunneling, jump host, SSH multiplexing, Docker ops
- Expand ssh-playbook.md: port forwarding, bastion, ControlMaster, structured troubleshooting table

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 17:26:47 +08:00

8.1 KiB
Raw Blame History

name, description
name description
linux-ssh-operator-skill 通过 SSH 连接并操作 Linux 服务器:执行远程命令、查看日志、管理 systemd 服务、传输文件scp/rsync、配置 SSH 别名、安装公钥启用免密登录、SSH 隧道/端口转发、跳板机、内网穿透、排障。用户提到 ssh/scp/rsync、远程服务器 IP:端口、配置 ssh 别名、ssh-copy-id、免密登录、systemctl/journalctl、部署到服务器、在服务器上运行命令、远程拷贝文件、SSH 隧道、端口转发、跳板机、堡垒机、服务器上看一下、帮我连上服务器、查看服务器日志 等场景时使用。

Linux SSH 运维助手(中文说明)

本文件是 SKILL.md 的中文说明版,便于阅读与维护;技能实际触发仍以 SKILL.md 为准。

概述

这个 Skill 用于通过 SSH 安全地连接 Linux 服务器,并执行可重复、可验证的远程操作,包括:

  • 执行远程命令
  • 查看系统与服务日志
  • 管理 systemd 服务
  • 上传和下载文件scp 或 rsync
  • 配置 SSH 别名
  • 安装公钥并启用免密登录
  • SSH 隧道 / 端口转发 / 跳板机
  • 进行常见运维排障

适合以下场景:

  • 登录远程 Linux 服务器
  • 在服务器上运行命令
  • 查看 journalctl / 应用日志
  • 启动、停止、重启服务
  • 把文件部署到服务器scp 或 rsync 增量同步)
  • 从服务器拉取日志、配置或产物文件
  • 按"别名 + IP + 密码"快速配置一键 SSH 免密登录
  • 配置端口转发访问内网服务
  • 通过跳板机/堡垒机连接内网服务器

工作流程

  1. 先确认授权,以及目标信息:主机、端口、用户名。
  2. 优先使用 SSH 密钥进行非交互连接,避免在聊天记录或文件里保存密码。
  3. 优先先做只读检查,再执行修改,最后进行验证。
  4. 如果需要密码提示或交互式工具,使用真实终端或启用 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 别名 登录时,优先使用下面的流程:

  1. 使用辅助脚本写入或更新 SSH 别名:
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_alias_setup.sh my-server 192.168.1.10 --user root --install-key
  1. 如果 ssh-copy-id 提示输入密码,请在 TTY 中输入一次密码。
  2. 安装完成后验证免密登录:
ssh -o BatchMode=yes my-server 'echo SSH_OK; id -un 2>/dev/null || echo root'
  1. 告诉用户 scprsync 也可以直接复用这个别名:
scp ./file.txt my-server:/root/
rsync -av ./dir/ my-server:/root/dir/

补充说明:

  • scripts/ssh_alias_setup.sh 在本机没有 ~/.ssh/id_ed25519 时会自动生成。
  • 它会幂等更新 ~/.ssh/config,默认使用 root、端口 22StrictHostKeyChecking=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_USERREMOTE_PORTREMOTE_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_run.sh --compress my-server -- cat /var/log/big.log

传输文件

上传文件scp

~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh push my-server ./local.txt /tmp/local.txt

下载文件scp

~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh pull my-server /var/log/syslog ./syslog

增量同步rsync推荐用于目录或大文件

# 上传目录
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh --rsync push my-server ./dist/ /var/www/html/
# 上传并删除远端多余文件
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh --rsync --delete push my-server ./dist/ /var/www/html/
# 下载目录
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh --rsync pull my-server /var/log/ ./logs/

SSH 隧道 / 端口转发

本地转发(将远程服务映射到本地端口):

# 把远程 MySQL(3306) 映射到本地 13306
ssh -L 13306:127.0.0.1:3306 my-server -N

远程转发(将本地服务暴露到服务器端口):

# 把本地 :8080 映射到服务器 :18080
ssh -R 18080:127.0.0.1:8080 my-server -N

跳板机 / 堡垒机:

ssh -J bastion-user@bastion:22 target-user@target-host

或在 ~/.ssh/config 中配置:

Host target-internal
  HostName 10.0.0.50
  User ubuntu
  ProxyJump bastion

SSH 多路复用(加速重复连接)

~/.ssh/config 中添加,复用同一 TCP 连接:

Host *
  ControlMaster auto
  ControlPath ~/.ssh/ctrl-%h-%p-%r
  ControlPersist 60s

第一次 ssh my-server 建立主连接,后续连接直接复用,无需重新握手,速度更快。

常见运维操作

  • 磁盘空间: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|enable SERVICE
  • 网络排查:ss -lntpip aip rcurl -v http://127.0.0.1:PORT/
  • Dockerdocker psdocker logs -f CONTAINERdocker exec -it CONTAINER bash
  • 配置测试:nginx -tsshd -T
  • 端口占用:lsof -i :PORTfuser PORT/tcp

安全注意事项

  • 不要把密码保存到仓库文件、脚本或聊天记录中。
  • 尽量避免使用 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--tty
  • 启用 SSH 压缩(--compress,适合慢速链路)
  • 使用 sudosudo -n
  • 使用 --accept-new 处理首次连接主机
  • 使用 --dry-run 预览实际将执行的命令

默认可读取这些环境变量:

  • REMOTE_USER
  • REMOTE_PORT
  • REMOTE_KEY
  • REMOTE_CONNECT_TIMEOUT

scripts/ssh_copy.sh

用于通过 scprsync 上传或下载文件,支持:

  • push 上传文件到远程服务器
  • pull 从远程服务器下载文件
  • --rsync:使用 rsync 增量同步(显示进度,适合目录和大文件)
  • --delete:配合 --rsync push 删除远端多余文件
  • 递归复制目录scp 模式用 -r
  • 指定用户、端口、私钥
  • 使用 --accept-new
  • 使用 --dry-run 预览命令

默认可读取这些环境变量:

  • REMOTE_USER
  • REMOTE_PORT
  • REMOTE_KEY

参考资料

  • references/ssh-playbook.mdSSH 安全建议、常见命令、主机指纹处理与故障排查说明。