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

跨服务器执行脚本时用sudo仍遇Permission denied报错的问题

解决SSH执行脚本时的Permission Denied问题

首先得搞清楚你遇到的问题根源:你执行的命令里,< /root/work/task.sh 是Server B本地的shell在处理重定向,和Server A的操作无关。也就是说,这个错误是在告诉你:Server B上的当前用户没有权限读取本地的/root/work/task.sh文件——你之前在Server A上修改脚本权限完全没用,因为你根本没从Server A读取脚本,而是从Server B本地读了之后传给Server A执行。

下面给你两种针对性的解决办法,你可以根据实际需求选择:

情况1:脚本确实在Server B本地,要传给Server A执行

问题出在重定向操作是在sudo生效前执行的,所以即使加了sudo,shell还是用当前用户权限去读文件。你可以换个方式,用sudo先读取文件,再把内容通过管道传给ssh:

sudo cat /root/work/task.sh | ssh root@ip_A 'bash -s'

这样sudo作用在cat命令上,能顺利读取Server B本地的脚本文件,再把内容发送到Server A的bash进程执行。

情况2:脚本其实在Server A上,你想直接在Server A运行它

那你原来的命令逻辑错了,不需要从本地传文件。直接让SSH远程执行Server A上的脚本即可:

ssh root@ip_A 'bash /root/work/task.sh'

你已经在Server A上给脚本加了777权限,只要Server A上的路径正确,这个命令就能直接运行脚本。

额外检查点

  • 确认Server B上的/root/work/task.sh路径是否正确:如果是相对路径(没写/开头),要确保当前工作目录下确实有root/work/task.sh,不然会找不到文件。
  • 确认Server A允许root登录:检查Server A的/etc/ssh/sshd_config里的PermitRootLogin是否设置为yes或者prohibit-password(如果用密钥登录的话),不然SSH会拒绝root连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:33:39