instandhalterin — 远程主机引导工具箱¶
通过纯 SSH批量配置 Ubuntu worker 机器:apt 代理、snap 代理、SSH 密钥分发、 Kubernetes 安装。远程侧不需要安装任何 agent,所有逻辑由控制机推送执行。 技术栈为纯 Bash + SSH。
目录布局¶
instandhalterin/ubuntu/
├── config.sh.example # 配置模板
├── config.sh # 生效配置(生成物,git-ignored)
├── bin/ # 控制机上运行的驱动脚本
│ ├── configstrap.sh # 从 example 生成 config.sh
│ ├── rexec.sh # 把 rscript 推到远程主机执行(核心)
│ ├── addkey.sh # 把 config.sh 中的 SSH 公钥加入本机 authorized_keys
│ ├── riexec.sh # 与单台主机开交互式 ssh
│ └── test_tui.sh # 验证远程 dialog/ncurses 可用
├── rscripts/ # 远程执行载荷(通过 SSH 推送)
│ ├── apt-proxy.bash # 设置 apt + bashrc 代理
│ ├── snapstrap.bash # 设置 snap 代理
│ ├── k8strap.bash # 经本地代理安装 k8s snap
│ ├── addkey.bash # 追加公钥到远程 authorized_keys
│ ├── pkg.bash # 包管理操作
│ ├── dialog.bash # dialog 连通性测试
│ └── reboot.bash # 重启远程主机
├── rcommands/ # 一次性远程命令(无环境注入)
└── rhosts/
└── sl-workders # 主机列表(每行一个主机名,# 注释可用)
快速开始¶
cd instandhalterin/ubuntu/
# 1. 首次:生成配置并编辑(代理地址、SSH 密钥)
bin/configstrap.sh
$EDITOR config.sh
# 2.(可选)让控制机自身可通过密钥访问
bin/addkey.sh
# 3. 对单机或整批主机执行 rscript
bin/rexec.sh tjaicc-sl-01 rscripts/apt-proxy.bash
bin/rexec.sh rhosts/sl-workders rscripts/k8strap.bash
rexec.sh 机制¶
用法:
rexec.sh <host|主机列表文件> <command-file>从
config.sh中挑选白名单变量(APT_PROXY、DEFAULT_PROXY、SSHKEYS), 逐个printf %q转义后作为环境前缀注入远程命令:ssh <host> "VAR=... bash -s" < <command-file>传入文件路径且该文件存在时,视为主机列表,逐台执行;空行自动跳过。
注意事项¶
rscripts/下的脚本在远程以非交互 shell 执行——保持 POSIX sh 兼容、 单行可运行,不要依赖控制机的环境。主机列表当前为
tjaicc-sl-01~04(文件名为sl-workders,历史拼写,勿改 引用)。对主机的破坏性操作(
reboot.bash等)先单机验证,再对列表批量执行。