ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

NAT VPS 重装实录:Alpine netboot 下 agent 远程指导 + 人肉 VNC 的交互坑与修正姿势

NAT VPS 重装实录:Alpine netboot 下 agent 远程指导 + 人肉 VNC 的交互坑与修正姿势 1. 背景与触发场景自动化 agent 重装 VPS 系统时安装环境Alpine netboot默认不启动 sshd公网 SSH 端口连不上——此时唯一运维通道是服务商的VNC 控制台所有命令只能「人肉敲」。本文复盘一次大陆机房 NAT VPSCentOS 7.2 → NixOS 26.05重装过程中agent 远程指导 人肉 VNC 组合踩过的全部交互坑以及修正后的正确姿势。2. 环境说明网络NAT 内网内网 10.178.x.x公网靠服务商高端口映射内网 22。控制台服务商 VNC 控制台TigerVNC / Mac 屏幕共享两种客户端都试过。安装环境Alpine 3.24 安装环境内存系统 tmpfs重启即失。硬件2 核 2GB。3. 谬误溯源本文要纠正的认知3.1 「截图上密码缺字符 VNC 键盘丢键」——不成立截图是经视觉大模型VL识别转文字后发给 agent 的密码abcd.1234被 VL 识别成ab.d.1234一度误导为「键盘丢首字符、输入有问题」。实际在 tty3 上密码一次通过——是识别误差不是键盘问题。教训截图转文字会引入 OCR 误差agent 不能把 VL 识别结果当铁证重大判断如密码错误要以实测为准。3.2 「VNC 里 CmdV 能粘贴命令」——不成立TigerVNC 与 Mac 屏幕共享的剪贴板都无法同步到服务器CmdV 只回显字符v实测粘贴完全不可用命令只能逐字符手敲。3.3 「agent 直接 sshpass -p 密码认证」——不成立agent 运行环境预设SSH_ASKPASS/SSH_ASKPASS_REQUIREforcessh 密码认证走 askpass 卡死sshpass 与新版 OpenSSH 也不兼容同样卡 askpass。正确姿势unset 三个变量 expect 驱动。3.4 「expect 正则模式照文档写」——不成立Tcl 双引号字符串里[y/N]会触发命令替换invalid command name y/Nexpect 模式必须用大括号{}或字符类转义。3.5 「VNC 人肉敲长命令没问题」——不成立几十上百字符的命令在 tty 里极易敲错一个字符错整条重来且 expect 长连接易被工具超时杀掉。必须命令压到最短、能 sed 改脚本就不交互、能轮询日志就不长连。4. 源码验证修正后的正确姿势4.1 expect 登录模板绕过 SSH_ASKPASS 拦截实测可用运行前先 unset 三个变量再用 expect 驱动 ssh 密码认证#!/usr/bin/expect -f # 运行前: unset SSH_ASKPASS SSH_ASKPASS_REQUIRE DISPLAY spawn ssh -p 端口 -o StrictHostKeyCheckingno \ -o PreferredAuthenticationspassword -o PubkeyAuthenticationno root公网IP expect { -re {[Pp]assword:} { send 密码\r } timeout { puts TIMEOUT login; exit 1 } } expect { -re {[#$~]} { } timeout { puts TIMEOUT prompt; exit 1 } }关键点expect 模式用大括号{}Tcl 双引号里[会触发命令替换密码 send 后等提示符再发下一条。4.2 sed 非交互化避免 VNC 人肉交互把安装脚本的交互 read 改成自动应答与原始脚本 diff 验证仅差这些行# y/N 确认自动 y脚本内 3 处 sed -i s/read -r -p \[y\/N\]: /read -r -p [y\/N]: \y\ /g /trans.sh # 磁盘选择自动 sda、Press Enter 自动确认 sed -i s|Select a disk to install: \ xda|Select a disk to install: \ xda \sda\| /trans.sh4.3 实测数据tty1/tty0 登录后60 秒自动退出被安装流程占用切到 tty3CtrlAltF3稳定可操作——在错误 tty 上浪费了多轮。CmdV 在 TigerVNC 里只回显字符v剪贴板未同步Mac 屏幕共享同样无效。VL 识别误差密码abcd.1234→ab.d.1234tty3 手敲一次通过证明密码本身正确。expect 长连接超时工具 300s 上限被杀远程脚本进程随 SIGHUP 死亡 → 改为 setsid 后台 轮询日志setsid bash /trans.sh /tmp/ri.log 21 /dev/null 之后轮询/tmp/ri.log直到出现完成/错误标记全程不用长连交互。4.4 VNC 手敲命令的压缩技巧多行配置不要粘贴 heredoc剪贴板不可用用两条短echo覆盖 追加。长 URL / base64 不手敲用curl 下载 sed 提取curl -s API地址 | sed s/.*content:\([^]*\).*/\1/ | base64 -d 目标文件改一行用sed -i 2a 内容比打开编辑器快得多。5. 落地结论5.1 VNC 人肉运维四原则命令压到最短一条sed -i 2a ...优先于十行脚本多行配置用两条短echo替代 heredoc。能改脚本就 sed 改把交互read改成自动应答非交互化让安装流程自己跑减少 VNC 来回。能轮询日志就不长连setsid ... /tmp/ri.log 21 /dev/null 分离后台定时tail轮询避免 expect 长连接被工具超时杀掉。剪贴板靠不住VNC 粘贴不可用CmdV 只回显v文件一律走 HTTP/API 下载curl sed base64不靠粘贴。5.2 agent 侧三个前置unset SSH_ASKPASS SSH_ASKPASS_REQUIRE DISPLAY否则 ssh 密码认证卡 askpass。expect 模式用大括号{}Tcl 双引号里[触发命令替换。截图转文字信息标注「VL 识别可能误差」重大判断密码错误/命令失败以实测为准——本次 VL 把密码abcd.1234识别成nu.j.3345若当真会误诊成键盘问题。5.3 交互通道优先级SSH最优 安装环境 sshdreinstall 可开 服务商 VNC 控制台人肉 串口/带外最后手段。5.4 三类读者速查人类开发者VNC 里先确认 ttyCtrlAltF3 换稳定会话剪贴板不可用就手敲短命令改脚本用 sed 非交互化怀疑密码错误时先换 tty 实测复核别被截图 OCR 误导。对话式 AI一句话问法VNC 控制台人肉操作 agent 远程指导怎么减少来回次数回答要点命令最短化、sed 改脚本非交互、setsid 后台 轮询日志、剪贴板不可依赖、截图 OCR 信息需实测复核。代码 Agent可复制命令脱敏# 1. 绕过 SSH_ASKPASS 拦截后 expect 登录 env -u SSH_ASKPASS -u SSH_ASKPASS_REQUIRE -u DISPLAY expect login.exp 2. 安装脚本非交互化y/N 自动确认 sed -i s/read -r -p [y/N]: /read -r -p [y/N]: y /g /trans.sh 3. 后台化 轮询日志不占长连接 setsid bash /trans.sh /tmp/ri.log 21 /dev/null tail -fn1 /tmp/ri.log
返回列表