我们的IT环境中有许多Red Hat linux服务器。我的团队成员要求我编写一个脚本(最好是shell脚本),以便使用SSH一次性更改每个用户的密码。
我试图找到一个解决方案,但我找到的许多脚本都在使用Expect。我们没有在服务器上安装Expect,系统管理员拒绝让我们安装它。此外,用户没有根用户访问权限,因此不能使用passwd --stdin
或chpasswd
。
有没有办法编写一个脚本,以便用户可以运行它并只更改列表中所有服务器上自己用户的密码?
发布于 2012-11-11 17:13:38
远程计算机不需要安装expect。您可以在本地工作站或VM (virtualbox)或任何*nix机器上安装expect,并编写一个调用此.ex (expect)脚本的包装器(发行版与发行版之间可能有一些小的变化,这在CentOS 5/6上进行了测试):
#!/usr/bin/expect -f
# wrapper to make passwd(1) be non-interactive
# username is passed as 1st arg, passwd as 2nd
set username [lindex $argv 0]
set password [lindex $argv 1]
set serverid [lindex $argv 2]
set newpassword [lindex $argv 3]
spawn ssh $serverid passwd
expect "assword:"
send "$password\r"
expect "UNIX password:"
send "$password\r"
expect "password:"
send "$newpassword\r"
expect "password:"
send "$newpassword\r"
expect eof
发布于 2011-11-23 10:47:21
您不需要超级用户访问权限即可使用passwd
。
这个应该可以很好的工作。
passwd <<EOF
old password
new password
new password
EOF
发布于 2011-11-23 11:41:11
您应该尝试pssh (同时使用并行ssh )。
cat>~/ssh-hosts<<EOF
user100@host-foo
user200@host-bar
user848@host-qux
EOF
pssh -h ~/pssh-hosts 'printf "%s\n" old_pass new_pass new_pass | passwd'
https://stackoverflow.com/questions/8236699
复制相似问题