分发系统

简介:

第一部分:expect讲解
expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。 但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。
使用expect之前,需要先安装expect:
yum install -y expect

  1. 自动远程登录,并执行命令
    首先来看一个登录后不退出的脚本:

    #! /usr/bin/expect
    set host "192.168.11.102"
    set passwd "123456"
    spawn ssh  root@$host
    expect {
    "yes/no" { send "yes\r"; exp_continue}
    "assword:" { send "$passwd\r" }
    }
    interact




 再来看一个登陆后,执行命令然后退出的脚本:

  1. #!/usr/bin/expect
    set user "root"
    set passwd "123456"

    spawn ssh $user@192.168.11.18

    expect {
    "yes/no" { send "yes\r"; exp_continue}
    "password:" { send "$passwd\r" }
    }
    expect "]*"
    send "touch /tmp/12.txt\r"
    expect "]*"
    send "echo 1212 > /tmp/12.txt\r"
    expect "]*"
    send "exit\r"

2. 我们还可以传递参数

#!/usr/bin/expect
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "123456"
set cm [lindex $argv 2]

spawn ssh $user@$host

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"


执行: ./2.expect root 192.168.11.18 w

3. 自动同步文件

#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.11.18:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

4. 指定host和要同步的文件

#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

执行: ./4.expect 192.168.11.18 /tmp/12.txt


第二部分:构建文件分发系统

  1. 需求背景
    对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。

    2. 实现思路
    首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。
    3. 核心命令
    rsync -av --files-from=list.txt  /  root@host:/
    4. 文件分发系统的实现
    cat  rsync.expect


#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av --files-from=$file / root@$host:/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

cat rsync.sh

#!/bin/bash
for ip in `cat ip.list`
do
    echo $ip
    ./rsync.expect $ip list.txt
done

5. 命令批量执行脚本

cat exe.expect

#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "123456"
set cm [lindex $argv 1]

spawn ssh root@$host

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"



cat exe.sh


#!/bin/bash
for ip in `cat ip.list`
do
    echo $ip
    ./exe.expect $ip "w;free -m;ls /tmp"
done




本文转自 15816815732 51CTO博客,原文链接:http://blog.51cto.com/68686789/1790388



相关文章
|
PHP 数据库 数据安全/隐私保护
|
存储 缓存 算法
内容分发网络 | 学习笔记
快速学习内容分发网络,介绍了内容分发网络系统机制, 以及在实际应用过程中如何使用。
144 0
内容分发网络 | 学习笔记
|
消息中间件 Kafka
多网络情况下,Kafka客户端如何选择合适的网络发起请求
我们都知道, 每个Broker都可以配置多个监听器, 用来用于网络分流。 相关知识请看:一文搞懂Kafka中的listeners和advertised.listeners以及其他通信配置
多网络情况下,Kafka客户端如何选择合适的网络发起请求
|
负载均衡 API 调度
语聊源码,任务分发系统需要具备的功能
语聊源码,任务分发系统需要具备的功能
|
Dubbo NoSQL Java
从单机定时到多层分发
在工作中基本上都会使用定时任务,常用的有 Spring 定时框架、Quartz、elastic-job、xxl-job 等。这里说不上框架的好坏,只有适合自己的才是最好的,本文仅从个人角度上谈一谈对定时任务的看法。
321 0
|
应用服务中间件 nginx
请求分发负载
下面的nginx配置文件nginx.conf配置的不是轮询策略做tomcat集群负载,而是定向请求,也算做了个简单的请求分发负载。比如app单独请求一个服务器(tomcat),web单独请求一个服务器(tomcat),管理后台单独请求一个服务器(tomcat),后期轮询配置也会进行整理。
|
负载均衡 机器人 网络安全
关于内容分发网络 CDN 的可靠性和冗余性
关于内容分发网络 CDN 的可靠性和冗余性
199 0
关于内容分发网络 CDN 的可靠性和冗余性
|
对象存储
[内容协作平台] 快速搭建一个数据分发系统
本篇讲介绍如何基于CCP搭建一个数据分发系统。 1. 创建域实例 域(domain):是一个独立的资源空间,比如一个分发系统或一个网盘系统。 (1) 登录CCP官网控制台,创建一个域实例。 点击"创建域"按钮, 数据存储方式,选择 OSSPath: 2. 创建OSS Bucket 打开OSS控制台: https://oss.console.aliyun.com (1) 新建bucket OSS Bucket 区域可以选择任意区域,不一定要和CCP的区域一致。
3116 0
大文件分发下载技术浅谈
p2p分发下载技术可以实现高速下载,按需下载,边下边玩等功能: 1、节省服务器带宽,降低成本 2、支持边下边玩 3、断点续传...
401 0
|
Kubernetes 安全 Docker
p2p-如何拯救k8s镜像分发的阿喀琉斯之踵
K8s的出现为PaaS行业的发展打了一针兴奋剂,Docker+k8s的技术路线已经成为了容器云的主流。尤其针对大流量,大弹性的应用场景来说,k8s将其从繁杂的运维、部署工作中彻底拯救出来。然而事情往往没有那么简单而美好,当我们使用k8s去管理一些大规模集群的时候,我们会发现有很多问题等待我们解决。
1690 0

热门文章

最新文章