Любое специальное разрешение ssh удаленная команда, работающая над файлом fifo (так называемый канал)?

Мне нужно перенаправить некоторые строки в файл fifo с удаленной командой ssh, но всегда получило разрешение, и я выполнил следующую команду:

ssh rundeck@nagios1 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd' 

Затем получил эту ошибку:

 bash: /opt/nagios/nagios.cmd Permission denied 

Разрешенным файлом nagios.cmd является:

 prw-rw---- 1 nagios nagios 0 Mar 16 10:32 /opt/nagios/nagios.cmd 

Однако я могу успешно выполнить эту команду, когда я вошел в систему nagios1 в качестве пользователя rundeck с помощью команды sudo:

 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd' 

В nagios1 работает RHEL5, для SELinus установлено значение Permissive. Я не вижу никаких выходных данных журнала (сообщение и безопасность) во время выполнения команды удаленно.

2 Solutions collect form web for “Любое специальное разрешение ssh удаленная команда, работающая над файлом fifo (так называемый канал)?”

SSH запускает команду оболочки. Он объединяет свои параметры с пробелами между ними и запускает их удаленно. Таким образом, когда вы вводите это в свою локальную оболочку

 ssh rundeck@nagios1 sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd' 

это то, что выполняется в удаленной оболочке:

 sudo su - root -c printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd 

Как вы можете видеть, перенаправление применяется во внешней удаленной оболочке, вызванной sshd , а не во внутреннюю оболочку, запущенную su . Вам нужен дополнительный уровень цитирования: один для защиты специальных символов от локальной оболочки, чтобы они попадали в удаленную оболочку, и один для защиты специальных символов из внешней удаленной оболочки, чтобы они достигли внутренней удаленной оболочки, вызванной su (плюс третий вокруг строки для печати, чтобы она проходила через эту внутреннюю оболочку).

 ssh rundeck@nagios1 'sudo su - root -c '\''printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'\' 

Вы можете сделать это с меньшим уровнем цитирования, выполнив печать в непривилегированной оболочке и передав ее в привилегированную команду (которая не обязательно должна быть оболочкой), которая просто записывает в файл.

 ssh rundeck@nagios1 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" | sudo tee /opt/nagios/nagios.cmd' 

И вы даже можете сделать печать локально, что устраняет другой уровень необходимого цитирования.

 printf "Disable_Notification;web01;App:Tomcat:Log:webapp" | ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd 

И вместо использования print … | … print … | … вы можете использовать строку здесь (предполагая, что ваша локальная оболочка – ksh, bash или zsh).

 ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd <<<"Disable_Notification;web01;App:Tomcat:Log:webapp" 

Обратитесь к этому ответу в сочетании с некоторыми другими флагами sudo и ssh, чтобы выделить Pseudo TTY.

 ssh -t rundeck@nagios1 "sudo -u root sh -c 'printf \"Disable_Notification;web01;App:Tomcat:Log:webapp\" >> /opt/nagios/nagios.cmd'" 
  • Запуск приложения GUI в качестве другого (не root) пользователя
  • Запуск su требует пароля несколько раз.
  • Аутентификация ключа ssh не работает из сети / if-up.d / scripts
  • Как выполнить команду при входе в систему для пользователя системы без домашней папки и личного файла .bashrc?
  • получение IP-адреса пользователей Red Hat, которые подключились с помощью SU -
  • Как я могу работать как другой пользователь?
  • запускать экран после «su'ing для конкретного пользователя
  • Установка пароля root AMI linux
  • Почему я не могу войти в систему как пользователь ftp?
  • Команда pipe внутри exec не будет работать
  • su не запрашивать пароль
  • Linux и Unix - лучшая ОС в мире.