【问题标题】:How Do I Create A User & Set Password Without User Interaction?如何在没有用户交互的情况下创建用户并设置密码?
【发布时间】:2019-03-30 10:01:39
【问题描述】:

我最近在做一个名为:arch loop 的项目,它是 Arch Linux 的自动安装程序。我看过一些安装程序和脚本来简化 Arch 的安装,但我是一个安装 Arch Linux 的人,每天安装 3 次以上,因此遵循 Arch 方式需要很长时间,并且需要不断地进行用户交互。

问题:

密码是,要创建的非root用户的信息是先获取的,等到合适的时候,我们会使用下面的命令:

arch-chroot /mnt useradd -m -g users -G wheel -s /usr/bin/bash archuser
arch-chroot /mnt bash -c "echo -e 'password\npassword\n' | passwd
arch-chroot /mnt bash -c "echo -e 'rootpassword\nrootpassword\n' | passwd root

将密码发送到chroot 系统中的passwd 二进制文件。但我不知道为什么它不起作用。安装完成后通过sudo命令验证密码时。密码似乎可以正常工作。但是当尝试从 tty 以非 root 用户登录时,密码似乎不正确。

我已经尝试过的事情:

  1. 使用以下代码手动加密提供的密码,并使用-p 选项将其传递给useradd 二进制文件:
perl -e 'print crypt("password", "\$6\$SALTsalt\$") . "\n"'"

请指导我稍后如何设置用户提供的密码,而无需任何用户交互。

谢谢你:)

【问题讨论】:

    标签: linux bash archlinux chroot


    【解决方案1】:

    存在chpasswd 命令。它只是为了使passwd 在批处理脚本中可用。做吧:

    echo "root:rootpassword" | arch-chroot /mnt chpasswd
    

    或者更好,不需要mount -o bind sys proc 和 dev 目录:

    echo "root:rootpassword" | chpasswd -R /mnt
    

    @subjective:抱歉,这个项目看起来不错,但还有很多工作要做。我想目的是让 Archlinux 更接近“普通”用户。但是,我不喜欢为项目选择 python。使用普通的 POSIX sh 将使所有人都可以使用它。我不喜欢硬编码的分区,mlocate(你真的使用mlocate吗?),多个arch-chroot调用,你可以只做一个大脚本,不处理os.system错误代码(!),多个pacman甚至没有 -Sy (!) 的调用(如果上游更新了 repos,pacman 可能会失败),还有一些我不喜欢的东西。除此之外,不错的 python 抽象和很酷的目标。我记得几年(或更多)年前的旧 archlinux 安装脚本,它们很好,但我认为无论如何都使用了命令。祝你好运。

    【讨论】:

    • 我已经尝试过chpasswd 命令,但看起来它也无法正常工作。不管怎样,谢谢你给我你对这个项目的意见,这对我很重要。
    • 是的,如果我想快速确认文件的路径,我有时会使用locate 命令。
    • 我没有。在您拥有千兆字节数据的生产服务器上,进程 updatedb 可以在数周内吃掉 100% 的磁盘,mlocate.db 可以从 /var 分区吃掉 100% 的磁盘。普通用户也有千兆字节的数据。普通用户也不使用locate - 他们在nautilus 搜索栏中输入他们需要的内容,这与find -name ... 相同。真的,locate 已经很老了,有很多问题。
    • chpasswd 应该可以工作。它是否失败并显示任何消息?
    • 感谢您回复我并写下答案,我将再次尝试使用chpasswd,这次我也会给您chpasswd给出的输出。
    【解决方案2】:

    以下方式适用于 Ubuntu,我认为它也适用于 Arch。

    首先,您应该有一台安装了 Arch 的机器。然后使用两个命令添加您需要的用户:useradd 和passwd。之后,你可以cat /etc/shadow | grep [username]获取你添加的用户的密码信息,应该是一个字符串,假设是XXX。

    现在,在您的目标系统上,在arch-chroot /mnt useradd -m -g users -G wheel -s /usr/bin/bash archuser 之后,将来自cat /etc/shadow | grep [username] 的字符串添加到目标系统的/etc/shadow 中。该命令应该类似于arch-chroot /mnt sed -i "XXX" /etc/shadow。

    还有一点,你必须确保你得到密码信息的Arch版本和目标系统的版本一致。

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2010-11-21
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多