当前位置:Linux教程 - Shell - shell - 非交互方式改变登录用户密码

shell - 非交互方式改变登录用户密码

非交互方式改变登录用户密码
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

用SHELL编写改变登录用户密码,
用户名、旧密码、新密码用重定向输入????
急得像热锅上的蚂蚁

从文件里读出数据,放进SHELL中

使用expect,(需要安装expect和tcl)。
#!/usr/local/bin/expect -f
set username $env(UNAME)
set password $env(UPASS)

spawn passwd $username
expect "New password:"
send "$password "
expect "Re-enter new password:"
send "$password "
send "exit "
expect eof

还可以用一个叫pty的工具,也需要下载安装。
#!/bin/sh
/etc/mknod out.$$ p; exec 2>&1
( exec 4<out.$$; rm -f out.$$
<&4 waitfor 'password:'
echo "$2"
<&4 waitfor 'password:'
echo "$2"
<&4 cat >/dev/null
) | ( pty passwd "$1" >out.$$ )
rm -f out.$$

纯shell的不行。用sleep加管道也不行。



使用如下的.c编译生成mypass可以代替passwd命令,配合awk之类工具,把它生成的结果写到shadow里(有的系统是是在passwd里),便可以了。
两位的salt可以随便生成。

#include <stdio.h>
#include <string.h>
main(argc,argv)
int argc;
char *argv[];
{
char line[512],salt[3];
int i,l;
salt[2]='