我正在使用 Yandex CLoud CLI 创建虚拟机。
yc compute instance create \
--name demo-1 \
--hostname demo-1 \
--metadata-from-file user-data=startup.sh \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2004-lts \
--zone ru-central1-a \
--network-interface subnet-name=default-ru-central1-a,nat-ip-version=ipv4
我还有
startup.sh
脚本在创建虚拟机时运行:
#!/bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- "s/nginx/Yandex Cloud - ${HOSTNAME}/" /var/www/html/index.nginx-debian.html
EOF
我在期待什么?
Nginx 起始页带有“demo-1”而不是“nginx”标头
我得到了什么?
Nginx 起始页使用我的本地主机名而不是“nginx”!
一些有趣的事情: 当我检查 COM 端口时,我发现主机名已明确定义:
<14>Mar 13 08:30:57 cloud-init: #############################################################
<14>Mar 13 08:30:57 cloud-init: -----BEGIN SSH HOST KEY FINGERPRINTS-----
<14>Mar 13 08:30:57 cloud-init: 1024 SHA256:<content> root@demo-1 (DSA)
<14>Mar 13 08:30:57 cloud-init: 256 SHA256:<content> root@demo-1 (ECDSA)
<14>Mar 13 08:30:57 cloud-init: 256 SHA256:<content> root@demo-1 (ED25519)
<14>Mar 13 08:30:57 cloud-init: 3072 SHA256:<content> root@demo-1 (RSA)
<14>Mar 13 08:30:57 cloud-init: -----END SSH HOST KEY FINGERPRINTS-----
<14>Mar 13 08:30:57 cloud-init: #############################################################
为什么 CLI 在远程服务器上运行时采用本地环境?
此问题的出现是由于 YC CLI 版本 0.113 中引入的更改所致。从这个版本开始,通过
--metadata-from-file
参数指定的文件中的环境变量将在本地计算机上执行命令时被替换。因此,${HOSTNAME}
会替换为您的 本地主机名。
要解决此问题,您可以使用双美元符号来转义美元符号:
$${HOSTNAME}
。这可以防止在本地计算机上发生替换,并允许在预期环境中正确解释变量。