.png)
Estoy intentando conectar SSH a mi instancia de Compute Engine usando CircleCI con un comando que se ve así en config.yml:
gcloud --quiet compute ssh [INSTANCE_NAME] --zone northamerica-northeast1-a --project [PROJECT_NAME] cd /var/www/dev
Puedo autenticarme con éxito y ver el símbolo del sistema en los registros de CircleCI. Sin embargo, los comandos posteriores a SSH no se ejecutan. ¿Qué estoy haciendo mal aquí?
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 ejecutar el comando cd después de una autenticación exitosa.
Respuesta1
Al usar SSH, parece que no se puede cambiar el directorio simplemente pasando el comando, y esta es una limitación de SSH según esto.Publicación de error del servidor. Generalmente, puede ejecutar un archivo ejecutable usando SSH usando -c
flag y de manera similar usando--command
con gcloud comoeste ejemplo.
gcloud compute ssh --zone=us-east1-c test --command="nohup ping -i 5 google.com > foo.out 2> foo.err < /dev/null &"
Sin embargo, según la publicación anterior sobre serverfault, parece que se puede cambiar de directorio usando -t
la bandera, además de ejecutar varios comandos en una sola declaración. Afortunadamente, gcloud también puede hacer uso de dichos indicadores agregando--ssh-flag
. A continuación se muestra un ejemplo que cambia de directorio y genera la ruta del 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.
Tenga en cuenta que SSH salió (conexión cerrada) una vez que pwd
se ejecutó el último comando. Para permanecer conectado y como se sugiere en la publicación, usebash --login
No estoy seguro de cómo se ejecutan los comandos en CircleCI, pero en general, para ejecutar un comando en Linux, puede especificar la ruta completa directamente, en lugar de cambiar el directorio. Por ejemplo, /some/directory/executablefile
ejecutará el executablefile
.