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/)
导航