跨服务器执行脚本时用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
相关产品推荐
相关产品推荐

