阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

238次阅读
没有评论

共计 3011 个字符,预计需要花费 8 分钟才能阅读完成。

在 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 认证。

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

Ubuntu 下配置 SSH 服务全过程及问题解决 http://www.linuxidc.com/Linux/2011-09/42775.htm

Ubuntu 14.04 下安装 Samba 及 SSH 服务端的方法 http://www.linuxidc.com/Linux/2015-01/111971.htm

SSH 服务远程访问 Linux 服务器登陆慢 http://www.linuxidc.com/Linux/2011-08/39742.htm

提高 Ubuntu 的 SSH 登陆认证速度的办法 http://www.linuxidc.com/Linux/2014-09/106810.htm

开启 SSH 服务让 Android 手机远程访问 Ubuntu 14.04  http://www.linuxidc.com/Linux/2014-09/106809.htm

如何为 Linux 系统中的 SSH 添加双重认证 http://www.linuxidc.com/Linux/2014-08/105998.htm

在 Linux 中为非 SSH 用户配置 SFTP 环境 http://www.linuxidc.com/Linux/2014-08/105865.htm

Linux 上 SSH 服务的配置和管理 http://www.linuxidc.com/Linux/2014-06/103627.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-03/128979.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3011字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中