如何配置Google Cloud SSH浏览器不更改实例主机名?为何会自动更改?
解决Google Cloud实例主机名被SSH浏览器工具/升级重置的问题
我之前也碰到过一模一样的问题,折腾了好一会儿才搞清楚背后的原因和可行的解决办法,分享给你:
为什么主机名会被自动改回实例名称?
Google Cloud的VM实例默认依赖Cloud-init工具和Metadata Server来管理系统配置,包括主机名。每次发生以下情况时,系统会自动从Metadata Server同步主机名:
- 使用Google SSH浏览器工具连接实例(这个工具会触发系统重新拉取Metadata配置)
- 实例重启、升级或者维护重启
- 手动刷新Metadata配置
默认情况下,Metadata里的主机名就是你的实例名称(比如my-instance-1),所以每次同步都会把你自定义的主机名覆盖回去。
如何配置避免主机名被修改?
1. 禁用Cloud-init的主机名自动同步
这是最核心的步骤,告诉系统不要用Metadata里的值覆盖自定义主机名:
- Debian/Ubuntu系统:
编辑/etc/cloud/cloud.cfg文件,找到preserve_hostname字段,将其值改为true。如果没有这个字段,直接在文件末尾添加一行:preserve_hostname: true - RHEL/CentOS/Fedora系统:
同样编辑/etc/cloud/cloud.cfg,或者创建一个新的配置文件/etc/cloud/cloud.cfg.d/99-preserve-hostname.cfg,添加内容:
保存后重启Cloud-init服务(或者直接重启实例):preserve_hostname: truesudo systemctl restart cloud-init
2. 设置永久自定义主机名
完成上面的配置后,手动设置你想要的主机名:
sudo hostnamectl set-hostname myhostname.mydomain.net
验证设置是否生效:
hostnamectl
输出里的Static hostname应该显示你自定义的域名。
3. (可选)同步Metadata中的主机名(如果需要保留同步机制)
如果你不想完全禁用Metadata同步,也可以直接修改实例的Metadata,让同步过来的就是你想要的主机名:
gcloud compute instances add-metadata my-instance-1 --metadata=hostname=myhostname.mydomain.net
这样系统同步时就会使用这个自定义值,而不是实例名称。
完成以上配置后,不管是用Google SSH浏览器工具连接,还是实例升级重启,你的主机名都不会再被自动改回实例名称了。
内容的提问来源于stack exchange,提问作者Saif
相关产品推荐
相关产品推荐

