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

分发系统介绍、 expect脚本远程登录、远程执行命令、传递参数

一、分发系统介绍

当我们要上线一个新代码的时候,如果机器少,我们的工作量不会很大,很容易完成,如果设备很多,有几十台,上百台的话,那我们的工作量会非常大,而且也不规范,这时,我们就可以用可以用开源的软件,expect脚本语言,进行实现分发系统的功能。

二、 expect脚本远程登录

1、expect脚本远程登录
2、安装:yum install -y expect
3、写一个expect的自动远程登录脚本
内容如下:

 #! /usr/bin/expect
set host "192.168.1.31" #这是expect的变量,它和shell不同的是变量前面要加set
set passwd "123456"
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue} #第一次登录会提示yes或者是no,send是发送。\r是回车。
"assword:" { send "$passwd\r" }
}
interact   # 需要停留在远程的机器上,不需要退出。

4、给脚本权限:chmod a+x 1.expect
5、执行:./1.expect

三、 expect脚本远程执行命令

1、自动远程登录后,执行命令并退出
增加脚本如下内容:

#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh $user@192.168.1.31

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、执行脚本
./2.expect
3、 回车退出
4、重新执行自动登录脚本
5、./1.expect
6、查看远程创建的文件
7、ls -l /tmp/2018.txt

四、expect脚本传递参数

1、传递参数
vi 3.expect
增加如下脚本内容:

#!/usr/bin/expect

set user [lindex $argv 0] #把第一个参数的值赋给user
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、给权限;
chmod a+x 3.expect
3、执行
./3.expect root 192.168.1.31 "ls;w;vmstat 1" #当有多个命令 需要用双引号 作为一个参数传进去
4、查看
ls;w;vmstat 1

转载于:https://blog.51cto.com/10690709/2147512

相关文章:

  • 欧几里得扩展算法扩展欧几里得
  • Spring Boot 2.0 整合 ES 5 文章内容搜索实战
  • HyperLedger Fabric ca正式环境部署
  • mysql-ubuntu14.04彻底卸载mysql
  • 检测对象或数组
  • Python--作业2--对员工信息文件,实现增删改查操作
  • BAT面试常的问题和最佳答案
  • MFS分布式文件系统服务搭建
  • redis系列:通过文章点赞排名案例学习sortedset命令
  • 自抗凝透析器研究取得系列进展
  • (转)visual stdio 书签功能介绍
  • 如何高效学习和工作(撸代码)
  • python代码-leetcode1 两数相加
  • WPF 简洁的主界面
  • PowerDesigner使用小总结
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • HTML5新特性总结
  • markdown编辑器简评
  • Redash本地开发环境搭建
  • Redux系列x:源码分析
  • Terraform入门 - 3. 变更基础设施
  • Wamp集成环境 添加PHP的新版本
  • 力扣(LeetCode)22
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 正则与JS中的正则
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​Linux·i2c驱动架构​
  • # Maven错误Error executing Maven
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (JS基础)String 类型
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (论文阅读30/100)Convolutional Pose Machines
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (强烈推荐)移动端音视频从零到上手(上)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (算法)Travel Information Center
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Neo4j下载安装以及初次使用
  • (一)基于IDEA的JAVA基础10
  • (转)程序员疫苗:代码注入
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET开源快速、强大、免费的电子表格组件
  • .NET实现之(自动更新)
  • .NET值类型变量“活”在哪?
  • [ NOI 2001 ] 食物链
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [100天算法】-实现 strStr()(day 52)
  • [Angular 基础] - 数据绑定(databinding)
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据