# 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 # 主机列表(每行一个主机名,# 注释可用) ``` ## 快速开始 ```bash 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 ` - 从 `config.sh` 中挑选白名单变量(`APT_PROXY`、`DEFAULT_PROXY`、`SSHKEYS`), 逐个 `printf %q` 转义后作为环境前缀注入远程命令: `ssh "VAR=... bash -s" < ` - 传入文件路径且该文件存在时,视为**主机列表**,逐台执行;空行自动跳过。 ## 注意事项 - `rscripts/` 下的脚本在远程以非交互 shell 执行——保持 **POSIX sh 兼容、 单行可运行**,不要依赖控制机的环境。 - 主机列表当前为 `tjaicc-sl-01` ~ `04`(文件名为 `sl-workders`,历史拼写,勿改 引用)。 - 对主机的破坏性操作(`reboot.bash` 等)先单机验证,再对列表批量执行。