推荐用SSH直接执行远程脚本:在统信UOS终端运行ssh user@remote_ip 'bash -s' < <(base64 -w 0 encoded.txt),需用base64 -w 0禁换行编码,避免特殊字符导致SSH中断。

要在统信UOS终端里直接运行远程服务器上的脚本,不能靠复制粘贴再手动执行,必须让本地shell通过SSH通道加载并执行远端脚本内容,同时确保环境变量、工作路径和权限上下文与远程服务器一致。否则脚本可能因找不到命令、路径错误或权限不足而静默失败。
用SSH直接执行远程脚本(推荐)
这一步操作起来很简单,直接把文件拖进去就行。
在UOS终端中输入:
ssh user@remote_ip 'bash -s'
注意:这个命令会把本地脚本内容通过stdin传给远程bash解释器执行,【远程服务器无需提前保存该脚本】,但要求远程用户对bash有执行权限,且脚本第一行不能是#!/bin/bash——因为bash -s模式不读取shebang,只按纯bash语法解析。
如果脚本依赖特定环境变量(比如PATH包含/usr/local/bin),需显式导出:
ssh user@remote_ip 'export PATH="/usr/local/bin:$PATH"; bash -s'
先上传再执行(适合带二进制依赖的脚本)
当远程脚本调用了本地不存在的工具、需要保留执行权限、或含中文路径时,必须先上传再运行。
方法一:用scp上传+ssh执行
scp -p script.sh user@remote_ip:/tmp/ → ssh user@remote_ip 'chmod +x /tmp/script.sh && /tmp/script.sh'
方法二:用rsync一次性完成上传与执行
rsync -avz --rsync-path="mkdir -p /tmp && rsync" script.sh user@remote_ip:/tmp/ → ssh user@remote_ip '/tmp/script.sh'
【/tmp目录在多数UOS服务器上默认可写且无SELinux限制,比家目录更稳妥】。若脚本需写入自身目录,请确认远程用户对该路径有读写权限,否则chmod +x会失败。
执行带交互的远程脚本
如果脚本运行中要读取用户输入(如read命令),普通ssh 'bash -s'方式会卡住——因为stdin已被重定向为脚本内容。
第一步:用ssh -t强制分配伪终端
第二步:将脚本内容base64编码后传输,避免特殊字符破坏管道
第三步:远程解码并执行:
ssh -t user@remote_ip 'echo "BASE64_CONTENT" | base64 -d | bash'
生成base64的方法:
base64 -w 0 script.sh > encoded.txt
这一步必须用base64 -w 0(禁换行),否则解码失败;【不要用cat script.sh | base64,某些特殊字符会导致ssh连接意外中断】。

















