Как отправить команду в удаленную систему через ssh с concourse

Мне нужно запустить сервер отдыха Java с залом, который находится на машине с Ubuntu 18.04. Моя компания использует версию concourse 5.5.11. Код сервера написан на Java, поэтому достаточно простого java -jar <uber.jar> в командной строке (см. ниже). В производстве у меня не будет этой простой роскоши, отсюда и мой вопрос.

У меня работает команда scp, которая копирует .jar из зала на целевую машину Ubuntu:

scp -i /tmp/key.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ./${NEW_DIR}/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST}:/var/www

Обратите внимание, что мой закрытый ключ передается с параметром -i, и я могу подтвердить, что он работает.

Я следил за этим другим SO Q & A, который казался многообещающим: -machine">Получение ssh для выполнения команды в фоновом режиме на целевой машине , но после нескольких вариантов предложенного решения и других ответов у меня все еще не запущена служба отдыха.

Я пробовал несколько перестановок этой строки в моем сценарии зала:

ssh -f -i /tmp/pvt_key1.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST} "bash -c 'nohup java -jar /var/www/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} -c \"/opt/testcerts/clientkeystore\" -w \"password\" > /dev/null 2>&1 &'"

Я пробовал с ключами -f и -t в ssh и без них, с перенаправлением файлового потока и без него, с nohup и командой фона Linux ('&') и без нее, а также с различными способами выхода из кавычек.

В приглашении bash эта строка успешно запускает мой сервер. Два переключателя необходимы для указания на сертификат и предоставления пароля:

java -jar rest-service.jar -c "/opt/certificates/clientkeystore" -w "password"

Я действительно думаю, что это возможно сделать в Concourse, но я застрял на этом этапе.


person BPS    schedule 02.06.2020    source источник


Ответы (1)


После долгих проб ошибка, кажется, мне нужно было сделать это:

ssh -f -i /tmp/pvt_key1.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST} "bash -c 'sudo java -jar /var/www/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} -c \"/path/to/my/certificate\" -w \"password\" > /var/www/log.txt 2>&1 &'"

Ключ был в том, что мне не хватало части команды «sudo». Использование nohup вместо фонового индикатора Linux bash («&»), похоже, дает мне ошибку в конвейере. Это работает для меня, но другие могут публиковать ответы с лучшими ответами или методами, которые могут быть лучшей практикой.

person BPS    schedule 03.06.2020