Настройка удалённого подключения
Есть последовательность команд:
- cmd1
- cmd2
- cmd3
Сейчас приходится делать так:
- ssh -o StrictHostKeyChecking=no -p $SSH_PORT $SSH_USER@$SSH_HOST "cmd1 && cmd2 && cmd3"
Хочется что-то типа такого:
- ssh -o StrictHostKeyChecking=no -p $SSH_PORT $SSH_USER@$SSH_HOST
- cmd1
- cmd2
- cmd3
Ответы (2 шт):
Можно иметь скрипт remote-commands.sh, грузить его на удалённый хост через scp и потом исполнять через ssh
2.
remote-ssh
#!/bin/sh
ssh -o StrictHostKeyChecking=no -p $SSH_PORT $SSH_USER@$SSH_HOST "$@"
потом в gitlab-ci.yml
- chmod +x remote-ssh
- remote-ssh cmd1 param1
- remote-ssh cmd2 param1 param2
- remote-ssh cmd3
Правда, с экранированием кавычек и пайпов тут будут нюансы
вот именно так нельзя, конечно.
но можно «примерно так», если вынести список команд в отдельную переменную, значение которой будет содержать переводы строки, и, следовательно, будет корректно понято интерпретатором (например, sh) при чтении списка из stdin (благодаря наличию опции -) именно как набор отдельных команд:
variables:
var1: |
cmd1
cmd2
cmd3
build:
script:
- echo "${var1}" | ssh ... sh -
«хитрость» тут в использовании блочного литерала |, в котором сохраняются символы перевода строк.