Назад | Перейти на главную страницу

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

Я пытаюсь подключиться к своему экземпляру Compute Engine по SSH с помощью 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.

Используя SSH, похоже, вы не можете изменить каталог, просто передав команду, и это ограничение SSH для этого Сообщение о сбое сервера. Как правило, вы можете запустить исполняемый файл с помощью SSH, используя -c flag, и аналогичным образом используя --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.