【问题标题】:Shell script creates linux user account but password goes wrongShell 脚本创建 linux 用户帐户但密码错误
【发布时间】:2016-06-11 18:28:05
【问题描述】:

我编写了一个 shell 脚本来创建用户帐户。该脚本从文本文件中读取用户帐户名和密码,并使用这些信息创建帐户。当我执行脚本时,它成功创建了帐户,但是当我尝试登录这些帐户时,由于Invalid password, please try again 错误而无法登录。

这是我用来创建用户帐户的脚本:

file_name="t.txt"

while read user pass
do
    useradd -p ${pass} ${user}
done < $file_name

EDIT-1: t.txt 文件包含用户帐户信息:每行以空格分隔的用户名和密码。这是文件的sn-p:

user1 abcXYZ
user2 DEFxyz
user3 ijkLMN

EDIT-2: 当我按照史蒂夫克莱恩推荐的方法时,它显示了以下结果:(仍然无法使用给定的密码登录创建的帐户)

passwd: unrecognized option '--stdin'
Usage: passwd [options] [LOGIN]

Options:
  -a, --all                     report password status on all accounts
  <---------------------------------- SKIPPED ------------------------------->
  -x, --maxdays MAX_DAYS        set maximum number of days before password
                                change to MAX_DAYS

Adding user user1  with the password  abcXYZ123

仍然无法使用给定的密码登录创建的帐户

【问题讨论】:

  • 查看发布的方法是否有效。
  • 添加了您推荐方法的结果,请参阅EDIT-2
  • 你的环境是什么?发行版、版本和密码版本。这个盒子是否配置了 Kerberos、BoKs、KeON?
  • 你能从 /etc/shadow 找到一对夫妇吗?它们看起来怎么样?
  • 前几行在 EDIT-3 中给出

标签: linux bash shell authentication


【解决方案1】:

所以您当前的方法是向 /etc/shadow 添加明文密码。

按原样使用您的脚本...创建了这个。请注意,我在您的密码末尾添加了几位数字以匹配标准的 8 个字符以抑制“您确定”提示。

user1:abcXYZ123:16963:0:99999:7:::
user2:DEFxyz142:16963:0:99999:7:::
user3:ijkLM1564:16963:0:99999:7:::

用户文件

[root@localhost ~]# cat t.txt s.txt
user1 abcXYZ123
user2 DEFxyz142
user3 ijkLM1564
user4 abcXYZ123
user5 DEFxyz142
user6 ijkLM1564

脚本

#!/bin/bash -e
#Adding user1, user2, user3 using your method.
file_name="t.txt"
while read user pass
do
    #useradd ${user} -p ${pass}
    useradd -p ${pass} ${user}
    echo "Adding user "${user}"  with the password  "${pass}
done < $file_name

#Adding user4, user5, user6 using the recommended method.
file_name="s.txt"
while read user pass
do
    #useradd ${user} -p ${pass}
    useradd ${user}
    echo "${pass}" | passwd --stdin ${user}
    echo "Adding user "${user}"  with the password  "${pass}

done < $file_name

使用这两种语法,在 /etc/shadow 中产生了这些结果

user1:abcXYZ123:16963:0:99999:7:::
user2:DEFxyz142:16963:0:99999:7:::
user3:ijkLM1564:16963:0:99999:7:::
user4:$1$NpazYQAn$tlhfQLlP0CaFiUeNeK8HW.:16963:0:99999:7:::
user5:$1$4z8G4gvh$v0jzcV5xbhWixU1LG9mwW.:16963:0:99999:7:::
user6:$1$cBkcYJkJ$7A.j6E3gy/umUcVmY0tgt0:16963:0:99999:7:::

因此,我发布的方法有效。 更新: Ubuntu 工作方法如下。这是基于 Rhel 的系统的标准输入。

useradd ${user}
echo "${pass}" | passwd --stdin ${user}

如果您完全决定使用该方法,我建议您安装 mkpasswd 并使用此语法。

 useradd -p $(mkpasswd ${pass}) ${user}

Ubuntu Passwd 标准输入更新

echo ${user}:${pass} | /usr/sbin/chpasswd

【讨论】:

  • 但我需要以编程方式进行,这样设置密码有什么问题?
  • 嗯,我正在重新考虑这个想法。您能否发布您的 t.txt 文档的结构,以便我可以根据您的特定需求对其进行调整?
  • 每行两个空格分隔的字符串:用户名和密码
  • 您能否通过编辑您的原始帖子来发布示例。
  • Np 伙计,我们可以通过预先提供这些信息节省大量时间,哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多