在Ubuntu中代替passwd --stdin的选择

我正在尝试将一个OpenVPN服务器从CentOS迁移到Ubuntu 18.04。
有一个脚本用于创建新的VPN用户。其中一部分是生成一个新的密码,并将其作为Linux密码传递给新用户(在此之上还有MFA,因此这只是身份验证过程的一部分)。
然而,该脚本使用以下行来实现这一点:
echo ${VPN_PASSWORD} | passwd "${VPN_USER}" --stdin

经过长时间的折腾,我发现Ubuntu没有--stdin选项来使用passwd命令。
然而,我还没有找到其他的替代方法。
以下是我的脚本的相关部分。
我们生成一个密码:
VPN_PASSWORD=$(cat /dev/urandom | tr -dc 'A-Z0-9' | head -c 8)

我们添加了一个新用户,并尝试将此密码分配给它:
echo "Adding Unix user ${VPN_USER}"
useradd -G vpnusers -m -s /sbin/nologin $VPN_USER
if [ "$?" != 0 ]
then
    echo "Could not create user. (Are you sudo?!)"
    exit 1
fi

echo ${VPN_PASSWORD} | passwd "${VPN_USER}" --stdin
echo "User created."

用户正在创建中,但是我遇到了一个关于密码的错误:
passwd: unrecognized option '--stdin'
Usage: passwd [options] [LOGIN]

我已经努力了一整天,试图找到这个问题的答案,并尝试了很多很多方法,但我觉得我对Ubuntu的基本知识的缺乏才是真正的问题所在。
1个回答

使用shell设置用户密码,请使用chpasswd命令:
echo "username:cleartext_password" | sudo chpasswd

1无法工作,仍需使用旧密码登录。 - Jazuly
1它百分之百有效,我刚刚检查过,适用于普通用户和Root用户。 - IvanD