我想使用我的 ssh 配置来使用 google cloud cli ( gcloud
) 连接到 google 计算实例。 (这是我问的另一个问题的后续问题,该问题有一个可行的解决方案,但没有解决我问题的这一部分)
所需的功能是ssh <instance-name>.gc
将我连接到 gcloud 实例。
要连接到 gcloud 实例,我可以运行:
/home/me/google-cloud-sdk/bin/gcloud compute --project "myproject" ssh --zone "myzone" me@<instance-name>
所以我在 .ssh/config 中添加了一个条目:
Host *.gc
ProxyCommand /home/me/google-cloud-sdk/bin/gcloud compute --project "myproject" ssh --zone "myzone" me@$(basename %h .gc)
然后我运行ssh <instance-name>.gc
并得到:
# ssh <instance-name>.gc
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_8.0\r': command not found
它似乎建立了连接,但我没有提示输入,所以我按 ctrl-c 来终止它。
我可以创建一个别名来实现类似的行为,但我希望能够将它与 ssh 配置中的其他条目一起使用,这样我就可以将它用作跳转盒。
调试
可能是我误用了,如果我在配置文件中替换命令,ProxyCommand
我会得到相同的行为。如果是这种情况,是否有替代配置可以帮助我实现目标?gcloud
ssh me@<instace-ip>
gcloud
ssh
在幕后使用,您可以在添加--
.我尝试添加 a-- -t
来强制伪终端分配,无需更改。
答案1
我想出了一些有效的语法,也许它可以被清理,但它有效。
Host *.gc
User me
ProxyCommand gcloud compute --project "myproject" ssh --zone "myzone" me@$(basename %h .gc) --command="nc 0.0.0.0 22"