user-data 用户配置
更新时间:2026年1月15日 11:25
浏览:5
1. 用户管理
(1) 创建新用户
#cloud-config
users:
- name: alice # 用户名
groups: sudo # 加入的用户组
shell: /bin/bash # 默认 shell
sudo: ALL=(ALL) NOPASSWD:ALL # 免密 sudo
lock_passwd: false # 不禁用密码登录
passwd: $6$salt$hashed_password # 加密密码(可用 mkpasswd 生成)
生成加密密码:
openssl passwd -6 -salt "somesalt" "yourpassword"
(2) 修改默认用户(如 ubuntu)密码
#cloud-config
user: ubuntu
password: ubuntu
chpasswd: { expire: False } # 密码永不过期
ssh_pwauth: True # 启用 SSH 密码登录
2. SSH 配置
(1) 注入 SSH 公钥
ssh_authorized_keys:
- ssh-rsa AAAAB3Nz... user@host
- ssh-ed25519 AAAAC3Nza... user@host2
(2) 禁用 SSH 密码登录(仅允许密钥)
ssh_pwauth: False
(3) 修改 SSH 端口
write_files:
- path: /etc/ssh/sshd_config.d/99-custom.conf
content: |
Port 2222
runcmd:
- systemctl restart sshd
3. 软件包管理
(1) 安装软件包
packages:
- nginx
- git
- docker.io
(2) 升级所有软件包
package_update: true
package_upgrade: true
(3) 自定义 Apt 源
apt:
primary:
- arches: [default]
uri: http://mirrors.aliyun.com/ubuntu
security:
- arches: [default]
uri: http://mirrors.aliyun.com/ubuntu
4. 文件管理
(1) 写入文件
write_files:
- path: /etc/motd
content: |
Welcome to My Cloud Server!
owner: root:root
permissions: "0644"
(2) 下载文件
write_files:
- path: /opt/download.sh
content: |
#!/bin/bash
wget https://example.com/file.zip
permissions: "0755"
5. 运行命令
(1) 启动时执行命令
runcmd:
- echo "Hello, World!" >> /tmp/cloud-init.log
- apt-get install -y curl
- systemctl enable docker
(2) 首次启动时运行(仅一次)
bootcmd:
- [ sh, -c, "echo 'Boot time: $(date)' >> /tmp/boot.log" ]
6. 磁盘挂载
fs_setup:
- label: data_disk
filesystem: ext4
device: /dev/vdb
partition: auto
mounts:
- [ /dev/vdb1, /mnt/data, "ext4", "defaults", "0", "0" ]
7. 禁用 cloud-init
#cloud-config
disable_root: false # 允许 root 登录
ssh_pwauth: true # 允许密码登录
manage_etc_hosts: false # 不自动管理 /etc/hosts
cloud_init_modules:
- [users-groups, always] # 仅保留用户管理
完整示例
#cloud-config
users:
- name: alice
groups: sudo
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-rsa AAAAB3Nz... alice@laptop
user: ubuntu
password: ubuntu
chpasswd: { expire: False }
packages:
- nginx
- docker.io
runcmd:
- systemctl enable docker
- echo "Server setup done!" > /tmp/cloud-init-complete.log
关键点
- 第一行必须是 #cloud-config
- YAML 缩进敏感,必须用空格(不能 Tab)
- 命令执行顺序:bootcmd → runcmd
- user-data 仅在首次启动生效(除非手动清理 /var/lib/cloud/)
