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 等)先单机验证,再对列表批量执行。