通用 SSH 远程部署工具,支持多服务器管理、批量部署、国内镜像优化的安装脚本模板,支持远程...
SSH 部署 STell. 一个通用的SSH远程部署工具,用于管理 Linux 服务器,并进行批量操作,文件传输和模板化的软件安装
功能概述
SSH 部署 STell. 一个通用的SSH远程部署工具,用于管理 Linux 服务器,并进行批量操作,文件传输和模板化的软件安装是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
SSH 部署技能(SSH Deploy Skill)
一款通用的 SSH 远程部署工具,用于批量管理 Linux 服务器,支持远程命令执行、文件传输及基于模板的软件安装。针对国内网络环境深度优化,内置阿里云、清华大学等国内镜像源配置。
快速开始
1. 初始设置
cd /root/.openclaw/workspace/skills/ssh-deploy-skill # 自动初始化(检查依赖、生成配置) bash scripts/setup.sh # 若自动初始化失败,手动安装依赖 pip3 install --user paramiko
2. 配置服务器(两种方式)
方式 A:使用 inventory.json(传统方式)
编辑 ~/.ssh-deploy/inventory.json,或通过 CLI 添加服务器:
python3 scripts/inventory.py add web-01 --host 192.168.1.101 --user root --ssh-key ~/.ssh/id_rsa --groups production,web --tags "aliyun"
配置位置:所有服务器配置均保存于 ~/.ssh-deploy/inventory.json 中。
方式 B:直接读取 ~/.ssh/config(新特性!)
若你已在 ~/.ssh/config 中定义了 Host 条目,则可 无需额外配置直接使用:
# ~/.ssh/config 示例
Host dy-c1
HostName 101.126.92.30
User root
IdentityFile ~/.ssh/mypc_id_rsa
Port 22
# 直接使用主机名执行命令
python3 scripts/deploy.py exec dy-c1 "ls -la /opt"
该工具将自动解析 SSH 配置中的 Host、HostName、Port、User 和 IdentityFile 字段。
注意:从 SSH 配置加载的服务器为 只读状态,不会写入 inventory。如需添加分组或标签,请导入:
inventory.py add --from-ssh-config。
3. 执行远程命令
# 单台服务器 python3 scripts/deploy.py exec web-01 "uptime && df -h" # 按分组批量执行 python3 scripts/deploy.py exec group:production "docker ps" # 按标签批量执行 python3 scripts/deploy.py exec tag:aliyun "systemctl status nginx" # 串行执行(避免高负载) python3 scripts/deploy.py exec group:large "apt update" --sequential
4. 文件传输
# 上传文件 python3 scripts/deploy.py upload web-01 ./nginx.conf /etc/nginx/nginx.conf # 批量上传至分组内所有服务器 python3 scripts/deploy.py upload group:web ./config.json /opt/app/config.json # 下载文件 python3 scripts/deploy.py download web-01 /var/log/nginx/access.log ./logs/
5. 使用模板安装软件
templates/ 目录下的所有模板均已预配置国内镜像源。
# 安装 Docker(自动启用国内镜像加速) cat templates/install_docker.sh | python3 scripts/deploy.py exec tag:docker "bash -s" # 安装 MySQL(密码通过环境变量传入) MYSQL_ROOT_PASSWORD=YourPass123 cat templates/install_mysql.sh | python3 scripts/deploy.py exec db-01 "bash -s" # 基础环境初始化(系统更新 + 镜像配置) cat templates/base_setup.sh | python3 scripts/deploy.py exec group:all "bash -s"
📦 安装脚本模板
| 模板 | 软件 | 国内镜像 | 环境变量 |
|---|---|---|---|
base_setup.sh |
基础环境 | ✅ | - |
install_git.sh |
Git | ❌ | GIT_USER_NAME, GIT_USER_EMAIL |
install_docker.sh |
Docker CE + 加速器 | ✅ | - |
install_mysql.sh |
MySQL 8.0 | ✅ | MYSQL_ROOT_PASSWORD |
install_postgresql.sh |
PostgreSQL 15 | ✅ | PG_VERSION |
install_nginx.sh |
Nginx | ❌ | - |
install_nodejs.sh |
Node.js | ✅(npm) | NODE_VERSION |
install_redis.sh |
Redis | ❌ | - |
install_python.sh |
Python | ✅(pip) | PYTHON_VERSION |
注意:所有新增的服务器配置均保存至
~/.ssh-deploy/inventory.json。
🎯 核心功能
服务器清单管理(inventory.py)
# 列出全部服务器 python3 scripts/inventory.py list # 按分组筛选 python3 scripts/inventory.py list --group production # 按标签筛选 python3 scripts/inventory.py list --tag aliyun # 添加服务器 python3 scripts/inventory.py add SERVER_NAME --host IP_OR_HOSTNAME --port 22 --user USERNAME --ssh-key PATH_TO_KEY --groups GROUP1,GROUP2 --tags TAG1,TAG2 --desc "description"
目标语法(在 deploy.py 中使用):
server-name—— 指定单台服务器group:groupname—— 指定分组内所有服务器tag:tagname—— 指定拥有该标签的所有服务器*—— 所有服务器
远程命令执行(deploy.py)
# 并行批量执行(默认行为) python3 scripts/deploy.py exec group:web "docker pull nginx" # 串行执行(适用于大批量操作或避免过载) python3 scripts/deploy.py exec group:large "apt upgrade -y" --sequential # 使用环境变量 export MYSQL_VERSION="8.0" cat templates/install_mysql.sh | python3 scripts/deploy.py exec db-01 "bash -s"
文件操作
# 上传(单台) python3 scripts/deploy.py upload web-01 ./local.conf /etc/app/conf.d/conf.conf # 批量上传 python3 scripts/deploy.py upload group:web ./nginx.conf /etc/nginx/nginx.conf # 下载 python3 scripts/deploy.py download web-01 /var/log/app.log ./logs/
🌏 国内网络优化
镜像配置
本技能默认使用 阿里云镜像源,并自动配置以下内容:
- Ubuntu/Debian →
mirrors.aliyun.com - CentOS/RHEL →
mirrors.aliyun.com - npm →
registry.npmmirror.com(淘宝镜像) - pip →
mirrors.aliyun.com/pypi/simple - Docker → 中科大、网易、百度镜像源
- Go →
goproxy.cn - Maven → 阿里云仓库
详细配置说明见:references/mirrors.md
一键镜像配置
# 在所有服务器上配置系统镜像源 cat templates/base_setup.sh | python3 scripts/deploy.py exec group:all "bash -s" # 手动配置 Docker 镜像(如有需要) cat <<'EOF' | python3 scripts/deploy.py exec group:all "bash -s" cat > /etc/docker/daemon.json <🔒 安全最佳实践
SSH 密钥管理
- 强制使用密钥认证,禁用密码登录
- 密钥权限应设为
chmod 600 ~/.ssh/id_rsa- 不同环境建议使用独立密钥
最小权限原则
- 创建专用部署用户(避免使用 root)
- 配置免密 sudo(仅授予必要命令权限)
- 服务端
sshd_config中设置:PermitRootLogin no,PasswordAuthentication no敏感数据保护
- 切勿在
inventory.json中存储密码- 密码类参数请通过环境变量传递(例如
MYSQL_ROOT_PASSWORD)- 配置文件权限应设为
640,属主为root:appgroup审计追踪
- 保留全部部署日志
- 记录每次执行的命令、目标服务器、时间戳与执行结果
完整安全指南见:
references/best-practices.md🐛 故障排查
快速诊断
# 1. 网络连通性测试 pingtelnet 22 # 2. 手动 SSH 测试 ssh -i ~/.ssh/id_rsa root@ "uptime" # 3. 查看连接详情(含错误输出) python3 scripts/deploy.py exec "uptime" 2>&1 # 4. 验证密钥权限 ls -la ~/.ssh/id_rsa* 常见问题
现象 解决方案 连接被拒绝 / 超时 检查服务器运行状态、SSH 服务是否启动、防火墙或安全组策略 Permission denied (publickey) 确认公钥已正确写入服务器的 ~/.ssh/authorized_keys,且私钥权限为 600sudo: a password is required 配置免密 sudo 或改用 root 用户执行 Command not found 使用绝对路径,或确保 PATH 环境变量包含对应命令路径 国内下载缓慢 运行 base_setup.sh配置镜像源,详见docs/mirrors.md详细排错手册见:
references/troubleshooting.md📊 批量操作示例
场景 1:新服务器初始化
# 1. 将服务器加入清单 python3 scripts/inventory.py add web-01 --host 1.2.3.101 --groups web --tags production # 2. 基础环境初始化(镜像源、常用工具) cat templates/base_setup.sh | python3 scripts/deploy.py exec web-01 "bash -s" # 3. 安装核心软件 cat templates/install_docker.sh | python3 scripts/deploy.py exec web-01 "bash -s" cat templates/install_nginx.sh | python3 scripts/deploy.py exec web-01 "bash -s" # 4. 上传应用配置 python3 scripts/deploy.py upload web-01 ./app-config.json /opt/app/config.json # 5. 启动应用 python3 scripts/deploy.py exec web-01 "docker-compose up -d"场景 2:多服务器滚动更新
# 金丝雀发布:先更新首批节点 cat deploy-v2.sh | python3 scripts/deploy.py exec tag:"canary" "bash -s" # 检查监控指标... # 全量发布 cat deploy-v2.sh | python3 scripts/deploy.py exec tag:production "bash -s"场景 3:配置同步
# 同步配置文件至所有 Web 服务器 python3 scripts/deploy.py upload group:web ./nginx.conf /etc/nginx/nginx.conf # 批量重启服务 python3 scripts/deploy.py exec group:web "nginx -t && systemctl reload nginx"场景 4:健康检查与监控
# 收集所有服务器运行状态 python3 scripts/deploy.py exec "*" "uptime" > uptime-$(date +%F).log python3 scripts/deploy.py exec "*" "df -h" > disk-$(date +%F).log python3 scripts/deploy.py exec "*" "docker ps --format 'table {{.Names}}t{{.Status}}'" > containers-$(date +%F).log🔄 CI/CD 集成
GitLab CI 示例
stages: - deploy deploy_production: stage: deploy script: - pip3 install --user paramiko - export TARGET="group:production" - cat deploy.sh | python3 skills/ssh-deploy-skill/scripts/deploy.py exec "$TARGET" "bash -s" only: - mainGitHub Actions 示例
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install paramiko run: pip3 install paramiko - name: Deploy to servers run: | cat deploy.sh | python3 skills/ssh-deploy-skill/scripts/deploy.py exec "group:staging" "bash -s"🛠️ 开发者指南
新增安装模板
- 在
templates/目录下新建.sh文件- 以
#!/bin/bash开头,并包含set -e- 检测操作系统类型并适配逻辑(参考已有模板)
- 使用环境变量传递参数,禁止硬编码敏感信息
- 在适用场景中加入国内镜像源配置
自定义脚本结构
#!/bin/bash set -e echo "===== Installing XXX =====" # 1. 检测操作系统 if [ -f /etc/debian_version ]; then OS="debian" elif [ -f /etc/redhat-release ]; then OS="redhat" else echo "Unsupported OS" exit 1 fi # 2. 配置国内镜像源(如需) # ... # 3. 安装软件 if [ "$OS" = "debian" ]; then apt-get update apt-get install -y xxx elif [ "$OS" = "redhat" ]; then yum install -y xxx fi # 4. 启动服务 systemctl start xxx systemctl enable xxx echo "XXX installation complete!"直接使用 Python API
from inventory import Inventory, Server from deploy import SSHDeployer # 加载服务器清单 inv = Inventory() server = inv.get_server("web-01") # 创建部署器实例 deployer = SSHDeployer() # 执行命令 result = deployer.execute(server, "docker ps") print(result.success, result.output) # 上传文件 res = deployer.upload_file(server, "./local.conf", "/etc/conf.d/local.conf") deployer.close()📚 补充文档
详细文档(部分含中文):
README.md—— 完整使用指南与 API 参考README.zh-CN.md—— 全中文手册references/mirrors.md—— 国内镜像源配置详情references/best-practices.md—— 最佳实践与代码示例references/troubleshooting.md—— 完整故障排查手册🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT License
相关专题
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.8万人学习
共6课时 | 54.7万人学习
最新文章