gcloud compute ssh — 避免每次都进行 2FA?

gcloud compute ssh — 避免每次都进行 2FA?

我使用gcloud compute sshSSH 进入我的实例,例如:

$ 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。我喜欢 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 \
    [email protected]

更新 2:我可以继续gcloud compute start-iap-tunnel在后台运行并配置我的 SSH 以使用该隧道,但我希望有更自动化的功能,类似于 SSH 的便利性ControlMaster=auto

答案1

我找到了答案。将其放入 ~/.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-server。如果存在,则只需共享该连接,这样就无需重新认证,因此也无需重新进行 2FA。
  • ControlPersist 30m告诉 SSH,即使在所有ssh/scp调用完成后,仍保持可共享连接打开 30 分钟。

我现在就可以使用带有主机名的普通ssh命令。scpshell-server

注意:我实际上最终设置ProxyCommand了一个自定义包装脚本,可以自动确定--project=...主机--zone=...名。

答案2

2FA 是 OS Login 服务的一部分。您可以通过以下命令验证是否已为项目设置了标志?

gcloud compute 项目信息描述 | grep os

如果已启用,您可以为整个项目或在创建 VM 期间禁用它。

更多信息请点击这里:

https://cloud.google.com/compute/docs/instances/managing-instance-access#enable_oslogin

我希望这会有所帮助。

相关内容