通过expect实现非交互式添加用户并设置密码

默认情况Linux添加用户需要等待New password:提示在输入密码,无法通过一句命令直接添加用户并设置密码,这导致在Shell脚本中添加用户或者批量添加变得困难,我们可以通过expect自制一个非交互式的添加用户并设置密码的命令。

expect

expect是一直可执行工具,通过执行expect脚本来把shell交互的行为提前设置在expect脚本中。

如果没有安装expect,首先安装expect

1
apt intall expect

expect脚本主要有spawn/expect/send三个命令 :

  • spawn后面跟着会产生交互行为的命令
  • expect后面是等待命令产生的交互提示
  • send后面是等到交互提示后输入的字符

非交互添加用户脚本

1
2
3
4
5
6
7
8
9
#!/usr/bin/expect
set username [lindex $argv 0]
set password [lindex $argv 1]
spawn adduser --gecos "" $username
expect "*password"
send "$password\n"
expect "*password"
send "$password\n"
expect eof

例如保存成 adduserwithpw.sh,执行./adduserwithpw.sh user1 pass就可以添加名为user1密码为pass的用户了。