тщательно продумано, когда каждая команда выполняется, где она работает, и какой вход он получает.
/ AWK
труба выполняется на локальном хосте, а также переменная замена $ A
. SSH
. Он получает расширенный здесь документ; Это команды, которые выполняются в удаленной оболочке. Sudo
, но, возможно, (в зависимости от оболочки) также некоторые из следующих строк. Sudo SU - uvereotheruser
. Это запускает оболочку как COMEROUSER
, который сначала читает и выполняет, что пользователь .profile
, затем читает команды со своего стандартного ввода. Стандартный вход содержит все, что первая удаленная оболочка не прочитала, что несколько непредсказуемо (это зависит от оболочки и насколько это произошло, чтобы прочитать от входной трубы). , uverotheruser
работает над командами, которые она читала, если таковая имеется. , как-то
, выполняет команду , если
, если она его прочитана). Чтобы избежать здесь расширения документов, используйте цитаты вокруг маркера Heredoc. Чтобы избежать нечестивой смеси стандартных входов, используйте SH -C ...
или быть явным относительно того, что вторая удаленная оболочка получает в качестве его ввода.
ssh -t user@hostname <<'SSH_EOF'
sudo su - someotheruser <<'SU_EOF'
a=`tail -10 /somepath/application.log | awk '/Agent Exited/ { print $3 }'`
if [ "$a" -eq 0 ]
then
echo "Success"
else
echo "Failure"
fi
SU_EOF
SSH_EOF
Вам действительно нужно источник uvereotheruser
.profile
? Если нет, используйте sudo -u uverotheruser
. Если вы сделаете, используйте sudo -I -U uverotheruser
. Определить ваши судюры правило соответственно.
Чтение файла журнала - это единственное, что требует повышенных привилегий, поэтому он имеет смысл, чтобы запустить только команду хвоста
как CommoreUser
.
ssh -t user@hostname <<'SSH_EOF'
a=`sudo -u someotheruser tail -10 /somepath/application.log | awk '/Agent Exited/ { print $3 }'`
if [ "$a" -eq 0 ]
then
echo "Success"
else
echo "Failure"
fi
SSH_EOF
Вы сделаете вашу жизнь намного легче, если вы не смешиваете методы эскалации привилегии. Вместо использования sudo
, чтобы переключиться из , как-то
-
, используйте SSH для localhost. Сторирование двух команд SSH легко. Настройте ключ - вы можете даже настроить ключ, который позволяет запустить определенную команду, такую как хвост -10 / SomePath/application.log
. Определите псевдоним в вашем .ssh / Config
в SSH через emotuser
Счет:
Host hostname-someotheruser
HostName hostname
UserName someotheruser
ProxyCommand ssh someuser@hostname
Тогда запустить
a=$(ssh hostname-someotheruser tail -10 /somepath/application.log |
awk '/Agent Exited/ { print $3 }')
if [ "$a" -eq 0 ]
then
echo "Success"
else
echo "Failure"
fi
Я нашел эту ссылку: http://wiki.gentoo.org/wiki/proxyautoconfig Я надеюсь, если полезно.