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