首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否允许ssh远程命令处理fifo文件(又名管道)?

是否允许ssh远程命令处理fifo文件(又名管道)?
EN

Unix & Linux用户
提问于 2015-03-06 09:35:08
回答 2查看 1.3K关注 0票数 1

我需要用ssh远程命令将一些字符串重定向到fifo文件,但总是被拒绝权限,我执行的命令是:

代码语言:javascript
运行
复制
ssh rundeck@nagios1 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'

然后得到以下错误:

代码语言:javascript
运行
复制
bash: /opt/nagios/nagios.cmd Permission denied

nagios.cmd的文件许可是:

代码语言:javascript
运行
复制
prw-rw---- 1 nagios nagios 0 Mar  16 10:32 /opt/nagios/nagios.cmd

但是,在以运行库用户身份登录到nagios1时,我可以使用sudo命令成功执行该命令:

代码语言:javascript
运行
复制
sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'

nagios1正在运行RHEL5,SELinus设置为允许性。在远程执行命令时,我看不到任何日志输出(消息和安全)。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2015-03-07 00:07:07

SSH运行shell命令。它将参数与中间的空格连接起来,并远程运行该命令。因此,当您在本地shell中键入此内容时

代码语言:javascript
运行
复制
ssh rundeck@nagios1 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'

这就是在远程shell中执行的内容:

代码语言:javascript
运行
复制
sudo su - root -c printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd

如您所见,重定向应用于由sshd调用的外部远程shell,而不是应用于由su启动的内部shell中。您需要一个额外的引用层:一个用于保护特殊字符不受本地shell的影响,从而使它们能够到达远程shell;另一个用于保护来自外部远程外壳的特殊字符,以使它们到达su调用的内部远程shell (加上围绕字符串打印的第三个字符以使其通过该内部shell)。

代码语言:javascript
运行
复制
ssh rundeck@nagios1 'sudo su - root -c '\''printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'\'

您可以通过在非特权shell中执行打印并将其传递到只写入文件的特权命令(不需要是shell)来进行少一级引用。

代码语言:javascript
运行
复制
ssh rundeck@nagios1 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" | sudo tee /opt/nagios/nagios.cmd'

您甚至可以在本地进行打印,这就消除了另一种必要的引用。

代码语言:javascript
运行
复制
printf "Disable_Notification;web01;App:Tomcat:Log:webapp" | ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd

而不是使用print … | …,您可以使用这里的字符串(假设本地shell是ksh、bash或zsh)。

代码语言:javascript
运行
复制
ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd <<<"Disable_Notification;web01;App:Tomcat:Log:webapp"
票数 0
EN

Unix & Linux用户

发布于 2015-03-06 14:32:20

参考这个答案,结合一些其他sudo和ssh标志来分配伪TTY。

代码语言:javascript
运行
复制
ssh -t rundeck@nagios1 "sudo -u root sh -c 'printf \"Disable_Notification;web01;App:Tomcat:Log:webapp\" >> /opt/nagios/nagios.cmd'"
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/188567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档