Я использую gcloud compute ssh
для SSH в моем экземпляре, например:
$ gcloud compute ssh shell-server --project=XXXXXXXXXXXXXXXX
No zone specified. Using zone [us-central1-f] for instance: [shell-server].
External IP address was not found; defaulting to using IAP tunneling.
Please choose from the available authentication methods:
1: Security code from Google Authenticator application
2: Voice or text message verification code
Enter the number for the authentication method to use: 1
Enter your one-time password: XXXXXX
username@shell-server ~ $
К сожалению, мне каждый раз приходится использовать двухфакторную аутентификацию. Мне нравится 2FA, но, может быть, есть способ настроить все так, чтобы мне приходилось предоставлять его только каждые несколько часов?
Обновление: Я запустил gcloud compute ssh --dry-run
, который сообщает вам, какую именно команду он выполняет:
/usr/bin/ssh \
-t \
-i /Users/kannan/.ssh/google_compute_engine \
-o CheckHostIP=no \
-o HostKeyAlias=compute.123123123123123123 \
-o IdentitiesOnly=yes \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/Users/kannan/.ssh/google_compute_known_hosts \
-o ProxyCommand='/usr/local/bin/python3 -S /Users/kannan/Software/google-cloud-sdk/lib/gcloud.py compute start-iap-tunnel shell-server %p --listen-on-stdin --project=XXXXXXXXXX --zone=us-central1-f --verbosity=warning' \
-o ProxyUseFdpass=no \
kannan_example_org@compute.123123123123123123
Обновление 2 : я мог бы сохранить gcloud compute start-iap-tunnel
в фоновом режиме и настроить свой SSH для использования этого туннеля, но я ' m надеясь на что-то более автоматическое, подобное удобству SSH ControlMaster = auto
.
Я понял это. Поместите это в ~/.ssh/config:
Host shell-server
User kannan_example_org
IdentityFile ~/.ssh/google_compute_engine
UserKnownHostsFile ~/.ssh/google_compute_known_hosts
CheckHostIP no
StrictHostKeyChecking no
ProxyCommand gcloud compute start-iap-tunnel %n %p --project="..." --zone="..." --listen-on-stdin --verbosity=warning
ProxyUseFdpass no
ControlMaster auto
ControlPersist 30m
ControlMaster auto
: При каждом вызове ssh
/scp
сначала проверять, есть ли существующее соединение с shell-сервером
. Если да, просто поделитесь этим соединением, чтобы не было повторного аутентификации и, следовательно, повторного 2FA. ControlPersist 30m
говорит SSH, что даже после завершения всех вызовов ssh
/scp
, соединение с общим доступом должно оставаться открытым в течение 30 м. Теперь я могу просто использовать обычные команды ssh
и scp
с именем хоста shell-server
.
Примечание: я фактически закончил тем, что установил ProxyCommand
в пользовательский сценарий-обертку, который автоматически определяет --project=...
и --zone=...
из имени хоста.
Двухфакторная аутентификация - это часть службы входа в ОС. Не могли бы вы проверить с помощью приведенной ниже команды, установлен ли у вас флаг для проекта?
gcloud compute project-info описать | grep os
Если он включен, вы можете отключить его для всего проекта или во время создания виртуальной машины.
Дополнительная информация здесь:
https://cloud.google.com/compute/docs/instances/managing-instance-access#enable_oslogin
Надеюсь, это поможет.