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

标签 linux bash archlinux chroot

我最近在做一个名为:arch loop 的项目,它是 Arch Linux 的自动安装程序。我看过一些安装程序和脚本来简化 Arch 安装,但我每天安装 Arch Linux 超过 3 次,所以遵循 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

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

我已经尝试过的事情:

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

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

谢谢你:)

最佳答案

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

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

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

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

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

关于linux - 如何在没有用户交互的情况下创建用户和设置密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55430287/

相关文章:

php - PHP 文件管理应该使用 shell 命令吗?

c++ - C/C++ 如何获取 USB libudev hidraw 设备的 usb 子系统路径?

c - 是否有任何工具可以在运行时检测竞争条件并重写代码以避免将来出现它们

linux - 从文本文件进入一行并编辑它

linux - 如何使用插件删除 Eclipse(在 Arch Linux 上)?

python - 为什么 re 模块试图导入 enum.IntFlag?

linux - G++ 总是因对 _Unwind_GetIPInfo 的 undefined reference 而失败

linux - 文件中放置执行结果的错误符号

戈兰 : panic before malloc heap initialized

linux - $(shell pwd) 给出什么值?