任何使用过 Multipass 或 AWS 的人都熟悉ubuntu
拥有无密码 sudo 访问权限的用户。我通过每个虚拟机启动多个虚拟机multipass
,每个虚拟机都有许多用户,出于两个原因,我希望他们的帐户无密码 sudo
sudo
他们只能使用公钥/私钥登录,而不能使用用户名/密码登录,因此,如果没有密码,他们就无法输入密码- 开发人员需要能够调用
sudo apt-get
我知道我可以发出命令sudo visudo
,做出一些改变然而,要提供无密码 sudo,这需要人机交互。我尝试使用 sed ( sudo sed -i "s/%admin\s*ALL=(ALL)\s*ALL/%admin ALL=(ALL) NOPASSWD:ALL/g" /etc/sudoers
) 来破解它,但有些东西坏了,然后我无法进入/etc/sudoers
,甚至无法与ubuntu
用户一起进入。
最后,我尝试查看其ubuntu
成员组并发现它是adm
我认为是管理员的成员,并且我[盲目地]将所有用户帐户添加到该组,但这也不起作用。
我有两个问题,其实是同一个问题
- Ubuntu 如何可以在没有密码的情况下调用 sudo 以及在哪里指定它?
- 我如何以自动化的方式将同一权限扩展至其他用户?
答案1
multipass 支持 cloud-init,有了它您可以自动完成所有这些操作,无需任何脚本。
multipass launch --cloud-init <file> ...
并且在 cloudinit 文件中,您可以指定要创建的所有用户,并可以为他们提供无密码 sudo。
它看起来像这样
package_update: true
package_upgrade: true
packages:
- ...
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
home: /home/ubuntu
shell: /bin/bash
groups: [adm, audio, cdrom, dialout, floppy, video, plugdev, dip, netdev, libvirtd]
lock_passwd: True
gecos: Ubuntu
看看cloudinit文档了解详情。
[编辑-添加测试示例]
package_update: true
package_upgrade: true
packages:
users:
- name: user1
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-rsa ...
- name: user2
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-rsa ...
$ multipass launch --cloud-init cloudinit.yaml
Launched: great-dalmatian
$ ssh [email protected]
...
user1@great-dalmatian:~$ id
uid=1000(user1) gid=1000(user1) groups=1000(user1)
user1@great-dalmatian:~$ sudo id
uid=0(root) gid=0(root) groups=0(root)
$ ssh [email protected] "id; sudo id"
uid=1001(user2) gid=1001(user2) groups=1001(user2)
uid=0(root) gid=0(root) groups=0(root)