%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20Google%20Compute%20Engine%EC%97%90%20SSH%EB%A1%9C%20%EC%97%B0%EA%B2%B0.png)
config.yml에서 다음과 같은 명령으로 CircleCI를 사용하여 Compute Engine 인스턴스에 SSH를 시도하고 있습니다.
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 &"
-t
그러나 위의 serverfault 게시물을 보면 하나의 명령문에서 여러 명령을 실행하는 것 외에도 플래그를 사용하여 디렉토리를 변경할 수 있는 것으로 보입니다 . 다행히도 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.
마지막 명령이 pwd
실행되면 SSH가 종료됩니다(연결이 닫힘). 로그인 상태를 유지하고 게시물에서 제안한 대로 사용하려면bash --login
CircleCI에서는 명령이 어떻게 실행되는지 잘 모르겠지만 일반적으로 Linux에서 명령을 실행하려면 디렉터리를 변경하는 대신 전체 경로를 직접 지정할 수 있습니다. 예를 들어 /some/directory/executablefile
을(를) 실행합니다 executablefile
.