lea*_*rnd 5 amazon-ec2 amazon-web-services
我将以下命令放入运行 RedHat 8 AMI ( ami-0fc841be1f929d7d1) 的 EC2 的用户数据中,当它们运行时,mkdir 尝试在根目录创建 .kube,在我看来,$HOME当时尚未设置。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Run Code Online (Sandbox Code Playgroud)
以下是日志来自/var/log/user-data.log
+ mkdir -p /.kube
+ sudo cp -i /etc/kubernetes/admin.conf /.kube/config
++ id -u
++ id -g
+ sudo chown 0:0 /.kube/config
Run Code Online (Sandbox Code Playgroud)
当我通过 SSH 连接到实例时,它$HOME被正确设置为 /home/ec2-user。
你能告诉我我在这里做错了什么吗?
谢谢
配置 EC2 服务器后,用户数据脚本将以 root 用户身份运行,因此 $HOME 为空。您可以做的是在用户数据脚本的顶部定义 HOME 环境变量,如下所示(在此处插入用户的主目录):
export HOME=/home/ubuntu
Run Code Online (Sandbox Code Playgroud)
我已经尝试过并且它有效(我安装了 NVM、SDKMAN、sbt、java、git、docker;一切正常)。您可能需要在用户数据脚本末尾执行一些 chown 操作,将某些文件的所有者更改回您的用户。例如,如果您的用户数据在您的主目录中设置了一些文件:
chown ubuntu ~/.foo/bar.properties
Run Code Online (Sandbox Code Playgroud)
您正在以 sudo 身份运行,众所周知,它会更改使用用户 shell(例如$HOME)以及基于 shell 上下文的环境变量,例如ssh-agent建立的环境变量。
通常,您可以通过env_keep在/etc/sudoers. 更多信息请参见此处,修改此文件时请小心。
Defaults env_keep=HOME
Run Code Online (Sandbox Code Playgroud)
否则,如果您不想进行上述更改,请确保您拥有执行此操作的权限,而无需运行sudo或传递绝对路径值。
无论如何,我通常会避开重要配置的用户数据,而是使用Ansible、Chef、Puppet等配置工具提前构建一个预烘焙的 AMI,并按照您想要的方式进行配置。
或者,由于无论如何这都在用户数据中,因此您不太可能已经配置了 sudoers 配置,您应该只指定路径。
| 归档时间: |
|
| 查看次数: |
3049 次 |
| 最近记录: |