脚本如下:
批量建立用户的脚本cuser.sh:
Shell代码
- 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
Shell代码
- 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
Shell代码
- 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文件示例:
Java代码
- 192.168.46.28
- 192.168.46.29
- 192.168.46.33
使用说明书:
Java代码
- 脚本主要完成的功能:
- 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认证。
转自:http://qindongliang.iteye.com/blog/2117973