我使用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。我喜欢 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
命令。scp
shell-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
我希望这会有所帮助。