Получение кода выхода на удаленном сервере после прыжка через бастион - PullRequest
0 голосов
/ 21 марта 2019

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

Итак, это диаграмма моей архитектуры.

PC => Bastion => remote host

Я использовал этот код для выполнения моей команды и проверки кода возврата:

ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -At ubuntu@$ip_bastion ssh -Aq -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@$ip_server bash <<EOF
{ ${cmd} ; } 2>&1 | sed  -e 's/^/$(colors_next exec)$region:$ip:$type${normal} /'
EOF
echo $?
if [[ $? -ne 0 ]]; then
    error "Error during the command execution."
    exit 1
fi

Но код возврата всегда равен 0, а моя команда не выполнена (Возврат 255 на конечном сервере).

Спасибо за помощь:)

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Если вы используете bash, вы можете использовать переменную массива PIPESTATUS, чтобы получить состояние выхода каждого элемента конвейера.

ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -At ubuntu@$ip_bastion ssh -Aq -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@$ip_server bash <<EOF
{ ${cmd} ; } 2>&1 | sed  -e 's/^/$(colors_next exec)$region:$ip:$type${normal} /'
exit "\${PIPESTATUS[0]}"
EOF
remote_exitcode=$?
echo "remote_exitcode=${remote_exitcode}"
if [[ ${remote_exitcode} -ne 0 ]]; then
    error "Error during the command execution."
    exit 1
fi
0 голосов
/ 22 марта 2019

Команда echo причиняет вам боль.Вам необходимо захватить значение $? перед его отображением, потому что echo сбросит его до 0, предполагая, что команда echo выполнена успешно.

ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -At ubuntu@$ip_bastion ssh -Aq -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@$ip_server bash <<EOF
{ ${cmd} ; } 2>&1 | sed  -e 's/^/$(colors_next exec)$region:$ip:$type${normal} /'
EOF
rc=$?
echo $rc
if [[ $rc -ne 0 ]]; then
    error "Error during the command execution."
    exit 1
fi

При желании вы можете захотеть exit $rc так, чтобы ваш скрипт завершал работу с тем же кодом возврата, что и ваша SSH-команда, что может в некоторых случаях помочь выяснить, что пошло не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...