Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7180693
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: LINUX

2016-03-08 15:53:14

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

[日期:2016-03-07] 来源:Linux社区  作者:qindongliang [字体:  ]

在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 < 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 < 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 < 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 < 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 < 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,测试通过6.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认证。

下面关于SSH相关的文章您也可能喜欢,不妨参考下:

 下配置 SSH服务全过程及问题解决 

Ubuntu 14.04 下安装Samba 及SSH 服务端的方法 

SSH服务远程访问Linux服务器登陆慢 

提高Ubuntu的SSH登陆认证速度的办法 

开启SSH服务让手机远程访问 Ubuntu 14.04  

如何为Linux系统中的SSH添加双重认证 

在 Linux 中为非 SSH 用户配置 SFTP 环境 

Linux 上SSH 服务的配置和管理 

本文永久更新链接地址

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