如何在 Redhat 上的 Bash 中用一行创建一个带有密码的用户?

如何在 Redhat 上的 Bash 中用一行创建一个带有密码的用户?

useradd有一个-p标志,您可以使用该标志指定使用 crypt 加密的密码密文。但是更高版本的 Linux 没有 crypt。

如何在 RedHat 中用一行代码创建一个具有预定义密码的新用户?

更新以防止在没有上下文或参与的情况下出现更多驱动性负面投票:我的脚本在 Amazon Web Services 的自动设置环境中使用。该脚本下载并安装软件先决条件以及主要业务线应用程序,对其进行配置,为其添加配置文件等。此应用程序需要做的另一件事是创建一个 SFTP 服务来来回传输一些分类账文件(该服务不受我的控制,因此我无法通过公钥身份验证满足此要求)。自动设置中的步骤之一是创建外部系统将登录以执行 SFTP 的用户,但 RedHat 中的 useradd 命令默认会创建一个没有密码的锁定用户,然后您互动地使用 passwd 设置密码。这不是自动脚本中的选项。-p 标志存在,但它需要使用 crypt 加密的密文,crypt 本身使用(我认为)影子文件使用的任何加密算法,但似乎该实用程序在后来的 Linux 和类似 Linux 的操作系统中已经不存在了一段时间。解决这个问题的唯一方法是在另一个较旧的系统上加密密码,然后在脚本中使用密文吗?由于脚本中的任何密码都是使用 KMS 解密检索的,因此脚本中没有可查看的明文秘密,因此这似乎需要付出很多努力。

答案1

这个解决方案应该可以解决问题:

sudo useradd -p $(openssl passwd -1 密码) 用户名

此命令创建一个用户,其用户名为“username”,密码为“password”。

选择:

用户添加测试
echo "用户名:密码" | chpasswd

测试平台:Ubuntu 16.04 / Debian 9

答案2

对于 RedHat(此版本为 7.3 Maipo),以下不是特别巧妙的解决方案有效:

useradd your-service-user; echo s3cr3tP4ssW0rd! | passwd your-service-user --stdin

这将使用标准输入来添加passwd密码。

答案3

这是与问题无关但很重要的内容。记得清除你的历史记录,因为你的密码也会存储在那里。

使用命令“history”清除范围从 -2 到 -1 的最后两行

history -d -2--1

一行示例即可完成所有操作。

useradd -G wheel youruser; echo yourpassword | passwd youruser --stdin  ; history -d -1

注意,您需要较新版本 (5.1.x) 的 bash 才能使用负索引。请检查:echo "${BASH_VERSION}"

谢谢你!

相关内容