LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

expect远程修改用户密码

时间:2012-12-17 17:17来源:linuxtone 编辑:linuxtone 点击:
一:通过登陆远程root修改密码 通过远程登陆修改netseek用户密码为52netseek echo 52netseek | ssh -l root 192.168.1.112 passwd --stdin netseek 二: 通过expect脚本登陆普通用户修改自己的密码. #!/usr/bin/ex

一:通过登陆远程root修改密码

通过远程登陆修改netseek用户密码为52netseek
echo "52netseek" | ssh -l root 192.168.1.112 passwd --stdin netseek

二:  通过expect脚本登陆普通用户修改自己的密码.

#!/usr/bin/expect
#@brief to change user password by ssh remote machine

proc usage {funcname} {
    puts "Usage: "
    puts "    $funcname <host> <username> <newpasswd> -user <userpasswd>"
    puts "    $funcname <host> <username> <newpasswd> -root <rootpasswd>"
}   

# check param
if { $argc != 5 } {
    usage $argv0
    exit 1
}

# get param
set host [lindex $argv 0]
set username [lindex $argv 1]
set newpasswd [lindex $argv 2]
set loginname "root"
if { [string compare [lindex $argv 3] "-user"] == 0 } {
    set loginname $username
}
set passwd [lindex $argv 4]
puts "$host $username $newpasswd $loginname $passwd"

spawn ssh -l $loginname $host
expect {
"*(yes/no)*" { send "yes\r"; set sshkey 1 }
"*assword:*" { send "$passwd\r"; set sshkey 0 }
if sshkey == 1 {
    expect "*password:*"
    send "$passwd\r"
}
}
expect "*#"

if { [string compare $loginname "root"] == 0 } {
    #send "echo \"$username:$newpasswd\" | chpasswd\r"
    send "echo \"$newpasswd\" | passwd --stdin \"$username\"\r"
} else {
    send "passwd\r"
    expect {
    "*current*assword:" {send "$passwd\r"}
    "passwd: Authentication token manipulation error" {exit}
    }
    expect "New*assword:"
    send "$newpasswd\r"
    expect "Retype*assword:"
    send "$newpasswd\r"
}
expect "*#"
send "exit\r"

用法:
Usage:
./exp.sh <host> <username> <newpasswd> -user <userpasswd>
./exp.sh 192.168.1.112 netseek 52netseekabc  -user 52linuxtone

转载请保留固定链接: https://linuxeye.com/program/1055.html

------分隔线----------------------------
标签:expect
栏目列表
推荐内容