.png)
Я пытаюсь подключиться по 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
.