远程批量修改linux服务器密码的脚本.doc
批量修改远程linux服务器密码第一种方法通过expect批量修改linux服务器用户名和密码公司现在有100多台服务器,需要对服务器进行批量的修改root密码,还要在每台服务器新建一个用户,如果一个一个登到的服务器上进行修改的话,估计一个下午又没有了,首先想到的是我最喜欢的php,其中有个ssh2模块,不得不承认用php来处理这样的任务是一件很纠结的事情,然后又想到了用shell,不过发现很快就写不下去了,shell的交互能力还是不能让人恭维的,最后发现了expect,expect以其强大的交互能力,无疑是处理这类任务的首选,再加上expect可以内嵌shell,这使得他变得更强大。首先要有一个服务器的ip列表,把要处理的ip放在里面192.168.6.236192.168.6.235192.168.6.234192.168.6.233192.168.6.232192.168.6.231.然后是shell脚本shell.sh#!/bin/bashif[“$1“=““]||[“$2“=““]||[“$1“=“--help“][“$1“=“-h“]thenecho“usage:shell.shpath/iplistpath/adduser“exitficat$1|whilereadlinedo[-z$line]doneecho-e“\nwelldone\n“下面是最重要的部分adduser#!/usr/bin/expect#登录的用户名setloginuser““#密码setloginpass““#要修改的用户名setpassuser“dfdjfk“#要修改成的新密码setnewpass“yournewpassword“#要添加的新的用户名setnewusername“newusername“#要添加的新用户的密码setnewpasswd“newpasswd“setipaddr[lrange$argv00]settimeout300set_prompt“]#|~]?“#---------------------------------------------------通过ssh登录spawnssh$loginuser@$ipaddrsettimeout300expect{-re“Areyousureyouwanttocontinueconnecting(yes/no)?“{send“yes\r“}-re“assword:“{send“$loginpass\r“}-re“Permissiondenied,pleasetryagain.“{exit}-re“Connectionrefused“{exit}timeout{exit}eof{exit}}expect{-re“assword:“{send“$loginpass\r“}-re$_prompt{send“\r“}}#-------------------------------------------修改密码send“passwd$passuser\r“;expect{“NewUNIXpassword:“{send“$newpass\r“}“passwd:Onlyrootcanspecifyausername.“{exit}}expect{“RetypenewUNIXpassword:“{send“$newpass\r“}}#------------------------------------------------------添加一个新用户并改密码expect-re$_promptsleep1send“useradd$newusername\r“sleep1send“passwd$newusername\r“;expect{“NewUNIXpassword:“{send“$newpasswd\r“}“passwd:Onlyrootcanspecifyausername.“{exit}}expect{“RetypenewUNIXpassword:“{send“$newpasswd\r“}}#---------------------------------------------退出expect-re$_promptexitok调试完也将近花费了一个下午第二种方法通过shell脚本实现批量更改密码#!/bin/bash#BYkerryhu#MAIL:king_819@#BLOG:#PleasemanualoperationyumofbeforeOperation.一、建立信任关系192.168.9.203为管理机192.168.9.201192.168.9.202为远程linux服务器1、在管理机生成证书、[root@manage~]#ssh-keygen-trsa(然后一路回车)Generatingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):Enterpassphrase(emptyfornopassphrase):Entersamepassphraseagain:Youridentificationhasbeensavedin/root/.ssh/id_rsa.(私钥)Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.(公钥)Thekeyfingerprintis:36:ec:fc:db:b0:7f:81:7e:d0:1d:36:5e:29:dd:5b:a02、将管理机上的公钥传送到各远程服务器如远程服务器更改了默认的ssh端口号,就使用scp-P17173,17173为端口号[root@manage.ssh]#scpid_rsa.pub192.168.9.201:/root/.ssh/authorized_keys[root@manage.ssh]#scpid_rsa.pub192.168.9.202:/root/.ssh/authorized_keys管理机与远程主机信任关系建立完毕注意:可能会出现并未建立信任关系的情况。还需操作一下步骤在GNOME下设置ssh-agent如果你在GNOME运行环境下,执行以下几步配置ssh-agent.ssh-agent工具用户保存你的DSA密钥passphrase以便每次ssh或者scp到MachineB的时候.当你登陆GNOME,openssh-askpass-gnome提示输入passphrase并保存,直到你退出GNOME.在该GNOMEsession中,当ssh或者scp连接到MachineB时,系统将不再要求你输入passphrase.在GNOMEsession中保存passphrase操作步骤:1.选择MainMenuButton(在Panel上)=>Preferences=>MorePreferences=>Sessions