请准备三台linux机器为别为A,B,C,要求实现以下内容
1、用自己的名字用户完成一把钥匙开多把锁(A,钥匙,B,C锁)的免密码登录部署场景
该题在生产环境中的用途为;批量分发数据,批量发布程序代码,批量控制管理等。

大型批量管理软件pupet/saltstack
2、在1题的前提下同样用自己的名字用户完成多把钥匙开一把锁(B,C钥匙,A锁)的免密码登录
B--A
C--A
一题中我们在A创建了锁和钥匙,所以B和C要控制A就先把钥匙发给B和C,因为A本地的锁还不正常,就像A给B和C发公钥一样给自己再发一份,锁的名字为authorrized_keys.这样B和C就能无密码登录A.
在A上把钥匙发给B和C
$scp -p .ssh/id_dsa bichen@192.168.0.102:~/.ssh
3、如何实现从A指定目录批量分发文件到B,C,用户的家目录(借助1题部署结果)考察scp用法
$sh fenfa.sh
4、实现A指定的目录文件分发到B,C任意目录下(不用root用户你会么)
在客户端执行命令
#visduo 输入98gg跳转到98行
root ALL=(ALL) ALL
bichen ALL=(ALL) NOPASSWD:/usr/bin/rsync
加入bichen用户
echo “bichen ALL=(ALL) NOPASSWD:/usr/bin/rsync

检查语法
[root@lamp01 ~]# visudo -c
/etc/sudoers: parsed OK
这样子的话bichen这个用户在这个机器上就有root权限可以执行rsync这个命令,前提得用sudo提权。
或者也不用去客户端,因为通过ssh可以连上客户机,所以直接执行命令也可以。

在分发机上编辑下面面脚本,$0表示此脚本名称,$1表示要发送的文件,$2表示要发送到远端的路径,先将它拷贝到远端用户的家目录,在使用sudo提权rsync将其拷贝到对应的路径下。Scp命令后面加&&\表示此命令执行成功后在执行下一条命令。102.虚拟机未开机所以显示失败。

5、如何快速查看所有机器的负载load,cpu,内存信息(借助问题1)的部署结果。
(思考如果服务器数量多,如何并发查看和分发数据)
[bichen@nfsserver ~]$ vim view_upload.sh
#!/bin/sh

if [ $# -ne 1 ]
then
echo "USAGE:$0 COMMAND"
exit 1
fi
for n in 102 104
do
echo ==========192.168.0.$n====
ssh -p22 bichen@192.168.0.$n $1
Done
查内存,查负载
[bichen@nfsserver ~]$ sh view_upload.sh uptime
==========192.168.0.102====
Nasty PTR record "192.168.0.102" is set up for 192.168.0.102, ignoring
10:18:50 up 5 min, 1 user, load average: 0.00, 0.07, 0.04
==========192.168.0.104====
10:18:50 up 1:27, 1 user, load average: 0.00, 0.00, 0.00
[bichen@nfsserver ~]$ sh view_upload.sh "free -m"
==========192.168.0.102====
Nasty PTR record "192.168.0.102" is set up for 192.168.0.102, ignoring
total used free shared buffers cached
Mem: 980 331 649 1 39 110
-/+ buffers/cache: 181 799
Swap: 1983 0 1983
==========192.168.0.104====
total used free shared buffers cached
Mem: 980 320 659 1 50 103
-/+ buffers/cache: 166 814
Swap: 1983 0 1983
6、附加题:实现每分钟定时分发hosts文件到所有机器上,并把分发失败,没有分发成功的机器信息以邮件的形式发给运维人员。

第一种方案:客户端使用mail,服务端使用posfix
启动posfix服务
[root@nfsserver ~]# /etc/init.d/postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
[root@nfsserver ~]# lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 3601 root 12u IPv4 17870 0t0 TCP localhost:smtp (LISTEN)
master 3601 root 13u IPv6 17872 0t0 TCP localhost:smtp (LISTEN)
客户端mail命令,发邮件格式
mail -s “标题” 邮件地址 <文件
mail -s “bichen”695410305@qq.com </etc/hosts
echo “正文”|mail -s “bichen” 695410305@qq.com
发送邮件,结果没收到免费的邮件会经常收不到会耽搁事,所以要用收费的,或者自己的。
[root@nfsserver ~]# mail -s "bichen" 695410305@qq.com </etc/hosts
[root@nfsserver ~]# mailq
Mail queue is empty
我们分发hosts的脚本,将分发结果追加重定向到/tmp/true.log、/tmp/fail.log,如果fail.log
的内容不为空,说明有失败的,就将fail.log发送到邮箱,最后清空日志。
#!/bin/sh
. /etc/init.d/functions
if [ $# -ne 2 ]
then
echo "USAGE:$0 FileName RemoteDir"
exit 1
fi

for n in 102 104

do
scp -rp $1 bichen@192.168.0.$n:~ &>/dev/null&&\
ssh -t bichen@192.168.0.$n sudo rsync $1 $2 &>/dev/null
if [ $? -eq 0 ]
then
echo "fenfa $1 to $2 192.168.0.$n is ok" >>/tmp/true.log
else
echo "fenfa $1 to $2 192.168.0.$n is false" >>/tmp/fail.log
fi
done
if [ -s "/tmp/fail.log" ]
then
mail -s "$(date +%F\ %T)fenfa host" 18689197973@163.com</tmp/fail.log

/tmp/true.log
/tmp/fail.log
fi
然后做定时任务,所有的脚本都放在/server/scripts
#Crontab -u bichen -e 表示在bichen用户下做定时任务
#fenfa hosts by yankefei at 20170807

  • /bin/sh /server/scripts/fenfa_hosts.sh &>/dev/null
    配置mail使用外部smtp发邮件
    通过修改配置文件可以使用外部smtp服务器,可以到达不使用sendmail等内部邮件服务而用外部的smtp服务器发送邮件目的
    修改/etc/mail.rc最后一行加入
    Set from=
    Smtp=
    Username smtp-auth-password=
    Smtp-auth=login
    7、实现每天晚上00点定时把B,C上的数据备份到A上,并把备份结果信息以邮件的形式发给运维人员。提示备份的目录要包含ip或主机名
    使用scp写成脚本做成定时任务

    8、用expect无交互式的批量分发密钥到B,C即在第一步建立免密码认证之前分发密钥就实现非交互批量发布。(如果一千太机器在第一做无密码认证时,得输入1000次yes和1000次password)。
    (1)安装expect
    [root@nfsserver ~]# yum install expect
    [root@nfsserver ~]# which expect
    /usr/bin/expect
    (2创建expect脚本 定义file变量,是我们的公钥。Host为主机ip。两个参数
    ,发送yes发送密码)
    [bichen@nfsserver ~]$ vim fenfa_sshkey.exp
    #!/usr/bin/expect
    if { $argc !=2 } {
    send_user "usage: expect fenfa_sshkey.exp file host\n"
    exit
    }

#define var
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "yankefei"
#spawn scp /etc/hosts root@192.168.0.102:/etc/hosts
#spawn scp -P222 $file bichen@$host:$dir
#spawn ssh-copy-id -i $file "-p 222 bichen@$host"
spawn ssh-copy-id -i $file "-p 22 bichen@$host"
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
#expect fenfa_sshkey.exp ~/.ssh id_dsa.pub 192.168.0.104
上面脚本fenfa_sshkey.exp实现了一台的免人工交互,所以还要在写个脚本调用此脚本实现多台非人工交互。
#vi fenfa_key
#!/bin/sh
. /etc/init.d/functions

for ip in 102 103 104

do
#expect fenfa_sshkey.exp ~/.ssh/id_dsa.pub $ip >/dev/null 2>&1
expect fenfa_sshkey.exp ~/.ssh/id_dsa.pub 192.168.0$ip
if [ $? -eq 0 ];then
antion "$ip" /bin/true
antion "$ip" /bin/false
fi
done

转载于:https://blog.51cto.com/10980975/2069988

linux批量分发必会面试题,通过邮件反馈结果。相关推荐

  1. Django 必会面试题总结

    文章转自 https://blog.csdn.net/weixin_43063753/article/details/85559540 目录 欢迎关注 1 列举Http请求中常见的请求方式 2 谈谈你 ...

  2. 美团前端二面必会面试题(附答案)

    判断数组的方式有哪些 通过Object.prototype.toString.call()做判断 Object.prototype.toString.call(obj).slice(8,-1) === ...

  3. 滴滴前端一面必会面试题汇总

    实现 LazyMan 题目描述: 实现一个LazyMan,可以按照以下方式调用: LazyMan("Hank")输出: Hi! This is Hank!LazyMan(" ...

  4. 前端二面必会面试题(附答案)

    typeof NaN 的结果是什么? NaN 指"不是一个数字"(not a number),NaN 是一个"警戒值"(sentinel value,有特殊用途 ...

  5. 2022初级前端必会面试题持续更新

    01-html&css H5的新特性有哪些,C3的新特性有哪些 H5 新增语义化标签,header,nav,aside,article,section,footer 新增input表单元素类型 ...

  6. 校招前端必会面试题及答案

    代码输出结果 async function async1() {console.log("async1 start");await async2();console.log(&qu ...

  7. java第一阶段面面试题_java基础阶段几个必会面试题

    1.说出你对面向对象的理解 在我理解,面向对象是向现实世界模型的自然延伸,这是一种"万物皆对象"的编程思想.在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例 ...

  8. 前端必会面试题,往死里背吧

    说一说cookie sessionStorage localStorage 区别? 得分点 : 数据存储位置.生命周期.存储大小.写入方式.数据共享.发送请求时是否携带.应用场景 标准回答 Cooki ...

  9. 美团前端必会面试题(附答案)

    常见的CSS布局单位 常用的布局单位包括像素(px),百分比(%),em,rem,vw/vh. (1)像素(px)是页面布局的基础,一个像素表示终端(电脑.手机.平板等)屏幕所能显示的最小的区域,像素 ...

最新文章

  1. 死锁产生的原因和解锁的方法
  2. mysql5.7.23权限问题_部署MySQL5.7时的权限问题
  3. Rpgmakermv(31)MOG插件与YEP的结合
  4. 【新产品发布】《EVC8021 RS-232RS-485/422 隔离接口转换器》
  5. .难忘的大学时光·~~~~~
  6. Jupyter 工具的安装与使用方法,jupyter运行python代码演示,好用的python编辑器推荐!
  7. 任意电脑登录MySQL_使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用...
  8. Mysql集群拆分_MySQL 5.7跨集群拆分迁移
  9. [转载] Java中的关键字含义以及介绍
  10. 国内maven镜像,快的飞起
  11. Pytorch——循环神经网络层、损失函数、优化器
  12. 靠播放业务吃不饱?音乐流媒体纷纷“加电商”卖周边
  13. PMP培训班内部资料,免费分享
  14. C#获取注册表指定键值操作
  15. js 获取字符长度(英文1,中文2)
  16. python是哪一类型编程语言_什么是编程语言呢?编程语言有哪些种类呢?
  17. 微积分-数列极限概念的理解
  18. win10登录选项没有PIN,设置了PIN仍然在系统的登录选项中显示[添加],PIN无法使用
  19. 17网里多个商品里全部图片复制并分类保存的技巧
  20. google,百度,yahoo搜索比较

热门文章

  1. ui设计师常用的设计工具_2020年应该使用哪个UI设计工具?
  2. 平面设计师和ui设计师_平面设计师为什么要享受所有乐趣?
  3. 你不知道的 Node.js 工具函数
  4. 【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法...
  5. Bootstrap开发框架视频整理
  6. activemq 安全连接
  7. 循环、格式化输出、数据统计
  8. 数字效率Evernote超效率数字笔记术
  9. Android 中文api (81)——InputMethod [输入法]
  10. 6月,回忆我失去的爱情