SSH-подключение к Google Compute Engine с использованием автоматического развертывания (например, CircleCI)

SSH-подключение к Google Compute Engine с использованием автоматического развертывания (например, CircleCI)

Я пытаюсь подключиться по SSH к своему экземпляру Compute Engine с помощью CircleCI с помощью команды, которая выглядит следующим образом в config.yml:

gcloud --quiet compute ssh [INSTANCE_NAME] --zone northamerica-northeast1-a --project [PROJECT_NAME] cd /var/www/dev

Я могу успешно пройти аутентификацию и увидеть командную строку в журналах CircleCI. Однако команды после SSH не выполняются. Что я делаю не так?

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Sep 12 15:53:55 2018 from 18.212.180.159

[USER_NAME]:~$

Я ожидаю, что команда cd будет запущена после успешной аутентификации.

решение1

Используя SSH, похоже, вы не можете сменить каталог, просто передав команду, и это ограничение SSH согласно этомуСообщение о сбое сервера. Как правило, вы можете запустить исполняемый файл с помощью SSH, используя -cфлаг, и аналогично с помощью--commandс gcloud нравитсяэтот пример.

gcloud compute ssh --zone=us-east1-c test --command="nohup ping -i 5 google.com > foo.out 2> foo.err < /dev/null &"

Однако из вышеприведенного сообщения serverfault следует, что изменение каталога может быть достигнуто с помощью -tфлага, в дополнение к выполнению нескольких команд в одном операторе. К счастью, gcloud также может использовать такие флаги, добавляя--ssh-flag. Вот пример, который изменяет каталог и выводит системный путь.

gcloud compute ssh --zone=us-central1-c  instance-2 --ssh-flag="-t" --command="cd /bin; pwd"
/bin
Connection to xx.xx.xx.xx closed.

Обратите внимание, что SSH вышел (соединение закрыто) после выполнения последней команды pwd. Чтобы оставаться в системе и как предлагается в посте, используйтеbash --login

Я не уверен, как в circleCI запускаются команды, но в целом для запуска команды в linux можно указать полный путь напрямую, а не менять каталог. Например, /some/directory/executablefileзапустит executablefile.

Связанный контент