# hostctl **Repository Path**: opsx-tools/hostctl ## Basic Information - **Project Name**: hostctl - **Description**: ssh远程批量命令行工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-14 - **Last Updated**: 2026-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hostctl 主机批量管理工具 - 推送公钥、设置主机名、执行脚本/命令 ## 快速安装 ```bash wget "https://gitee.com/opsx-tools/hostctl/releases/download/latest/hostctl-$(uname -s)-$(uname -m).tar.gz" tar -xzf hostctl-*.tar.gz chmod +x hostctl ``` ## 编译安装 ```bash go build ``` ## 首次使用 首次执行会自动初始化配置文件: ```bash ./hostctl --help # 或手动初始化 ./hostctl init ``` 生成 `conf.yml` 和 `inventory.csv`,编辑后即可使用。 ## 使用 ### 推送公钥 ```bash # 密码交互输入(安全,推荐) ./hostctl -p push-key # 直接提供密码 ./hostctl -p 'your_password' push-key ``` ### 设置主机名 (基于 inventory.csv) ```bash ./hostctl -p set-hostname ``` inventory.csv 格式: ```csv IP地址,主机名 10.10.10.151,kafka-1 10.10.10.152,kafka-2 ``` ### 检查连通性 ```bash ./hostctl -p ping ``` ### 上传文件 ```bash # 上传到 /tmp/ 目录(默认) ./hostctl -p upload ./local-file.txt # 上传到指定目录 ./hostctl -p upload ./local-file.txt /root/ # 上传到指定文件名 ./hostctl -p upload ./local-file.txt /root/custom-name.txt ``` ### 执行命令 ```bash ./hostctl -p run "uptime" ./hostctl -p run "curl https://example.com/script.sh | bash" ``` ### 指定目标主机 (-H) 使用 `-H` 过滤目标主机,支持精确匹配和模糊匹配,可替代操作全部主机: ```bash # 精确匹配主机名 ./hostctl run "hostname" -H cex-ops-server # 精确匹配 IP ./hostctl run "hostname" -H 172.36.9.72 # 多台主机(逗号分隔) ./hostctl run "hostname" -H cex-redis-cluster-1,cex-redis-cluster-2 # 模糊匹配(匹配所有含 redis 的主机) ./hostctl run "redis-cli ping" -H redis # 混合匹配(主机名 + IP + 模糊) ./hostctl run "uptime" -H redis,172.36.11.221 ``` > 匹配优先级:精确 IP → 精确主机名 → 模糊匹配(contains) ### 升级 ```bash ./hostctl upgrade # 如无写权限 sudo ./hostctl upgrade ``` 从 Gitee Releases 自动下载最新版本,替换当前二进制文件,失败时自动恢复备份。 ## 参数 | 参数 | 说明 | |------|------| | `-c, --config` | 配置文件路径 (默认 conf.yml) | | `-H, --hosts` | 指定目标主机(IP/主机名/模糊匹配,逗号分隔) | | `-p, --password` | SSH 密码 (-p 交互输入,-p 密码 直接提供) | | `-w, --workers` | 最大并发数 | | `-l, --log` | 日志文件路径 | ## 配置默认值 `conf.yml` 中未显式配置的字段均使用以下代码默认值: | 配置项 | 默认值 | 说明 | |--------|--------|------| | `ssh.port` | `22` | SSH 端口 | | `ssh.default_username` | `$USER` | 默认登录用户(取当前系统用户) | | `ssh.max_workers` | `10` | 最大并发 worker 数 | | `ssh.timeout` | `10s` | SSH 连接超时 | | `ssh.keep_alive` | `true` | 是否保持长连接 | | `ssh.keep_alive_interval` | `30s` | 心跳保活间隔 | | `ssh.use_sudo` | `false` | 命令前是否自动加 sudo | | `ssh.strict_host_key` | `false` | 是否强制校验 known_hosts | | `ssh.known_hosts_file` | `~/.ssh/known_hosts` | known_hosts 文件路径 |