在shell脚本中直接使用命令修改账户密码

在日常工作中,我们修改用户密码都使用 passwd user 这样的命令来修改密码,但是这样会进入交互模式,即使使用脚本也不能很方便的批量修改,除非使用expect 这样的软件来实现,难道修改一下密码还需要单独安装一个软件包吗? 不,我们其实还有其他很多方法可以让我们避开交互的,下面具体写一下具体的实现方式:

创建测试用户

useradd -d /usr/local/testfiles -s /bin/bash testuser

1.第一种

echo "123456" | passwd --stdin testuser

优点:方便快捷

缺点:如果你输入的指令能被别人通过history或者其他方式捕获,那么这样的方式是很不安全的,更重要的是如果密码同时含有单引号和双引号,那么则无法通过这种方法修改。

注意:的一些发行版(如Debian/Suse)所提供的passwd并不支持--stdin这个参数

2.第2种

chpasswd其实是通过用户输入'用户名:密码'来更改一组用户的密码,还是一个可以批量修改密码的工具,具体的用法详见chpasswd用法:

格式:echo 用户名:密码 | chpasswd

修改账号为testuser的密码为1234567

echo testuser:1234567 | chpasswd

在shell脚本中直接使用命令修改账户密码

也可以批量修改多个用户的密码

(1).首先将用户名密码一起写入一个临时文件

cat users.txt

zhansan:123456
lisi:123456
wangwu:123456
(2).使用如下命令对用户密码进行修改
chpasswd < users.txt

此时,可以使用 123456 来登录系统,密码修改完毕

优点:可以很快速方便的修改多个用户密码

缺点:明文密码写在文件里仍然显得不够安全,但是避免了第一种修改方式不能有特殊字符串密码的情况

3.第3种(强烈推荐此种方式

(1).用 openssl passwd -1 来生成用户口令(此处的用户的密码为:123456)
openssl passwd -1

输出的口令代码为:

$1$eqcranCa$KlmtYjHYWp.Qb4GaB/wpq/

然后创建用户文件users.txt

cat users.txt

testuser:$1$eqcranCa$KlmtYjHYWp.Qb4GaB/wpq/
(2).使用如下命令对用户密码进行修改
chpasswd -e < users.txt

密码修改完毕可以使用123456来登陆

优点:可以很快速方便的修改多个用户密码,和上面两种相比大大增强了安全性.

openssl passwd -1 命令介绍:

openssl passwd -1 命令可以输出shadow里面的密码,把这个命令生成的秘串更改为你shadow里的密码,那么下次你登录系统就可以用你的生成密码的口令来登录了,使用这个命令,即使口令一样,多次执行生成的密码串也不一样。那个hash值对应的密码是完全随机的基于64位字符编码的28位长,因此要破解它是非常困难的,只要不用那些密码已经公布出来的hash值创建账号,即使这些密码文件被公布也还是比较安全的。使用旧的unix哈希可以去掉 -1 参数。