Linux 修改密码一般使用 passwd 命令,交互式修改每次输入密码很麻烦

本文将介绍非交互式的修改密码,不必每次手动输入修改密码

 

一、passwd交互式修改密码

最普通的修改密码的命令就是passwd命令

# passwd
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters   # 密码过短,建议8个字符以上
Retype new password: 
passwd: all authentication tokens updated successfully.

这种方式修改密码需交互式的手动重复输入两次密码,如果密码复杂一点,可能会出现输错或者输入效率很低的情况

假如有100台机器需修改密码,这时候passwd命令就是灾难!要输100*2次=200次的密码!!!这时候就非常需要一个非交互命令来帮助减轻工作负担。

 

二、非交互式修改密码

新密码为: "Hello@2024"

1、passwd命令+管道+echo命令实现 (强烈推荐,有回显提示)

echo 'Hello@2024' | passwd --stdin root

# echo 'Hello@2024' | passwd --stdin root          
Changing password for user root.
passwd: all authentication tokens updated successfully.

stdin是接受echo后面的字符串做为密码,说白了还是通过变量赋值和管道传参来实现,此方法只需要写一次密码,简洁清晰易懂

注意:echo后面不要忘了加单引号'xx'把新密码引起来,防止双引号"xx"被转义

 

2、passwd命令+printf命令实现 (推荐,有回显提示)

printf "Hello@2024\nHello@2024\n" | passwd root

# printf "Hello@2024\nHello@2024\n" | passwd root  
Changing password for user root.
New password: Retype new password: passwd: all authentication tokens updated successfully.

这种方式是把要修改的密码通过printf打印参数并换行,将参数通过管道传递到passwd命令中,很容易理解

但是这方法不常用,命令相对还是很繁琐,但是易于理解,清晰易懂

 

3、usermod命令实现 (不推荐)

usermod --password $(echo 'Hello@2024' | openssl passwd -1 -stdin) root

这个用法不常见,几乎没有人这么用,这种方法会比你直接输入密码的字符还多

在这里只是展示可以这么去做,但不推荐。

 

4、paasswd命令+EOF(自定义终止符)实现 (不推荐)

passwd root << EOF .... EOF

# passwd root << EOF
> Hello@2024
> Hello@2024
> EOF
Changing password for user root.
New password: Retype new password: passwd: all authentication tokens updated successfully.

这种方法和printf有点类似,将密码通过重定向的方式传输到passwd命令中,去自动做交互,但是依然不够简洁,需交互式两次输入新密码,不推荐

 

5、chpasswd 命令非交互式修改密码

echo "root:Hello@2024" | chpasswd    # 实测这种方法不生效,可能没指定加密算法

这里使用的是chpasswd命令去做,但还是使用管道传递参数。

 

 

参考推荐:

Linux 修改默认端口、增加普通用户、使用密钥等安全登录SSH

Linux 修改SSH 默认端口 22,防止被破解密码

Linux ssh 切换登录用户自动转到root用户

Mac 上启用 root 用户或更改 root 密码

Linux sudo 免密码输入

Linux expect 命令无需输入密码登陆

Linux shell 脚本通过expect实现自动输入密码

ssh + sshpass 自动输入密码登录服务器

Putty 保存密码自动登陆的四种方法

Mac sudo: /etc/sudoers is owned by uid 501, should be 0