GCP: как использовать CLI для соединения с SSH с вновь созданной виртуальной машиной? - PullRequest
0 голосов
/ 04 ноября 2019

Я думаю, что мне не хватает одного шага в приведенном ниже сценарии.

При первом запуске виртуальная машина создается просто отлично, но соединение отклоняется. От него по-прежнему отказывают, даже если я подожду десять минут после создания виртуальной машины.

Однако, если я использую консоль GCP для подключения вручную «Открыть в окне браузера», я получаю сообщение «Передача ключей SSH ...», и подключение работает. После этого шага скрипт может нормально подключиться.

Что я должен добавить к этому сценарию, чтобы он работал без необходимости вручную подключаться с консоли?

#!/bin/bash
MY_INSTANCE="janne"
MY_TEMPLATE="dev-tf-nogpu-template"
HOME_PATH="/XXX/data/celeba/"


# Create instance
gcloud compute instances create $MY_INSTANCE --source-instance-template $MY_TEMPLATE

# Start instance 
gcloud compute instances start $MY_INSTANCE

# Copy needed directories & files
gcloud compute scp ${HOME_PATH}src/ $MY_INSTANCE:~ --recurse --compress
gcloud compute scp ${HOME_PATH}save/ $MY_INSTANCE:~ --recurse --compress
gcloud compute scp ${HOME_PATH}pyinstall $MY_INSTANCE:~
gcloud compute scp ${HOME_PATH}gcpstartup.sh $MY_INSTANCE:~

# Execute startup script
gcloud compute ssh --zone us-west1-b $MY_INSTANCE --command "bash gcpstartup.sh"

# Connect over ssh
gcloud compute ssh --project XXX --zone us-west1-b $MY_INSTANCE

Полный вывод этого сценария:

(base) xxx@ubu-dt:/XXX/data/celeba$ bash gcpcreate.sh
Created [https://www.googleapis.com/compute/v1/projects/XXX/zones/us-west1-b/instances/janne].
NAME   ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
janne  us-west1-b  n1-standard-1               XXX   XXX  RUNNING
Starting instance(s) janne...done.                                                                                                                                               
Updated [https://compute.googleapis.com/compute/v1/projects/xxx/zones/us-west1-b/instances/janne].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
ssh: connect to host 34.83.3.161 port 22: Connection refused
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

Редактировать: добавление информации о версии gcloud

(base) bjorn@ubu-dt:/media/bjorn/data/celeba$ gcloud version
Google Cloud SDK 269.0.0
alpha 2019.10.25
beta 2019.10.25
bq 2.0.49
core 2019.10.25
gsutil 4.45
kubectl 2019.10.25

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Решение, которое я нашел, таково: подождите.

Для входа в ОС SSH начинает работать примерно через 20 секунд после запуска экземпляра. Для входа не в ОС требуется около минуты.

Так что я просто добавил это после запуска экземпляров вычислений gcloud $ MY_INSTANCE

sleep 20s
0 голосов
/ 05 ноября 2019

Когда вы подключаетесь через консоль, она управляет ключами за вас.

Ваш последний комментарий заставляет меня поверить, что при подключении из консоли вы генерируете ключ SSH, и он каким-то образом позволяет вам запускать скрипт,Я бы порекомендовал вам взглянуть на то, как управлять SSH ключами в метаданных и создавать собственный SSH-ключ для доступа через SDK.

Если за пределами скрипта через SDK вы не можетелибо напрямую по SSH, то я предполагаю, что это по той же причине сгенерированного ключа.

Также, пожалуйста, убедитесь, что при использовании SDK учетная запись службы имеет правильные разрешения.

Дайте мне знать.

...