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>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
---
|
||||
name: linux-ssh-operator-skill
|
||||
description: 通过 SSH 连接并操作 Linux 服务器:执行远程命令、查看日志、管理 systemd 服务、传输文件(scp/rsync)、配置 SSH 别名、安装公钥启用免密登录、排障。用户提到 ssh/scp/rsync、远程服务器 IP:端口、配置 ssh 别名、ssh-copy-id、免密登录、systemctl/journalctl、部署到服务器、在服务器上运行命令、远程拷贝文件 等场景时使用。
|
||||
description: 通过 SSH 连接并操作 Linux 服务器:执行远程命令、查看日志、管理 systemd 服务、传输文件(scp/rsync)、配置 SSH 别名、安装公钥启用免密登录、SSH 隧道/端口转发、跳板机、内网穿透、排障。用户提到 ssh/scp/rsync、远程服务器 IP:端口、配置 ssh 别名、ssh-copy-id、免密登录、systemctl/journalctl、部署到服务器、在服务器上运行命令、远程拷贝文件、SSH 隧道、端口转发、跳板机、堡垒机、服务器上看一下、帮我连上服务器、查看服务器日志 等场景时使用。
|
||||
|
||||
---
|
||||
|
||||
# Linux SSH 运维助手(中文说明)
|
||||
@@ -14,9 +15,10 @@ description: 通过 SSH 连接并操作 Linux 服务器:执行远程命令、
|
||||
- 执行远程命令
|
||||
- 查看系统与服务日志
|
||||
- 管理 `systemd` 服务
|
||||
- 上传和下载文件
|
||||
- 上传和下载文件(scp 或 rsync)
|
||||
- 配置 SSH 别名
|
||||
- 安装公钥并启用免密登录
|
||||
- SSH 隧道 / 端口转发 / 跳板机
|
||||
- 进行常见运维排障
|
||||
|
||||
适合以下场景:
|
||||
@@ -25,9 +27,11 @@ description: 通过 SSH 连接并操作 Linux 服务器:执行远程命令、
|
||||
- 在服务器上运行命令
|
||||
- 查看 `journalctl` / 应用日志
|
||||
- 启动、停止、重启服务
|
||||
- 把文件部署到服务器
|
||||
- 把文件部署到服务器(scp 或 rsync 增量同步)
|
||||
- 从服务器拉取日志、配置或产物文件
|
||||
- 按“别名 + IP + 密码”快速配置一键 SSH 免密登录
|
||||
- 按"别名 + IP + 密码"快速配置一键 SSH 免密登录
|
||||
- 配置端口转发访问内网服务
|
||||
- 通过跳板机/堡垒机连接内网服务器
|
||||
|
||||
## 工作流程
|
||||
|
||||
@@ -71,7 +75,7 @@ ssh my-server
|
||||
|
||||
### 一键配置别名 + 免密登录
|
||||
|
||||
当用户提供“别名、主机/IP、密码”,并希望直接通过 `ssh 别名` 登录时,优先使用下面的流程:
|
||||
当用户提供"别名、主机/IP、密码",并希望直接通过 `ssh 别名` 登录时,优先使用下面的流程:
|
||||
|
||||
1. 使用辅助脚本写入或更新 SSH 别名:
|
||||
|
||||
@@ -118,22 +122,78 @@ ssh -tt my-server sudo systemctl status nginx --no-pager
|
||||
```bash
|
||||
~/.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):
|
||||
|
||||
```bash
|
||||
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh push my-server ./local.txt /tmp/local.txt
|
||||
```
|
||||
|
||||
下载文件:
|
||||
下载文件(scp):
|
||||
|
||||
```bash
|
||||
~/.claude/skills/linux-ssh-operator-skill/scripts/ssh_copy.sh pull my-server /var/log/syslog ./syslog
|
||||
```
|
||||
|
||||
增量同步(rsync,推荐用于目录或大文件):
|
||||
|
||||
```bash
|
||||
# 上传目录
|
||||
~/.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 隧道 / 端口转发
|
||||
|
||||
本地转发(将远程服务映射到本地端口):
|
||||
|
||||
```bash
|
||||
# 把远程 MySQL(3306) 映射到本地 13306
|
||||
ssh -L 13306:127.0.0.1:3306 my-server -N
|
||||
```
|
||||
|
||||
远程转发(将本地服务暴露到服务器端口):
|
||||
|
||||
```bash
|
||||
# 把本地 :8080 映射到服务器 :18080
|
||||
ssh -R 18080:127.0.0.1:8080 my-server -N
|
||||
```
|
||||
|
||||
跳板机 / 堡垒机:
|
||||
|
||||
```bash
|
||||
ssh -J bastion-user@bastion:22 target-user@target-host
|
||||
```
|
||||
|
||||
或在 `~/.ssh/config` 中配置:
|
||||
|
||||
```sshconfig
|
||||
Host target-internal
|
||||
HostName 10.0.0.50
|
||||
User ubuntu
|
||||
ProxyJump bastion
|
||||
```
|
||||
|
||||
### SSH 多路复用(加速重复连接)
|
||||
|
||||
在 `~/.ssh/config` 中添加,复用同一 TCP 连接:
|
||||
|
||||
```sshconfig
|
||||
Host *
|
||||
ControlMaster auto
|
||||
ControlPath ~/.ssh/ctrl-%h-%p-%r
|
||||
ControlPersist 60s
|
||||
```
|
||||
|
||||
第一次 `ssh my-server` 建立主连接,后续连接直接复用,无需重新握手,速度更快。
|
||||
|
||||
## 常见运维操作
|
||||
|
||||
- 磁盘空间:`df -h`
|
||||
@@ -142,8 +202,11 @@ ssh -tt my-server sudo systemctl status nginx --no-pager
|
||||
- 进程查看:`ps aux --sort=-%mem | head`
|
||||
- 日志查看:`journalctl -u SERVICE -n 200 --no-pager`
|
||||
- 日志跟踪:`tail -n 200 -f /path/log`
|
||||
- 服务管理:`systemctl status|restart|stop SERVICE`
|
||||
- 服务管理:`systemctl status|restart|stop|enable SERVICE`
|
||||
- 网络排查:`ss -lntp`、`ip a`、`ip r`、`curl -v http://127.0.0.1:PORT/`
|
||||
- Docker:`docker ps`、`docker logs -f CONTAINER`、`docker exec -it CONTAINER bash`
|
||||
- 配置测试:`nginx -t`、`sshd -T`
|
||||
- 端口占用:`lsof -i :PORT`、`fuser PORT/tcp`
|
||||
|
||||
## 安全注意事项
|
||||
|
||||
@@ -170,7 +233,8 @@ ssh -tt my-server sudo systemctl status nginx --no-pager
|
||||
|
||||
- 指定用户、端口、私钥
|
||||
- 设置连接超时
|
||||
- 启用 TTY
|
||||
- 启用 TTY(`--tty`)
|
||||
- 启用 SSH 压缩(`--compress`,适合慢速链路)
|
||||
- 使用 `sudo` 或 `sudo -n`
|
||||
- 使用 `--accept-new` 处理首次连接主机
|
||||
- 使用 `--dry-run` 预览实际将执行的命令
|
||||
@@ -184,11 +248,13 @@ ssh -tt my-server sudo systemctl status nginx --no-pager
|
||||
|
||||
### `scripts/ssh_copy.sh`
|
||||
|
||||
用于通过 `scp` 上传或下载文件,支持:
|
||||
用于通过 `scp` 或 `rsync` 上传或下载文件,支持:
|
||||
|
||||
- `push` 上传文件到远程服务器
|
||||
- `pull` 从远程服务器下载文件
|
||||
- 递归复制目录
|
||||
- `--rsync`:使用 rsync 增量同步(显示进度,适合目录和大文件)
|
||||
- `--delete`:配合 `--rsync push` 删除远端多余文件
|
||||
- 递归复制目录(scp 模式用 `-r`)
|
||||
- 指定用户、端口、私钥
|
||||
- 使用 `--accept-new`
|
||||
- 使用 `--dry-run` 预览命令
|
||||
|
||||
Reference in New Issue
Block a user