这是一个分为两部分的问题:
- GCE 实例是否有稳定的公共 DNS 名称?例如,具有公共 IP abcd 的默认 DNS 名称似乎是 dcbabc.googleusercontent.com
如果是,获取此信息的最佳方式是什么?这是我迄今为止一直在使用的 hack:
EXTERNAL_IP=$(curl -s http://bot.whatismyipaddress.com/) EXTERNAL_DNS=$(dig +short -x ${EXTERNAL_IP})
这是一个分为两部分的问题:
如果是,获取此信息的最佳方式是什么?这是我迄今为止一直在使用的 hack:
EXTERNAL_IP=$(curl -s http://bot.whatismyipaddress.com/)
EXTERNAL_DNS=$(dig +short -x ${EXTERNAL_IP})
可以进行反向查找,对于 IP 地址,您可能更喜欢使用 gcutil https://developers.google.com/compute/docs/gcutil/tips
EXTERNAL_IP=$(gcutil getinstance --format=csv --zone=[your_zone] [your_instance] | grep external-ip | cut -d "," -f 2)
GCE 实例目前没有针对其外部 IP 地址的公共 DNS 名称。但是现在有一个gcloud compute config-ssh
(docs)命令是一个很好的替代品。
这会将Host
块插入到您的~/.ssh/config
文件中,其中包含主机密钥的 IP 地址和配置。
虽然这只对 SSH(以及基于 SSH 的应用程序,如 Mosh 和 git+ssh)有帮助,但它确实比 DNS 有一些优势:
没有像 DNS 那样的缓存/传播延迟
它预先填充正确的主机密钥,即使临时 IP 地址发生更改,也会以正确的方式检查主机密钥。
例子:
$ gcloud compute config-ssh
...
$ ssh myhost.us-west1-b.surly-koala-232