SSHリモートコマンドを使用して一部の文字列をfifoファイルにリダイレクトする必要がありますが、権限は常に拒否されます。私が実行したコマンドは次のとおりです。
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
ただし、sudo コマンドを使用して nagios1 に rundeck ユーザーとしてログインすると、次のコマンドを正常に実行できます。
sudo su - root -c 'printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'
nagios1はRHEL5を実行しており、SElinusはPermissiveに設定されています。リモートでコマンドを実行すると、ログ出力(メッセージとセキュリティ)は表示されません。
ベストアンサー1
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
。追加の引用階層が必要です。 1つはローカルシェルの特殊文字がリモートシェルに到達するのを保護し、もう1つは外部リモートシェルの特殊文字がその文字に到達するのを保護するsu
ことです。内殻を通過します)。
ssh rundeck@nagios1 'sudo su - root -c '\''printf "Disable_Notification;web01;App:Tomcat:Log:webapp" >> /opt/nagios/nagios.cmd'\'
許可されていないシェルから印刷し、ファイルへの書き込みのみを許可されている特権コマンドにパイプすることで、参照レベルを1段階下げることができます(シェルである必要はありません)。
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 … | …
代わりに、この文字列を使用できます(ローカルシェルがksh、bash、またはzshであると仮定)。
ssh rundeck@nagios1 sudo tee /opt/nagios/nagios.cmd <<<"Disable_Notification;web01;App:Tomcat:Log:webapp"