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

SSH执行脚本无法生成日志且提示权限拒绝问题求助

解决SSH远程执行带重定向和后台命令的权限错误问题

看起来你遇到的问题是因为本地shell提前解析了命令里的特殊字符,导致远程服务器收到的命令不完整,进而触发了权限报错。我们一步步拆解问题并给出解决方案:

问题根源分析

你当前使用的命令:

ssh xxx@99.99.99.99 ". ./.profile; myscript 2&1 >> /tmp/2244455.log"

这里存在两个关键问题:

  1. 语法错误:2&1是错误的重定向写法,正确的将标准错误输出重定向到标准输出的格式是2>&1
  2. 本地shell解析特殊字符:双引号包裹的命令中,&和>会被你的本地shell优先解析,而非完整传递给远程服务器。比如&会被本地shell当作后台执行符号,导致ssh命令被后台运行,剩下的1 >> /tmp/2244455.log会在本地执行——远程服务器实际收到的命令变成了. ./.profile; myscript 2,此时shell会尝试执行不存在的2命令,自然会报"execute permission denied"。

而你单独在远程执行命令、或不带重定向/后台的ssh命令能正常运行,是因为这些场景下没有触发本地shell的特殊字符解析,远程服务器收到的是完整正确的命令。

解决方案

你可以选择以下任意一种方式修复:

方案1:用单引号包裹远程命令

单引号会阻止本地shell解析任何特殊字符,确保完整命令传递给远程服务器:

ssh xxx@99.99.99.99 '. ./.profile; myscript 2>&1 >> /tmp/2244455.log &'

如果不需要命令在远程后台运行,去掉末尾的&即可。

方案2:转义特殊字符

如果坚持使用双引号,需要转义&和>这些特殊字符,让本地shell忽略它们:

ssh xxx@99.99.99.99 ". ./.profile; myscript 2\>&1 \>\> /tmp/2244455.log &"

方案3:通过标准输入传递命令

另一种更可靠的方式是通过管道把命令传递给远程shell:

echo '. ./.profile; myscript 2>&1 >> /tmp/2244455.log &' | ssh xxx@99.99.99.99 sh

验证

执行修正后的命令后,你可以通过以下方式确认日志是否正常生成:

ssh xxx@99.99.99.99 'cat /tmp/2244455.log'

内容的提问来源于stack exchange,提问作者Ganesh Jadhav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:52:59