我使用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
。
我想到了。把它放在 ~/.ssh/config 中:
ControlMaster auto
: 在每次ssh
/scp
调用时,首先检查是否存在与shell-server
. 如果是这样,只需共享该连接,因此没有重新认证,因此没有重新 2FA。ControlPersist 30m
告诉 SSH 即使在所有ssh
/scp
调用完成后,也要保持可共享连接打开 30m。我现在可以使用带有 hostname 的普通命令
ssh
和命令。scp
shell-server
注意:我实际上最终设置了一个自定义包装脚本,
ProxyCommand
该脚本自动确定主机名。--project=...
--zone=...
2FA 是操作系统登录服务的一部分。您能否通过以下命令验证您是否为项目设置了标志?
gcloud 计算项目信息描述 | grep 操作系统
如果已启用,您可以在整个项目或创建 VM 期间禁用它。
更多信息在这里:
https://cloud.google.com/compute/docs/instances/managing-instance-access#enable_oslogin
我希望它会有所帮助。