多台服务器ssh实现脚本自动登录
天地一沙鸥
面对运维工作的时候,需要对上线的服务器进行安全配置。几百台Linux服务器服务器,一台台的登录,那都是非常耗时间的。尤其对于一些需要执行相同命令的操作,使得工作不但变得重复,而且变得无聊。
一直想写一个脚本,实现密码输入的交互,把密码和IP都存放到一个文件,让脚本从文件读取,然后自动登录。实现这个功能需要安装expect。如果没有的话可以使用yum安装非常简单。
Yum install expect
这简单命令就可以安装好了。
现在开始写脚本:
1.设计好密码本:ip.txt 内容如下
192.168.80.63 toor
192.168.80.64 123.com
2.前面是IP,后面是root的密码。
3.脚本如下:
#!/bin/bash
cat /root/ip.txt|while read line
do
ip=`echo $line|awk '{print $1}'` //备注:最外面的不是单引号,而是数字1旁边的键
pw=`echo $line|awk '{print $2}'`
command1="ssh -l root $ip"
expect -c "
spawn $command1;
expect {
\"password:\" {send\"$pw\r\"; exp_continue}
\"connecting(yes/no)?\" {send \"yes\r\"; exp_continue}
\"root@\" {send\"df -h\r exit\r\"; exp_continue}
}
"
Done
这个脚本实现的功能就是远程到指定的服务器,执行df –h 命令退出。
Expect的基本写法就是spawn后跟需要自动匹配输入的命令,然后expect后跟匹配的文本,send发送需要手动输入的文本。
具体expect命令的用法还是百度下。
如果选择ssh登录的话,可以实现不需要密码登录,就是利用的方法。下面的这个脚本是参考修改的:但是这个脚本还是需要一个个的输入IP 密码还不够简单,所以自己结合上面的脚本写了下面的这个脚本:
#!/bin/sh
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
#上面是自动生成公钥和私钥。不需要三次回车
cat /root/ip.txt|while read line
do
ip=`echo $line|awk '{print $1}'` //把密码赋给ip
pw=`echo $line|awk '{print $2}'` //把密码赋给变量pw
command1="ssh-copy-id -i /root/.ssh/id_rsa.pubroot@$ip" //这里使用-i指定文件,和使用的绝对路径,就是怕其他错误的麻烦。这个命令复制公钥比使用scp简单。
expect -c "
spawn $command1;
expect {
\"password:\" {send\"$pw\r\"; exp_continue}
\"connecting(yes/no)?\" {send \"yes\r\"; exp_continue}
}
"
ssh root@$ip 'sed -i"s/^#RSAAuthentication\ yes/RSAAuthentication\ yes/g"/etc/ssh/sshd_config'
ssh root@$ip 'sed -i"s/^#PubkeyAuthentication\ yes/PubkeyAuthentication yes/g"/etc/ssh/sshd_config'
ssh root@$ip 'sed -i"s/^#PermitRootLogin\ yes/PermitRootLogin\ yes/g"/etc/ssh/sshd_config'
done
后面的三条命令式修改配置文件的。Ssh root@ip能登录已经说明上面配置无密码登录的设置已经成功。可以去目标主机上认证下就可。
Expect命令还是非常方便的,可以实现多个命令一起执行。以后自己还是多学习下。
本文出自 “天地一沙鸥” 博客,请务必保留此出处http://liusancai.blog.51cto.com/2269911/1385358