linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理
如果在没有使用密钥认证的情况下,想通过SSH来传输文件给多个主机会面临交互的问题,这在脚本中是非常不友好的。要解决这个问题的话可以使用expect这个工具,它的功能就是提前把交互中需要的内容先写好,然后在脚本执行的时候自动输入。通常用这个工具解决秘钥分发的问题,之后有了秘钥就不需要再使用它了。
1、使用yum安装expect
yum -y expect
2、编写一个使用expect解决ssh交互问题的案例
vi expect.sh
#!/bin/expect
spawn ssh root@192.168.1.100 #让expect处理该会话,也就是说执行该命令后遇到的交互内容将由expect继续
#下面是提前输入了可能会遇到的交互的内容以及应答方式
expect {
"yes/no" { send "yes\r"; exp_continue } #遇到引号内的关键词就发送yes指令,代表回车,后面的exp_continue表示没有遇到的话继续往下执行
"password" { send "centos\r" };
}
interact #让会话保留在对方那边。因为是ssh连接,所以要保持连接就要将会话停住而不能退出
如果不需要保持交互的话可以写成这样的格式:
#!/bin/expect
spawn ssh root@192.168.1.100
expect {
"yes/no" { send "yes\r"; exp_continue }
"password" { send "centos\r" };
}
expect "#" #这里的#其实就是登陆ssh后出现的那个提示符
send "useradd user1\r"
send "echo 123456 | password --stdin user1\r"
expect eof #结束expect
3、还可以在expect中使用变量,格式如下
#!/bin/expect
set ip 192.168.1.100
set user root
spawn ssh $user@$ip #让expect处理该会话,引用了变量
expect {
"yes/no" { send "yes\r"; exp_continue }
"password" { send "centos\r" };
}
4、还可以使用位置变量进行传参,括号内是固定格式,不用做变动,0代表第一个参数,以此类推,
#!/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
spawn ssh $user@$ip #让expect处理该会话,引用了变量
expect {
"yes/no" { send "yes\r"; exp_continue }
"password" { send "centos\r" };
}
5、最后使用expect执行脚本
expect expect.sh
示例:使用expect批量推送公钥
可以看到该脚本在for循环中用到了{}&这样的组合,这是使用多进程的方式在执行循环,然后使用wait等所有线程都执行完毕后进行最后的finish。使用多进程执行脚本时需要注意的是要结合命名管道(使用mkfifo命令创建命名管道)来控制进程的数量,否则执行大批量操作时会出错
#!/usr/bin/bash
>ip.txt
password=yourpassword
rpm -q expect &>/dev/null
if [ $? -ne 0 ];then
yum -y install expect
fi
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -P "" -f ~/.ssh/id_rsa
fi
for i in {1..254}
do
{
ip=192.168.122.$i
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
/usr/bin/expect <
set timeout 10
spawn ssh-copy-id $ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" }
}
expect eof
EOF
fi
}&
done
wait
echo "finish...."
linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理相关推荐
- linux 命令spawn,linux expect, spawn用法小记
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ######## ...
- shell中spawn什么意思_shell 编程-Expect
原标题:shell 编程-Expect No.1 expect的安装 [root@qfedu ~] yum -y install expect No.2 expect的语法-------通过expec ...
- shell脚本编程之控制脚本
技术交流QQ群:1027579432,欢迎你的加入! 1.引言 目前为止,运行脚本的唯一方式是以实时模式在命令行界面上直接运行.但是,这并不是Linux上运行脚本的唯一方式. 2.处理信号量 Linu ...
- shell不允许输入空字符_shell脚本编程之控制脚本
点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 欢迎关注我,一起学习,一起进步! 1.引言 目前为止,运行脚本的唯一方式是以实时模式在命 ...
- shell脚本编程学习笔记1(xdl)——shell基础与Bash基本功能()
shell脚本编程学习笔记1--shell基础与Bash基本功能 1,简介: 1,Shell就是一个命令行解释器,用以连接输入设别和内核. 2,Shell是解 释执行的脚本语言,在Shell中可以直接 ...
- Shell脚本编程之(一)Shell脚本简介
什么是Shell脚本 shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭 ...
- python shell脚本编程100例_《shell脚本编程100例》[1.05MB]PDF完整版下载-码农之家
用spring boot框架做的项目,将第三方包全部打在jar里面,通过shell脚本启动和停止服务,常用的shell脚本模板如下: #!/bin/bashJAVA_OPTIONS_INITIAL=- ...
- Shell脚本编程之(七)Shell脚本的追踪与debug
scripts 在执行之前,最怕的就是出现语法错误的问题了!那么我们如何 debug 呢?有没有办法不需要透过直接执行该 scripts 就可以来判断是否有问题呢?呵呵!当然是有的!我们就直接以 ba ...
- Linux01-bash脚本编程之六使用脚本选项及组合条件测试23
练习1,写脚本: 传递3个指定的用户参数,运行脚本自动创建用户:例如:bash admin.sh user1,tom,jack 参考答案:# vim admin.sh #!/bin/bash # ec ...
最新文章
- .NET基础示例系列之十七:VML绘制中国地图
- 语义分割的时候,发的牢骚
- 吸尘器电机拆解图解_老少皆宜居家清理更轻松?吉米A6上手把无线吸尘器体验...
- 消息队列概述[幻灯片]
- vues响应接口and实例
- [LeetCode-JAVA] Remove Linked List Elements
- oracle 从别的数据库获取数据 ,访问其他数据库
- 排序千万级数据_从千万级房产成交量排名,窥探中国城市的真实家底
- 详解GaussDB(DWS) explain分布式执行计划
- javascript高级编程(javascript高级编程第四版 pdf)
- fedora14 官方下载地址
- 根据ip地址获取时区
- EMNLP 2020 BiST: Bi-directional Spatio-Temporal Reasoning for Video-Grounded Dialogues
- TomExam开源在线考试系统
- Zemax曲率半径的控制方法
- Mac下安装DBeaver
- FCPX插件:视频去闪烁插件DEFlicker安装教程
- Vue3初识 学习记录(一)
- OAuth 2.0 基础(2)
- 浏览器中实现3D全景浏览
热门文章
- 大数据可视化平台优点在哪
- 大数据信息安全需要准备哪些工具
- 如何从服务器上取pdf文件,如何从服务器响应创建pdf文件?
- web平台安装程序_来了来了!开源车间调度平台正式上线!
- 2021年SWPUACM暑假集训day2并查集算法
- C++中sort排序之自定义排序cmp(入门)
- matlab上机操作作业指导书,LED自动固晶基本操作1
- 计算机中DW用户名和域名,如何获取线程关联用户名和域名
- 极简主义︱利用apple机器学习平台Turicreate实现图像相似性检索(二)
- Azure China (5) 管理Azure China Powershell