`
qindongliang1922
  • 浏览: 2149361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116380
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124644
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58550
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70425
社区版块
存档分类
最新评论

shell自动化部署批量建立用户和批量SSH配置

阅读更多
在linux下面,shell脚本熟练使用,有时候可以帮助我们解决很多需要人工做的事情,有些公司比如阿里,或者京东,集群规模非常大,动辄成百上千台服务器,大量的机器如果需要人工去做某些事情,是非常低效,繁琐,容易出错的,所以每个公司都有自己的一套自动化运维的一套程序,今天,散仙在这里分享的只是利用shell+expect实现的一个自动化的部署,主要有2个功能,批量建立用户和批量配置SSH无密码双向登陆的脚本,在文末散仙,会打包上传这几个脚本,欢迎使用和测试,主要包含的东西:3个脚本外加一个hosts文件和一个使用说明书。

脚本如下:
批量建立用户的脚本cuser.sh:


if [  !  $# -eq 2  ] ; then
echo "请输入用户名和密码以空格分开!"
exit

else
name="$1"
passwd="$2"
fi


cat hosts | while read hosts
do



echo "正在$hosts上用户$name"
expect <<EOF
spawn   ssh $hosts "useradd $name; echo $name:$passwd | chpasswd" 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "dongliang\r" ;exp_continue  }
}


EOF

echo  "成功建立"


done


root用户初始化脚本,initroot.sh
if [  ! $# -eq 2  ] ;then
echo "请输入用户密码以空格分开"
exit
else
#用户名
uname="$1"
#密码
passwd="$2"
fi


#执行检测并安装expect模块
ep=`rpm -qa | grep expect` 

if [ -z $ep   ] ; then
 echo "检测到你的系统,没有安装expect模块,准备执行安装"
 sleep 2
 yum install -y expect

else
 echo "已经安装expect模块,3秒后,开始执行ssh文件同步"
 sleep 3
fi



#公钥无ssh认证模块
cat hosts | while read host
do



echo "当前正在向$host上传输ssh文件"
expect <<EOF
spawn  scp -r .ssh/  $host:/$uname 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$passwd\r" ;exp_continue  }
}


EOF





echo "当前正在$host上进行公钥认证....."
sleep 2
expect <<EOF
spawn  ssh-copy-id  -i .ssh/id_rsa.pub $host 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$passwd\r" ;exp_continue  }
}


EOF

echo "认证成功...."

done




#切换root权限进行hosts文件分发



echo "同步本机的hosts文件到各个机器上"

sleep 1

#同步本机的hosts文件到其他各个机器上

cat hosts | while read host
do

scp -r /etc/hosts $host:/etc/


done


echo "同步hosts文件完毕"



普通用户的安装脚本,noroot.sh

if [ ! $# -eq 2  ] ; then

echo "请输入用户名密码以空格分开"
exit
else

#用户的名字
uname="$1"
#用户的统一密码
pd="$2"
fi


#公钥无ssh认证模块
cat hosts | while read host
do



echo "当前正在向$host上传输ssh文件"
expect <<EOF
spawn  scp -r .ssh/  $host:/home/$uname 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$pd\r" ;exp_continue  }
}


EOF





echo "当前正在$host上进行公钥认证....."
sleep 2
expect <<EOF
spawn  ssh-copy-id  -i .ssh/id_rsa.pub $host 
expect {
"*yes/no" {send "yes\r" ;exp_continue}
"*password:" {send "$pd\r" ;exp_continue  }
}


EOF

echo "认证成功...."

done




hosts文件示例:
192.168.46.28
192.168.46.29
192.168.46.33


使用说明书:
脚本主要完成的功能:
1,自动化批量建立用户
2,自动化批量双向配置SSH认证
3,测试通过Centos6.5,其他系统大同小异,如报错,可改部分代码



使用步骤:

1,配置集群的host文件,把所有机器的IP都写在hosts文件里,注意默认这几个文件解压在root根目录即可。

2,先在第一台root用户上执行 ssh-keygen -t rsa -P ''一路回车生成ssh文件

3,然后执行initroot.sh脚本,并传入root账号的用户名,密码,此脚本会首先检测系统是否安装过expect,如果没有
安装,则yum下载,如果安装过,则直接进行ssh文件拷贝,并执行公钥认证

4,执行cuser.sh脚本,并传入要建立用户的账号密码,就可以批量的在多个机器上建立用户了

5,然后拷贝root跟目下下的hosts文件和noroot.sh文件到上面建的用
户根目录下,并把权限改成用户权限
6,然后切入刚才建立的账户,同样执行第2个步骤生成ssh文件

7,最后执行noroot.sh文件,给刚才建的批量用户之间建立ssh双向无密码认证

8,至此完成,批量用户创建和SSH认证。


3
0
分享到:
评论
2 楼 hliqiang 2015-10-23  
楼主在吗
1 楼 leibnitz 2014-11-01  
当初我也是利用expect 进行non-interactive配置,现在已经有一套类似方案

相关推荐

    Java 调用 Linux shell 命令执行框架:sshxcute

    资源包含sshxcute-1.0.jar及中文使用指南; sshxcute框架简介: 软件开发与测试人员常常会在远程 Linux/UNIX 系统上执行...sshxcute 不管是针对软件开发、测试还是系统部署,都简化了自动化流程与系统环境部署的步骤。

    shell结合expect写的批量scp脚本工具

    expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。 ...

    Fabsshell(Front and back system shell)

    通过这种方式,可以将执行命令和连接服务器分开,从而带来一些好处:即使在SSH端口被限制或者用户密码被修改的情况下,只要服务端未宕机,前端仍然可以继续远程连接Linux服务器。这是因为前端和后台之间使用http协议...

    快捷运维,,项目基于shell、python,运维脚本工具库+源代码+文档说明

    - 可以和自动化工具结合,批量部署业务,如果有3-5台服务器,直接SSH远程编译安装, - 如果几十台服务器,上百台服务器,上千台服务器都要安装某个应用呢? - 可以用快捷运维脚本结合自动化工具(比如:ansible),...

    Python的自动化部署模块Fabric的安装及使用指南

    它提供一套基本操作在本地和远程执行shell命令,或者上传下载文件,辅助提供用户输入或终止执行. 下面安装fabric模块有2种方法: 1.使用easy_install(下面是debain5环境) root@10.1.6.200:pshell# apt-get install ...

    opscloud:运维管理平台(阿里云),自动同步阿里云配置信息,堡垒机(容器),批量运维,Kubernetes,Zabbix管理等功能

    核心功能(自动化配置) 多云主机管理精英,EC2,CVM,ESXi / VM 阿里云日志服务 堡垒机 跳转服务器 Web终端 支持多窗口批量操作(看日志利器) 支持低权限/高权限登录(工单中申请权限) 配置管理Ansible,配置文件...

    python三大神器之fabric使用教程

    fabric 是一个python包 是一个基于ssh的部署工具包 通常用来对网站 微服务等等的批量部署 例如 我有5台...它提供了丰富的同 SSH 交互的接口,可以用来在本地或远程机器上自动化、流水化地执行 Shell 命令。 安装Fabric

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA上百实例源码以及开源项目源代码

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java开源包1

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包11

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包2

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包3

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包5

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包10

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包4

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包8

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

Global site tag (gtag.js) - Google Analytics