Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2228440
  • 博文数量: 287
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2130
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-31 14:30
个人简介

自己慢慢积累。

文章分类

全部博文(287)

分类: LINUX

2015-12-25 16:46:02

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://liusancai.blog.51cto.com/2269911/1385358

多台服务器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

阅读(1240) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~