如何在 Ubuntu 20.04 上使用 Cloud-init 设置自定义密码?
How do I set a custom password with Cloud-init on Ubuntu 20.04?
最近,我通过将我的配置安装到映像中来让 Cloud-Init 工作。这一切都很好,它有效。如果我破坏配置,它会告诉我。它没有告诉我为什么不允许我登录。
我尝试使用 echo possible | mkpasswd -m sha-512 -s
创建自己的密码,并复制快速入门页面上的示例:https://wiki.ubuntu.com/FoundationsTeam/AutomatedServerInstalls/QuickStart
都不行。我也尝试过设置自定义用户名。没有任何改变。默认的 ubuntu:ubuntu
也不可用。 ubuntu 也不是空白。
我正在使用什么:
https://releases.ubuntu.com/20.04/ubuntu-20.04-live-server-amd64.iso
https://wiki.ubuntu.com/FoundationsTeam/AutomatedServerInstalls/QuickStart
# echo possible | mkpasswd -m sha-512 -s
$nqZiIASVBA.iFnubU0ImWVrv4XhtEq9XhSh9UYNFQ7yC9Lf7A.uheSlJ3cgI5d9ltkUwRq.X8lAwoQuLAMem6v.gJNGYwk5XA0
以下配置及其提供的密码,或以上;
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu-server
password: "$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
username: ubuntu
我也试过像这样设置用户块:
我要的是:
- 关于预期的哈希类型的更好文档。
- 有效的用户数据配置
我面临着同样的问题。通过在安装过程中使用 shell,我看到没有创建用户,因此我们在重启后无法登录。我不知道为什么,要么是 subiquity 中的错误,要么是缺少有关如何正确使用它的文档。 Neverteless,我能够在我的自动安装文件中使用这个技巧创建一个用户:
late-commands:
- useradd -m -R /target -u 1001 ubuntu
- echo "ubuntu:ubuntu" | chroot /target /usr/sbin/chpasswd
- usermod -R /target -aG sudo ubuntu
我终于找到了一个可以创建可用帐户的工作配置;
users:
- default
- name: kim
passwd: "$kW4vfBM9kGgq4hr$TFtHW7.3jOECR9UCBuw9NrdSMJETzSVoNQGcVv2y.RqRUzWDEtYhYRkGvIpB6ml1fh/fZEVIgKbSXI9L1B6xF."
shell: /bin/bash
lock-passwd: false
ssh_pwauth: True
chpasswd: { expire: False }
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
ssh_authorized_keys:
- ssh-rsa ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCbJ7oF5RXUj6R1ewF15X2i6RieWFmVUkOyT0DwzgfI8fRl5mMMSRlDRYQi3NznwcWDAxLApF82FomNv8vk1V2SXDGGs8XpOvtgAPpR3JUKJGmxoiES7rxa7bq/JSmpGprsnlCocTJnOfDz6Gz2Ge4+D84EZHOW7ejbkWDBdXOYYRMIlRSoXBkb0017G/OIvPNdwZRYLzLJYjGGL08GX+/Da+lrbz8/FaewXwb/BfjRYESOG+aJNTCOQfgzNsFGJ6EslsMc1bDtCq2pvWUenlUo/2BEAICiJxmXZkAjDrIYcyTzHLE14+UfCiC6pbMEdXF2ndUARr0HcNpvJz8K0Mg4CfjRpxaopfPfHp/lMR36ys0r4bT3q9iU4ClnUAeWxbCK7pUN+D/6TVrIKLOLuuIph81sb5+jW23ycg0fjQ/2/ttKQvTzHwomN6B6T/KgXVt367Iq+uzN02wtk282pJOIIqVi3PSHVcJl1I+bFAzeEdmJP29d/wnp0ZyuNYDp0P8= miesl@mies-pc
autoinstall:
version: 1
identity:
hostname: yamanouchi-node-1
username: ubuntu
password: "$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
refresh-installer:
update: yes
它创建一个用户名 kim
和密码 possible
。我不完全确定是否需要 refresh-installer(我不这么认为)。使用密码 ssh 并且没有密码 root 是非常不安全的,但是嘿。你可以自己配置。
ubuntu
帐户仍然无法使用。我不知道为什么。
对于 ubuntu 20.04,我发现在没有 /etc/securetty 的情况下我无法登录到控制台。我回答这个问题是因为不清楚您是否正在尝试通过控制台访问您的帐户。
runcmd:
- cp /usr/share/doc/util-linux/examples/securetty /etc/securetty
我发现如果我将 /etc/securetty 安装为 runcmd,我就可以在系统控制台上使用这些 cloud-config 用户登录。否则,认证将失败。
我对决定使用此示例的安全后果不作任何声明。
如果您通过 cloud-init 添加任何用户,则根本不会创建默认的 ubuntu
用户。您会注意到 /home/ubuntu/
目录不存在。
要创建允许 SSH 身份验证的 cloud-init,并设置密码以便我可以使用 sudo
,我已经成功地使用了这些步骤:
使用 mkpasswd
创建密码哈希:
$ mkpasswd -m sha-512
Password: <enter your password here>
$nq4v1BtHB8bg$Oc2TouXN1KZu7F406ELRUATiwXwyhC4YhkeSRD2z/I.a8tTnOokDeXt3K4mY8tHgW6n0l/S8EU0O7wIzo.7iw1
然后,我在 cloud-init 中使用此部分:
users:
- name: brandon
groups: [ sudo ]
shell: /bin/bash
lock_passwd: false
passwd: "$nq4v1BtHB8bg$Oc2TouXN1KZu7F406ELRUATiwXwyhC4YhkeSRD2z/I.a8tTnOokDeXt3K4mY8tHgW6n0l/S8EU0O7wIzo.7iw1"
ssh-authorized-keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1zzzBBBGGGg3BZFFzTexMPpOZJbSa6OlzycjkPhsh4Qg2tSWZyXZ my-key-name
我更喜欢使用 groups: [ sudo ]
语法通过组授予对 sudo 的访问权限,这是个人对 sudo
指令用法的偏好。
如果你的图片是:focal-server-cloudimg-amd64.img
rm -f vm_0001-focal-server-cloudimg-amd64.qcow2
qemu-img create -f qcow2 -F qcow2 -b focal-server-cloudimg-amd64.img vm_0001-focal-server-cloudimg-amd64.qcow2 20G
qemu-img info vm_0001-focal-server-cloudimg-amd64.qcow2
VM_NAME="ubuntu-20-cloud-image"
USERNAME="programster"
PASSWORD="thisok"
echo "#cloud-config
system_info:
default_user:
name: $USERNAME
home: /home/$USERNAME
password: $PASSWORD
chpasswd: { expire: False }
hostname: $VM_NAME
# configure sshd to allow users logging in using password
# rather than just keys
ssh_pwauth: True
" | sudo tee user-data
cloud-localds ./cidata.iso user-data
qemu-system-x86_64 -m 2048 -smp 4 -hda ./vm_0001-focal-server-cloudimg-amd64.qcow2 \
-cdrom ./cidata.iso -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 -nographic
另一个例子:
rm -f vm_0001-focal-server-cloudimg-amd64.qcow2
qemu-img create -f qcow2 -F qcow2 -b focal-server-cloudimg-amd64.img vm_0001-focal-server-cloudimg-amd64.qcow2 20G
qemu-img info vm_0001-focal-server-cloudimg-amd64.qcow2
cat >user-data <<'EOF'
#cloud-config
users:
- default
- name: jamlee
homedir: /home/jamlee
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
lock_passwd: false
shell: /bin/bash
passwd: $yO/Yf/zQbbIXlaHN$cA/i6a6.Cp7cnHl9HEhSPyVLtsitWs3oe/2NARVCKAn54LU2kT92/vqzpeSP3N87SGFkSHGBe7uQxshZXTbL./
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6/fB4NNy2k+oAHA4Q4pOUCdH997mQq9BtxoOx99MdS+cRKYITVlN1VaLW+beYgTtTYLRdrJhgPBCk9BzriUEXhFO1D6cOslkCxHsQO5M8FPJEU+I/OSRvpU2QYnhYwP9RRKs1XjwdJ2sg924xYLHdfqcRazRFdLGmKnmz8lLrhz0HrBaBIG8Qm58YpfSrkEQ6eAs+1Xf/1VlCTN4sKq2lwLYGFv8GkMOPRndhiEEc5HTZPfGtOp928xJR63WxUoWn2deDGQxU+Z3wGlZ4Ag0SHGM6uZkaRD+LYZHj+m7J979SJ2uqiLC4YCMjoQF5yqUgsu6bzvVh5TesrW2FZ1PrdWjxZGkmS7gv5PJnAdJ4xKLuuG9Bq5QZmWSTPMaKo6Z23HbAbmBj1stUfNbF7apt+GPiGjR4yZk5+tNCQ2n5fRCufNdsFyeBIXnx6MMugbKq2O70F365fyVNR0otleISpmnpnPlfG+n/+rhdf6w5+b0SYaJ3bBYMdXCrTZ8lj68= root@DESKTOP-SBBNAKK
system_info:
default_user:
name: ubuntu
home: /home/ubuntu
password: ubuntu
chpasswd:
expire: false
hostname: vm-001
ssh_pwauth: yes
EOF
cloud-localds ./cidata.iso user-data
qemu-system-x86_64 -m 2048 -smp 4 -hda ./vm_0001-focal-server-cloudimg-amd64.qcow2 \
-cdrom ./cidata.iso -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 -nographic
我没有足够的代表来 post 发表评论,但正如 here 所述,我可以通过我的测试确认,要为现有用户设置密码,您必须使用 hashed_passwd
, 而不仅仅是 passwd
示例:
#cloud-config
users:
- name: root
lock_passwd: false
hashed_passwd: <output from mkpasswd --method=SHA-512 --rounds=4096>
ssh_authorized_keys:
- ssh-rsa <key>
最近,我通过将我的配置安装到映像中来让 Cloud-Init 工作。这一切都很好,它有效。如果我破坏配置,它会告诉我。它没有告诉我为什么不允许我登录。
我尝试使用 echo possible | mkpasswd -m sha-512 -s
创建自己的密码,并复制快速入门页面上的示例:https://wiki.ubuntu.com/FoundationsTeam/AutomatedServerInstalls/QuickStart
都不行。我也尝试过设置自定义用户名。没有任何改变。默认的 ubuntu:ubuntu
也不可用。 ubuntu 也不是空白。
我正在使用什么:
https://releases.ubuntu.com/20.04/ubuntu-20.04-live-server-amd64.iso
https://wiki.ubuntu.com/FoundationsTeam/AutomatedServerInstalls/QuickStart
# echo possible | mkpasswd -m sha-512 -s
$nqZiIASVBA.iFnubU0ImWVrv4XhtEq9XhSh9UYNFQ7yC9Lf7A.uheSlJ3cgI5d9ltkUwRq.X8lAwoQuLAMem6v.gJNGYwk5XA0
以下配置及其提供的密码,或以上;
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu-server
password: "$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
username: ubuntu
我也试过像这样设置用户块:
我要的是:
- 关于预期的哈希类型的更好文档。
- 有效的用户数据配置
我面临着同样的问题。通过在安装过程中使用 shell,我看到没有创建用户,因此我们在重启后无法登录。我不知道为什么,要么是 subiquity 中的错误,要么是缺少有关如何正确使用它的文档。 Neverteless,我能够在我的自动安装文件中使用这个技巧创建一个用户:
late-commands:
- useradd -m -R /target -u 1001 ubuntu
- echo "ubuntu:ubuntu" | chroot /target /usr/sbin/chpasswd
- usermod -R /target -aG sudo ubuntu
我终于找到了一个可以创建可用帐户的工作配置;
users:
- default
- name: kim
passwd: "$kW4vfBM9kGgq4hr$TFtHW7.3jOECR9UCBuw9NrdSMJETzSVoNQGcVv2y.RqRUzWDEtYhYRkGvIpB6ml1fh/fZEVIgKbSXI9L1B6xF."
shell: /bin/bash
lock-passwd: false
ssh_pwauth: True
chpasswd: { expire: False }
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
ssh_authorized_keys:
- ssh-rsa ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCbJ7oF5RXUj6R1ewF15X2i6RieWFmVUkOyT0DwzgfI8fRl5mMMSRlDRYQi3NznwcWDAxLApF82FomNv8vk1V2SXDGGs8XpOvtgAPpR3JUKJGmxoiES7rxa7bq/JSmpGprsnlCocTJnOfDz6Gz2Ge4+D84EZHOW7ejbkWDBdXOYYRMIlRSoXBkb0017G/OIvPNdwZRYLzLJYjGGL08GX+/Da+lrbz8/FaewXwb/BfjRYESOG+aJNTCOQfgzNsFGJ6EslsMc1bDtCq2pvWUenlUo/2BEAICiJxmXZkAjDrIYcyTzHLE14+UfCiC6pbMEdXF2ndUARr0HcNpvJz8K0Mg4CfjRpxaopfPfHp/lMR36ys0r4bT3q9iU4ClnUAeWxbCK7pUN+D/6TVrIKLOLuuIph81sb5+jW23ycg0fjQ/2/ttKQvTzHwomN6B6T/KgXVt367Iq+uzN02wtk282pJOIIqVi3PSHVcJl1I+bFAzeEdmJP29d/wnp0ZyuNYDp0P8= miesl@mies-pc
autoinstall:
version: 1
identity:
hostname: yamanouchi-node-1
username: ubuntu
password: "$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
refresh-installer:
update: yes
它创建一个用户名 kim
和密码 possible
。我不完全确定是否需要 refresh-installer(我不这么认为)。使用密码 ssh 并且没有密码 root 是非常不安全的,但是嘿。你可以自己配置。
ubuntu
帐户仍然无法使用。我不知道为什么。
对于 ubuntu 20.04,我发现在没有 /etc/securetty 的情况下我无法登录到控制台。我回答这个问题是因为不清楚您是否正在尝试通过控制台访问您的帐户。
runcmd:
- cp /usr/share/doc/util-linux/examples/securetty /etc/securetty
我发现如果我将 /etc/securetty 安装为 runcmd,我就可以在系统控制台上使用这些 cloud-config 用户登录。否则,认证将失败。
我对决定使用此示例的安全后果不作任何声明。
如果您通过 cloud-init 添加任何用户,则根本不会创建默认的 ubuntu
用户。您会注意到 /home/ubuntu/
目录不存在。
要创建允许 SSH 身份验证的 cloud-init,并设置密码以便我可以使用 sudo
,我已经成功地使用了这些步骤:
使用 mkpasswd
创建密码哈希:
$ mkpasswd -m sha-512
Password: <enter your password here>
$nq4v1BtHB8bg$Oc2TouXN1KZu7F406ELRUATiwXwyhC4YhkeSRD2z/I.a8tTnOokDeXt3K4mY8tHgW6n0l/S8EU0O7wIzo.7iw1
然后,我在 cloud-init 中使用此部分:
users:
- name: brandon
groups: [ sudo ]
shell: /bin/bash
lock_passwd: false
passwd: "$nq4v1BtHB8bg$Oc2TouXN1KZu7F406ELRUATiwXwyhC4YhkeSRD2z/I.a8tTnOokDeXt3K4mY8tHgW6n0l/S8EU0O7wIzo.7iw1"
ssh-authorized-keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1zzzBBBGGGg3BZFFzTexMPpOZJbSa6OlzycjkPhsh4Qg2tSWZyXZ my-key-name
我更喜欢使用 groups: [ sudo ]
语法通过组授予对 sudo 的访问权限,这是个人对 sudo
指令用法的偏好。
如果你的图片是:focal-server-cloudimg-amd64.img
rm -f vm_0001-focal-server-cloudimg-amd64.qcow2
qemu-img create -f qcow2 -F qcow2 -b focal-server-cloudimg-amd64.img vm_0001-focal-server-cloudimg-amd64.qcow2 20G
qemu-img info vm_0001-focal-server-cloudimg-amd64.qcow2
VM_NAME="ubuntu-20-cloud-image"
USERNAME="programster"
PASSWORD="thisok"
echo "#cloud-config
system_info:
default_user:
name: $USERNAME
home: /home/$USERNAME
password: $PASSWORD
chpasswd: { expire: False }
hostname: $VM_NAME
# configure sshd to allow users logging in using password
# rather than just keys
ssh_pwauth: True
" | sudo tee user-data
cloud-localds ./cidata.iso user-data
qemu-system-x86_64 -m 2048 -smp 4 -hda ./vm_0001-focal-server-cloudimg-amd64.qcow2 \
-cdrom ./cidata.iso -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 -nographic
另一个例子:
rm -f vm_0001-focal-server-cloudimg-amd64.qcow2
qemu-img create -f qcow2 -F qcow2 -b focal-server-cloudimg-amd64.img vm_0001-focal-server-cloudimg-amd64.qcow2 20G
qemu-img info vm_0001-focal-server-cloudimg-amd64.qcow2
cat >user-data <<'EOF'
#cloud-config
users:
- default
- name: jamlee
homedir: /home/jamlee
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
lock_passwd: false
shell: /bin/bash
passwd: $yO/Yf/zQbbIXlaHN$cA/i6a6.Cp7cnHl9HEhSPyVLtsitWs3oe/2NARVCKAn54LU2kT92/vqzpeSP3N87SGFkSHGBe7uQxshZXTbL./
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6/fB4NNy2k+oAHA4Q4pOUCdH997mQq9BtxoOx99MdS+cRKYITVlN1VaLW+beYgTtTYLRdrJhgPBCk9BzriUEXhFO1D6cOslkCxHsQO5M8FPJEU+I/OSRvpU2QYnhYwP9RRKs1XjwdJ2sg924xYLHdfqcRazRFdLGmKnmz8lLrhz0HrBaBIG8Qm58YpfSrkEQ6eAs+1Xf/1VlCTN4sKq2lwLYGFv8GkMOPRndhiEEc5HTZPfGtOp928xJR63WxUoWn2deDGQxU+Z3wGlZ4Ag0SHGM6uZkaRD+LYZHj+m7J979SJ2uqiLC4YCMjoQF5yqUgsu6bzvVh5TesrW2FZ1PrdWjxZGkmS7gv5PJnAdJ4xKLuuG9Bq5QZmWSTPMaKo6Z23HbAbmBj1stUfNbF7apt+GPiGjR4yZk5+tNCQ2n5fRCufNdsFyeBIXnx6MMugbKq2O70F365fyVNR0otleISpmnpnPlfG+n/+rhdf6w5+b0SYaJ3bBYMdXCrTZ8lj68= root@DESKTOP-SBBNAKK
system_info:
default_user:
name: ubuntu
home: /home/ubuntu
password: ubuntu
chpasswd:
expire: false
hostname: vm-001
ssh_pwauth: yes
EOF
cloud-localds ./cidata.iso user-data
qemu-system-x86_64 -m 2048 -smp 4 -hda ./vm_0001-focal-server-cloudimg-amd64.qcow2 \
-cdrom ./cidata.iso -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22 -nographic
我没有足够的代表来 post 发表评论,但正如 here 所述,我可以通过我的测试确认,要为现有用户设置密码,您必须使用 hashed_passwd
, 而不仅仅是 passwd
示例:
#cloud-config
users:
- name: root
lock_passwd: false
hashed_passwd: <output from mkpasswd --method=SHA-512 --rounds=4096>
ssh_authorized_keys:
- ssh-rsa <key>