远程安装脚本把下载和执行绑在同一次 shell 展开里。一行命令看起来很短,实际权限却等于当前用户能做的事:写文件、改服务、拉镜像、写入密钥。把它直接当成部署方案,会漏掉版本、校验和回滚。
审查时至少看五件事。第一,脚本来源是不是固定提交或固定版本,而不是永远指向默认分支。默认分支今天和明天可以不是同一份内容。第二,传输是不是 HTTPS,证书校验失败时有没有被人改成继续执行。curl 加上跳过证书校验的参数后,管道后面的 bash 仍会执行,调用方往往只看见最后一行成功。第三,有没有校验和或签名。没有校验时,你确认的只是当时能下载,不是内容没有被替换。第四,脚本是否需要管理员权限。需要提权的安装,应先在隔离机器上读完脚本再执行,而不是在生产控制机上直接管道进去。第五,失败后留下什么。只打印成功、不记录改过的文件和启动过的服务,回滚就只能靠猜。
更具体的读法是先把脚本落盘,再决定要不要执行。可以先下载到固定文件名,计算校验和,用编辑器看它改哪些路径、是否调用包管理器、是否写入 systemd 或计划任务。管道直接交给 bash 时,这些步骤被跳过了。脚本里如果关闭了遇错即停,前面的失败会被后面的成功提示盖住,审查记录里就应该把这个行为单独写出来。
下载以后不要只看开头的注释。后半段才常常出现写密钥、改软件源、关闭防火墙或再拉取二进制的语句。用搜索把 curl、wget、chmod、sudo、systemctl 这些词列出来,比通读口号更快。列得出来,才能决定哪些语句先在隔离环境跑。再跑一次还会不会重复建用户、覆盖配置、重置已经改过的密钥,也要单独看。安装笔记应留下脚本地址、取回时间、校验和、执行账号和改动过的单元文件。
MonkeyCode 的官方文档给出过这种安装形态:用 bash 从远程地址拉取脚本再执行。这里只把它当作这种形态的例子,不是建议立刻运行。文档同时给出了机器规格和部署文档入口。生产环境应先读部署文档,确认网络、权限、升级和回滚,再决定是否执行。项目开源,也不等于远程主机上的脚本内容自动可审计。
可以收成一条规则:管道命令只是入口提示。真正落地的是固定版本的脚本文件、校验和、在非生产环境先跑一遍,以及记录变更。这四步做不到,就还没有部署方案,只有一条安装命令。
还要把谁有权修改安装命令写进变更记录。命令若只存在聊天窗口或个人笔记里,下一次执行的人无法知道它和上次是不是同一条。放进仓库的安装说明应指向固定文件,而不是复制一长串管道。文件变更走评审,执行记录另外保存。隔离环境先跑通之后,再把同一份校验和带到目标机器,避免两处执行的脚本已经不是同一份。