如何通过自动脚本提供无密码 sudo

如何通过自动脚本提供无密码 sudo

任何使用过 Multipass 或 AWS 的人都熟悉ubuntu拥有无密码 sudo 访问权限的用户。我通过每个虚拟机启动多个虚拟机multipass,每个虚拟机都有许多用户,出于两个原因,我希望他们的帐户无密码 sudo

  1. sudo他们只能使用公钥/私钥登录,而不能使用用户名/密码登录,因此,如果没有密码,他们就无法输入密码
  2. 开发人员需要能够调用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我认为是管理员的成员,并且我[盲目地]将所有用户帐户添加到该组,但这也不起作用。

我有两个问题,其实是同一个问题

  1. Ubuntu 如何可以在没有密码的情况下调用 sudo 以及在哪里指定它?
  2. 我如何以自动化的方式将同一权限扩展至其他用户?

答案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)

相关内容