如何在没有用户交互的情况下创建用户并设置密码?

时间:2019-03-30 10:01:39

标签: linux bash archlinux chroot

我最近一直在从事一个名为arch loop的项目,该项目是Arch Linux的自动安装程序。我已经看到了一些安装程序和脚本来简化Arch的安装,但是我每天要安装Arch Linux的次数超过三次,因此遵循Arch-way需要很长时间,并且经常需要用户交互。

问题:

密码是,要创建的有关非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

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

我已经尝试过的东西:

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

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

谢谢:)

2 个答案:

答案 0 :(得分:0)

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

首先,您应该有一台安装Arch的计算机。然后,使用以下两个命令添加所需的用户:useraddpasswd。之后,您可以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版本与目标系统的版本相同。

答案 1 :(得分:0)

存在chpasswd命令。仅在批处理脚本中使passwd可用。只要做:

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

或者可能更好,不需要mount -o bindsysprocdev目录:

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

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