当前位置: 首页 > news >正文

Shell实战训练营Day11

expect 分发系统

实现远程自动登录

#!/usr/bin/expect
set host "192.168.200.128" #定义变量
set passwd "123456"
spawn ssh root@$host
expect{
"yes/no" {send"yes\r";exp_continue} #\r表示回车
"password:" {send "$passwd\r"}
}
interact #登录后停留在远程主机界面

远程登录后执行指定命令并退出
#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh $user@192.168.200.128
expect {
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect "]" #匹配root用户或者普通用的提示符
send "touch /tmp/exp.txt" #执行的命令
expect "]
"
send "echo test > /tmp/exp.txt\r" #执行的命令
expect "]*"
send "exit\r" #退出远程主机

expect脚本参数传递

#!/usr/bin/expect
set user [lindex $argv 0] #代表第1个参数 用户
set host [lindex $argv 1] #代表第2个参数 主机地址
set passwd "123456"
set cm [lindex $argv 2] #代表第3个参数 执行的命令
spawn ssh $user@$host
expect{
"yes/no" {send "yes\r"}
"password:" {send $"passwd\r"}
}
expect "]"
send "$cm\r"
expect "]
"
send "exit\r"
执行格式 bash shellname root 192.168.100.100 "ls-l;w"

expect 脚本自动同步文件
#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@192.168.100.100:/tmp/test.txt /tmp/ #从远程主机192.168.100.100 同步文件至本机/tmp/
expect{
"yes/no" {send "yes\r"}
"password:" {send "$passwd\r"}
}
expect eof # 不立即退出带同步结束后退出

指定host与需要同步的文件
#!/usr/bin/expect
set passwd "123456"
set host [lindex $avgr 0]
set file [lindex $avgr 1]
spawn rsync -avR $file root@$host:$file
expect {
"yes/no" {send "yes\r"}
"password" {send"$passwd\r" }
}
expect eof

构建文件分发系统
核心命令 rsync -avR --files-from=filelist / /root@host:/ #文件列表分发
#!/usr/bin/expect
set passwd "123456"
set host [lindex $avgr 0]
set file [lindex $avgr 1]
spawn rsync -avR --files-from=$file / root@host:/
expect{
"yes/no" {send "yes\r"}
"password" {send "$passwd\r"}
}
expect eof

文件系统分发结合的文件与脚本
自定义 iplist
192.168.200.130
192.168.200.131
192.168.200.132
自定义 filelist
/tmp/123
/awk/132
/shell/123
定义同步脚本 rsync.sh
#!/bin/bash
for ip in cat /usr/local/sbin/ip.list
do
echo $ip
./exp6.exp $ip /usr/local/sbin/file.list #exp6.exp 为shell
done

远程批量执行命令 注:下面的列子中批量执行需要各个主机密码相同
#!/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"

#!/bin/bash
for ip in cat /usr/local/sbin/ip.list
do
echo $ip
./exp7.exp $ip "w;free -m;ls"
done

转载于:https://blog.51cto.com/12948291/2337040

相关文章:

  • java并发处理 (同步与原子性)
  • Java入门项目:学生信息管理系统V2
  • IE6不支持a标签以外元素的hover的解决方案
  • 40个Java多线程问题详解复习
  • 【Linux】目录权限与文件权限
  • YUV数据格式与YUV_420_888
  • vue-cli3.0项目中使用vw——相比flexible更原生的移动端解决方案
  • rsync 数据镜像备份 记录
  • Lucene:基于Java的全文检索引擎简介
  • Android 其他特效展示
  • DataUml Design 教程7 - 数据库生成模型
  • request
  • luanet分布式lua框架
  • 解决 LLVM 错误 fatal error: ‘csignal’ file not found
  • 使用idea 搭建一个 SpringBoot + Mybatis + logback 的maven 项目
  • JS 中的深拷贝与浅拷贝
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【Amaple教程】5. 插件
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Angular 2 DI - IoC DI - 1
  • Babel配置的不完全指南
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Laravel 菜鸟晋级之路
  • python_bomb----数据类型总结
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前言-如何学习区块链
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 问题之ssh中Host key verification failed的解决
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 异步
  • 阿里云ACE认证之理解CDN技术
  • 大数据全解:定义、价值及挑战
  • 函数计算新功能-----支持C#函数
  • ​学习一下,什么是预包装食品?​
  • #{}和${}的区别是什么 -- java面试
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (十) 初识 Docker file
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)fock函数详解
  • (转)Sublime Text3配置Lua运行环境
  • (转载)Linux 多线程条件变量同步
  • (转载)Linux网络编程入门
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net 托管代码与非托管代码
  • .Net 中Partitioner static与dynamic的性能对比
  • .NetCore部署微服务(二)
  • .NET构架之我见
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解