You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu本地脚本远程执行仅运行首条命令的问题排查及VPS自动化配置脚本资源求助

Ubuntu本地脚本远程执行仅运行首条命令的问题排查及VPS自动化配置脚本资源求助

看起来你在搭建VPS自动化配置脚本的过程中遇到了一个挺闹心的小问题,我来帮你捋捋原因和解决办法,再给你推荐一些可用的资源。

问题1:脚本仅执行首条命令的原因及解决方法

问题根源

你在SSH命令里加了-tt参数,这个参数的作用是强制为远程会话分配伪终端,但这会打乱脚本的执行流程:
当第一个命令(apt update -y)执行完成后,远程shell会进入交互模式,后续的命令文本只是被打印到终端上,并不会被执行。同时,本地的输入被伪终端占用,导致你手动输入命令也没反应,直到按^C断开连接。

解决办法

给你几个靠谱的方案,按需选择:

方案1:移除-tt参数(最推荐)

因为你执行的是非交互式脚本,不需要强制分配伪终端,直接去掉-tt即可:

# 执行本地脚本的方式
SSHPASS='mypassword' sshpass -e ssh -o StrictHostKeyChecking=no root@XX.XX.XX.XX 'bash -s' < ./VPS_Setup_01_Update_OS.sh

# Here-doc的方式
SSHPASS='mypassword' sshpass -e ssh -o StrictHostKeyChecking=no root@XX.XX.XX.XX <<ENDSSH1
apt update -y
apt upgrade -y
apt autoremove -y
apt autoclean -y
ENDSSH1

方案2:如果需要伪终端(比如后续脚本有交互步骤)

可以把脚本内容用bash -c包裹,同时注意引号转义:

SSHPASS='mypassword' sshpass -e ssh -tt -o StrictHostKeyChecking=no root@XX.XX.XX.XX "bash -c 'apt update -y && apt upgrade -y && apt autoremove -y && apt autoclean -y'"

方案3:先传脚本到远程再执行(适合复杂脚本)

把本地脚本上传到远程机器的临时目录,再远程执行,避免输入流的问题:

# 上传脚本
SSHPASS='mypassword' sshpass -e scp ./VPS_Setup_01_Update_OS.sh root@XX.XX.XX.XX:/tmp/
# 执行脚本
SSHPASS='mypassword' sshpass -e ssh -o StrictHostKeyChecking=no root@XX.XX.XX.XX 'bash /tmp/VPS_Setup_01_Update_OS.sh'

问题2:VPS自动化配置脚本的资源推荐

你可以从这几个方向找现成的资源,再根据自己的需求修改:

  • Ubuntu Cloud Init配置:这是Ubuntu官方的自动化初始化工具,很多云服务商都支持。你可以写一个cloud-config文件,定义用户创建、时区设置、软件更新、SSH配置等内容,比bash脚本更标准化、更可靠。
  • 社区开源脚本:搜索关键词比如「ubuntu vps setup script」「ubuntu server hardening script」,会找到很多开发者分享的初始化脚本,通常包含创建sudo用户、禁用root远程登录、配置UFW防火墙、安装常用工具等核心功能,你可以直接修改复用。
  • 配置管理工具Playbook:如果想更专业地管理VPS配置,可以试试Ansible。很多社区分享了现成的Ubuntu VPS初始化Playbook,你只需要修改少量参数就能直接使用,后续维护多台VPS也更方便。

备注:内容来源于stack exchange,提问作者Emmanuel FRANCOIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:32:47