周末抽空,写了个三千多字的教学文档,自我感觉技巧相比去年又有提升
这里摘选实验部分,方便以后查看~
yum安装pssh
yum -y install pssh
pssh --version
配置密钥对(略)...创建实验用户,配置免密
username="test1 test2"
for i in $username;do useradd $i;mkdir /home/$i/.ssh;cp ~/.ssh/id_rsa.pub /home/$i/.ssh/authorized_keys;chown -R $i:$i /home/$i;echo $i is create;done
配置首次ssh登录免提示
sed -i 's/^.*StrictHostKeyChecking.*$/StrictHostKeyChecking no/g' /etc/ssh/ssh_config
配置文件准备(模拟CMDB)
cat >/home/cmdb.csv<<EOF
配置编号,当前用户,负责人,所在项目
89757,test1,李雷,高数
89758,test2,韩梅梅,大物
EOF
2.2.1.2创建临时处理目录,生成一堆配置
mkdir -p /home/userinfo
cat /home/cmdb.csv|awk -F, '{print "######\n编号-"$1"\n当前用户:"$2"\n负责人:"$3"\n项目:"$4"\n######" > "/home/userinfo/"$2}'
cat > /home/userinfo/root <<EOF
你现在是root!超牛逼!慎用!
EOF
2.2.1.3用python启动临时http服务,80端口
cd /home/userinfo
nohup python -m SimpleHTTPServer 80 >& http80.log &
2.2.1.4制作动态用户登录提示脚本
mkdir $HOME/bin
cat >$HOME/bin/loginfo.sh<<EOF
#!/bin/bash
echo "本机ip:"
ip a|grep eth0|grep inet|awk '{print substr(\$2,0,length(\$2)-3)}'
curl -sL http://127.0.0.1/\`whoami\`
EOF
——这里选了eth0网卡上的IP写入提示,实际根据你的网卡情况调整
2.2.1.5在当前用户下做登录配置
echo "sh \$HOME/bin/loginfo.sh" >> ~/.bash_profile
配完之后,进进出出感受一下,登录提示
2.3初体验pssh批量管理
2.3.1.1准备一个目标受控机器清单
格式为 用户名@IP,一行写一条,需要在目标IP服务器的指定用户下,已存在能跟本机私钥配对的公钥,可参考本文2.1.1.1~2.1.1.2章节内容
echo -e "test1@127.0.0.1
test2@127.0.0.1" >hostlist
2.3.1.2批量操作受控机,查看时间地点用户名
pssh -vh hostlist -i "date;pwd;whoami"
2.3.1.3把动态用户登录提示脚本放置到下载目录下
cp ~/bin/loginfo.sh /home/userinfo/
2.3.1.4通过pssh把脚本发放到两个测试用户下
pssh -h hostlist -i "mkdir \$HOME/bin;wget -q -O \$HOME/bin/loginfo.sh http://localhost/loginfo.sh;echo 'sh \$HOME/bin/loginfo.sh' >> ~/.bash_profile"
此时,可以使用su - test1 ,或者ssh test2@localhost,进进出出感受一下动态的提示
2.4深入体验批量管理远端配置
现在,你最好准备另外一台和当前机器网络互通的实验机,如果没有,也可以继续在一台机器上分裂多用户。
2.4.1.1准备远端受控实验机
假设我现在有两台虚拟机,一个是前面实验使用的机器作为master,新增一个受控实验机node1
机器名hostname IP地址 角色
master 192.168.1.111 控制机
node1 192.168.1.112 受控机
登录node1,记录hosts文件,创建测试用户test3:
echo -e "192.168.1.111 master
192.168.1.112 node1" >> /etc/hosts
useradd test3
随后,切换到测试用户下,写入公钥内容(控制机master上~/.ssh/id_rsa.pub),并修改文件权限
su - test3
mkdir .ssh && vi .ssh/authorized_keys
#写入公钥后保存文件,修改权限
chmod 700 .ssh;chmod 600 .ssh/authorized_keys
都准备好之后,即可退出受控机node1,回到一开始使用的控制机master继续执行
2.4.1.2回到控制机master,同样配置hosts
echo -e "192.168.1.111 master
192.168.1.112 node1" >> /etc/hosts
2.4.1.3更新hostlist,试试新用户通吗
echo "test3@node1" >>hostlist
pssh -H node1 -i "date;pwd;whoami"
2.4.1.4优化一下登录提示脚本
#把请求地址从本机改为指向master
sed -i 's/127.0.0.1/master/g' /home/userinfo/loginfo.sh ~/bin/loginfo.sh
#如果实验机都有公网出口IP,则可以进一步做以下修改
cp ~/bin/loginfo.sh ~/bin/loginfo_localIP.sh
sed -i '3s/^.*$/curl ipinfo.io\/ip -w "\n"/g' /home/userinfo/loginfo.sh ~/bin/loginfo.sh
2.4.1.5更新用户配置文件
cat >>/home/cmdb.csv<<EOF
89759,test3,小强,模电
EOF
tail -1 /home/cmdb.csv|awk -F, '{print "######\n编号-"$1"\n当前用户:"$2"\n负责人:"$3"\n项目:"$4"\n######" > "/home/userinfo/"$2}'
2.4.1.6用pscp批量更新脚本
awk -F@ '{ cmd="pscp.pssh -H " $2 " -l " $1 " -r /root/bin /home/"$1;print cmd;system(cmd)} ' /home/hostlist
2.4.1.7检查有无登录动作,没有则添加
pssh -h hostlist -i "grep -q loginfo ~/.bash_profile || echo 'sh \$HOME/bin/loginfo.sh' >> ~/.bash_profile"
分别登录test1,test2,test3,进进出出感受一下
2.4.1.8关闭http服务,销毁用户和配置
#停http服务
ps -ef|grep "python -m SimpleHTTPServer 80"|grep -v grep |awk '{print $2}'|xargs kill-9 >& /dev/null
#删除测试用户
username="test1 test2"
for i in $username;do userdel -f $i;rm -rf /home/$i;done
#删除配置
cd /home && rm -rf cmdb.csv hostlist userinfo
网友评论