远程批量修改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]thenechousageshell.shpath/iplistpath/adduserexitficat1|whilereadlinedo[-zline]continue2line;doneecho-e\nwelldone\n下面是最重要的部分adduser/usr/bin/expect登录的用户名setloginuser密码setloginpass要修改的用户名setpassuserdfdjfk要修改成的新密码setnewpassyournewpassword要添加的新的用户名setnewusernamenewusername要添加的新用户的密码setnewpasswdnewpasswdsetipaddr[lrangeargv00]settimeout300set_prompt]|]---------------------------------------------------通过ssh登录spawnsshloginuseripaddrsettimeout300expect{-reAreyousureyouwanttocontinueconnectingyes/no{sendyes\r}-reassword{sendloginpass\r}-rePermissiondenied,pleasetryagain.{exit}-reConnectionrefused{exit}timeout{exit}eof{exit}}expect{-reassword{sendloginpass\r}-re_prompt{send\r}}-------------------------------------------修改密码sendpasswdpassuser\r;expect{NewUNIXpassword{sendnewpass\r}passwdOnlyrootcanspecifyausername.{exit}}expect{RetypenewUNIXpassword{sendnewpass\r}}------------------------------------------------------添加一个新用户并改密码expect-re_promptsleep1senduseraddnewusername\rsleep1sendpasswdnewusername\r;expect{NewUNIXpassword{sendnewpasswd\r}passwdOnlyrootcanspecifyausername.{exit}}expect{RetypenewUNIXpassword{sendnewpasswd\r}}---------------------------------------------退出expect-re_promptexitok调试完也将近花费了一个下午第二种方法通过shell脚本实现批量更改密码/bin/bashBYkerryhuMAILking_BLOGhttp//PleasemanualoperationyumofbeforeOperation.....一、建立信任关系192.168.9.203为管理机192.168.9.201192.168.9.202为远程linux服务器1、在管理机生成证书、[rootmanage]ssh-keygen-trsa(然后一路回车)Generatingpublic/privatersakeypair.Enterfileinwhichtosavethekey/root/.ssh/id_rsaEnterpassphraseemptyfornopassphraseEntersamepassphraseagainYouridentificationhasbeensavedin/root/.ssh/id_rsa.(私钥)Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.(公钥)Thekeyfingerprintis36ecfcdbb07f817ed01d365e29dd5ba02、将管理机上的公钥传送到各远程服务器如远程服务器更改了默认的ssh端口号,就使用scp-P17173,17173为端口号[rootmanage.ssh]scpid_rsa.pub192.168.9.201/root/.ssh/authorized_keys[rootmanage.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上PreferencesMorePreferencesSessions