SSH no Google Compute Engine usando implantação automatizada (ou seja, CircleCI)

SSH no Google Compute Engine usando implantação automatizada (ou seja, CircleCI)

Estou tentando fazer SSH em minha instância do Compute Engine usando CircleCI com um comando semelhante a este em config.yml:

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

Posso autenticar com sucesso e ver o prompt de comando nos logs do CircleCI. Porém, os comandos após o SSH não estão sendo executados. O que estou fazendo de errado aqui?

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]:~$

Espero que o comando cd seja executado após a autenticação bem-sucedida.

Responder1

Usando SSH, parece que você não pode alterar o diretório apenas passando o comando, e esta é uma limitação do SSH por issoPostagem de falha no servidor. Geralmente, você pode executar um arquivo executável usando SSH usando -cflag e da mesma forma usando--commandcom gcloud comoeste exemplo.

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

No entanto, a partir do post serverfault acima, parece que a mudança de diretório pode ser obtida usando -tflag, além de executar vários comandos em uma instrução. Felizmente, o gcloud também pode fazer uso desses sinalizadores adicionando--ssh-flag. Aqui está um exemplo que altera o diretório e exibe o caminho do sistema.

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

Observe que o SSH saiu (conexão fechada) assim que o último comando pwdfoi executado. Para permanecer logado e conforme sugerido na postagem usebash --login

Não tenho certeza no CircleCI de como os comandos são executados, mas em geral, para executar um comando no Linux, você pode especificar o caminho completo diretamente, em vez de alterar o diretório. Por exemplo, /some/directory/executablefileirá executar o executablefile.

informação relacionada