批量修改远程linux服务器密码
第一种方法  通过expect批量修改linux服务器用户名和密码
公司现在有100多台服务器,需要对服务器进行批量的修改root密码,还要在每台服务器新建一个用户,如果一个一个登到的服务器上进行修改的话,估计一个下午又没有了,首先想到的是我最喜欢的php,其中有个ssh2 模块,不得不承认用php 来处理这样的任务是一件很纠结的事情,然后又想到了用shell,不过发现很快就写不下去了,shell 的交互能力还是不能让人恭维的,最后发现了expectexpect 以其强大的交互能力,无疑是处理这类任务的首选,再加上expect 可以内嵌shell,这使得他变得更强大。
首先要有一个服务器的ip列表,把要处理的ip放在里面
192.168.6.236
192.168.6.235
192.168.6.234
192.168.6.233
192.168.6.232
192.168.6.231
.....
然后是shell脚本 shell.sh
#!/bin/bash
if [ "$1" = "" ] || [ "$2" = "" ] || [ "$1" = "--help" ] [ "$1" = "-h" ]
then
      echo "usage:shell.sh  path/iplist  path/adduser"
        exit
fi
cat $1 | while read line
do
      [ -z $line ] && continue
      $2  $line;
done
echo -e "\n  well done\n"
下面是最重要的部分 adduser
#!/usr/bin/expect
#登录的用户名
set loginuser ""
#密码
set loginpass  ""
#要修改的用户名
set passuser "dfdjfk"
#要修改成的新密码
set newpass "your new password"
#要添加的新的用户名
set newusername "newusername"
#要添加的新用户的密码
set newpasswd  "newpasswd"
set ipaddr [lrange $argv 0 0]
set timeout 300
set cmd_prompt "]#|~]?"
#---------------------------------------------------通过ssh 登录
spawn ssh $loginuser@$ipaddr
set timeout 300
expect {
    -re "Are you sure you want to continue connecting (yes/no)?" {
        send "yes\r"
    } -re "assword:" {
        send "$loginpass\r"
    } -re "Permission denied, please try again." {
        exit
    } -re "Connection refused" {
        exit
    } timeout {
        exit
    } eof {
        exit
    }
}
expect {
  -re "assword:" {
    send "$loginpass\r"
  }
  -re $cmd_prompt {
    send "\r"
  }
}
#-------------------------------------------修改密码
send "passwd $passuser \r";
expect {
"New UNIX password:" {
  send "$newpass\r"
}
"passwd: Only root can specify a user name." {
慕课网中国大学mooc官方  exit
}
}
expect {
"Retype new UNIX password:" {
  send "$newpass\r"
}
}
#------------------------------------------------------添加一个新用户并改密码
expect -re  $cmd_prompt
sleep 1
send "useradd  $newusername \r"
sleep 1
send "passwd $newusername \r";
expect {
"New UNIX password:" {
  send "$newpasswd\r"
}linux修改口令的命令
"passwd: Only root can specify a user name." {
  exit
}
}
expect {
"Retype new UNIX password:" {
  send "$newpasswd\r"
}
}
#---------------------------------------------退出
expect -re $cmd_prompt
exit
ok 调试完也将近花费了一个下午
第二种方法 通过shell脚本实现批量更改密码
#!/bin/bash
# BY kerryhu
# MAIL:king_819@163
# BLOG:kerry.blog.51cto
# Please manual operation yum of c语言指针加一
一、建立信任关系
192.168.9.203 瑁瑁手串价格为管理机
192.168.9.201 192.168.9.202 为远程linux服务器
1、在管理机生成证书、
[root@manage ~]# ssh-keygen -t rsa    (然后一路回车)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.  (私钥)
Your public key has been saved in /root/.ssh/id_rsa.pub. (公钥)
The key fingerprint is:
36:ec:fc:db:b0:7f:81:7e:d0:1d:36:5e:29:dd:5b:a0
 
2、将管理机上的公钥传送到各远程服务器
如远程服务器更改了默认的ssh端口号,就使用scp -P 1717317173为端口号
[root@manage .ssh]# scp id_rsa.pub 192.168.9.201:/root/.ssh/authorized_keys
[root@manage .ssh]# scp id_rsa.pub 192.168.9.202:/root/.ssh/authorized_keys
 
管理机与远程主机信任关系建立完毕
注意:可能会出现并未建立信任关系的情况。还需操作一下步骤 
GNOME下设置ssh-agent
如果你在GNOME运行环境下,执行以下几步配置ssh-agent.ssh-agent工具用户保存你的DSA密钥passphrase以便每次ssh或者scpMachine B的时候. 当你登陆GNOME,openssh-askpass-gnome提示输入passphrase并保存, 直到你退出GNOME. 在该GNOMEsession,ssh或者scp连接到Machine B,系统将不再要求你输入passphrase.
GNOME session中保存passphrase操作步骤:
1.选择Main Menu Button(Panel) => Preferences => MorePreferences => Sessions, 点击 Startup Programs 标签. 点击 Add 并且在StartupCommand 文本框中输入 /usr/bin/ssh-add. 设定一个低于任何一个已经存在的命令的优先级数字,以保证它最后被执行.一个好的ssh-add优先级数字为70或者70以上. 优先级数字越大, 优先级别越低. 如果有其他的程序,这个程序(ssh-add)应该是最低的优先级. 点击 Close 退出.
2.重新登陆GNOME, 也就是重启X. GNOME起动后,出现一个对话框要求你输入passphrase(s). 如果你已经配置了DSARSA密钥对, 系统将提示你都输入. 以后,使用ssh, scp, 或者sftp都不再要求你输入密码了.

X环境下配置ssh-agent
如果没有运行X,则按照以下步骤配置ssh-agent.如果GNOME在运行但是你不想在你登陆的时候提示输入passphrase, 以下过程将在终端窗口,例如XTerm上操作. 如果你运行的X不是GNOME,以下操作将在终端窗口上操作. 然而,你的passphrase仅被该终端窗口记住,而不是全局设定
1.shell提示符下输入以下命令power management是什么意思:
exec /usr/bin/ssh-agent $SHELL

2.输入命令:
ssh-add
输入你的passphrase(s). 如果你已经配置多对密钥,系统将提示你挨个输入.


3.退出系统后,passphrase(s)将会被释放. 当从虚拟控制台或者终端窗口登陆时,每次都必须执行这两条命令.
二、通过shell脚本批量修改远程服务器密码
如果要调用mkpasswd就得安装expect,使用mkpasswd可以随机产生密码
usage: mkpasswd [args] [user]
 where arguments are:
    -l #      (length of password, default = 10)
hbase知识点    -d #      (min # of digits, default = 2)
    -c #      (min # of lowercase chars, default = 2)
    -C #      (min # of uppercase chars, default = 2)
    -s #      (min # of special chars, default = 1)
    -v        (verbose, show passwd interaction)
    -p prog  (program to set password, default = passwd)
比如说你要指定一个长度为8,而且至少有三个大写字母的密码,那么可以这样输入:
mkpasswd -l 8 - C 3,好了,密码就会按你的要求随机产生了
 
yum -y install expect
 
为远程服务器IP列表
[root@manage .ssh]# cat
192.168.9.201
192.168.9.202

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。