.png)
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 -c
flag e da mesma forma usando--command
com 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 -t
flag, 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 pwd
foi 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/executablefile
irá executar o executablefile
.