新手容易上手的cms做企业网站金华专业网站建设公司
news/
2025/9/23 7:00:57/
文章来源:
新手容易上手的cms做企业网站,金华专业网站建设公司,网络推广培训班培训机构,2022热点新闻事件Expect 用法expect的安装实战——非交互式ssh连接案例1#xff1a;普通操作案例2#xff1a;设置变量与进行传参的方式案例3#xff1a;进行批量推送公钥实现免密连接#xff0c;ping通一个ip地址连接一个ip 实现批量修改密码#xff0c;批量推送ssh的公钥#xff0c;进行… Expect 用法expect的安装实战——非交互式ssh连接案例1普通操作案例2设置变量与进行传参的方式案例3进行批量推送公钥实现免密连接ping通一个ip地址连接一个ip 实现批量修改密码批量推送ssh的公钥进行远程ssh连接任何批量操作的基本都能处理。 通过expect可以实现将交互式的命令变为非交互式执行不需要人为干预手动输入 是一个免费的编程工具用来实现自动的交互式任务而无需人为干预 在实际工作中我们运行命令、脚本或程序时都需要从终端输入某些继续运行的指令而这些输入都需要人为的手工进行而利用 expect 则可以根据程序的提示模拟标准输入提供给程序从而实现自动化交互执行这就是 expect 如果能够在工作中熟练的使用Shell脚本就可以很大程度的提高工作效率那么再搭配上expect这个时候很多工作都可以实现自动化进行。
说白了 expect 就是一套用来实现自动交互功能的软件
用法
1)定义expect脚本执行的shell#!/usr/bin/expect --类似于#!/bin/bash 2)set timeout 30设置超时时间30s 3)spawn执行expect之后后执行的内部命令开启一个会话用来执行shell的交互命令 4)expect相当于捕捉判断输出结果是否包含某项字符串(相当于捕捉返回的结果)没有则会断开否则等待一段时间后返回等待通过timeout设置 5)send执行交互动作将交互要执行的命令进行发送给交互指令命令字符串结尾要加上“\r”相当于回车 6)interact执行完后保持交互状态需要等待手动退出交互状态如果不加这一项交互完成会自动退出 7)exp_continue继续执行接下来的操作
expect的安装
[rootlocalhost ~] yum -y install expect实战——非交互式ssh连接
案例1普通操作
[rootlocalhost ~]# vim ex.sh
#!/usr/bin/expect
spawn ssh root192.168.17.137
expect {yes/no { send yes\r; exp_continue }password: { send 1\r };
}
interact
[rootlocalhost ~]# expect ex.sh
spawn ssh root192.168.17.137
root192.168.17.137s password:
Last login: Mon Jul 17 10:25:24 2023 from 192.168.17.128
[rootlocalhost ~]# ip a|grep inetinet 127.0.0.1/8 scope host loinet6 ::1/128 scope hostinet 192.168.17.137/24 brd 192.168.17.255 scope global noprefixroute ens33inet6 fe80::2022:2258:5fcc:dd1f/64 scope link noprefixroute
//如果添加interact参数将会等待我们手动交互进行退出。如果不加interact参数在登录成功之后会立刻退出。案例2设置变量与进行传参的方式
注意expect环境中设置变量要用set它识别不了bash方式定义的变量
[rootlocalhost ~]# vim expect01.sh
#!/usr/bin/expect
set user root
set pass 1
set ip [ lindex $argv 0 ]
//expect固定写法从0开始第一个位置参数相当于shell中的$1
set timeout 10
spawn ssh $user$ip
expect {yes/no { send yes\r; exp_continue }password: { send $pass\r };
}
interact
[rootlocalhost ~]# expect ex01.sh 192.168.17.137
spawn ssh root192.168.17.137
root192.168.17.137s password:
Last login: Mon Jul 17 10:37:55 2023 from 192.168.17.128
[rootlocalhost ~]# exit
登出
Connection to 192.168.17.137 closed.如果想登录成功后自动结束交互模式也就是expect可以采用下面方式
#!/usr/bin/expect
set user root
set pass 1
set ip [ lindex $argv 0 ]
//expect固定写法从0开始第一个位置参数相当于shell中的$1
set timeout 10
spawn ssh $user$ip
expect {yes/no { send yes\r; exp_continue }password: { send $pass\r };send exit\r
}
expect eof //直接退出expect模式
[rootlocalhost ~]# expect ex01.sh 192.168.17.137
spawn ssh root192.168.17.137
root192.168.17.137s password:
Last login: Mon Jul 17 10:46:07 2023 from 192.168.17.128
[rootlocalhost ~]# ip a|grep inetinet 127.0.0.1/8 scope host loinet6 ::1/128 scope hostinet 192.168.17.128/24 brd 192.168.17.255 scope global ens33案例3进行批量推送公钥实现免密连接ping通一个ip地址连接一个ip
[rootlocalhost script]# vim getip_push.sh
#!/usr/bin/bash
pass1
//判断expect命令是否安装
rpm -qa expect /dev/null
if [ $? -ne 0 ];thenyum install -y expect
fi
//判断主机下面是否生成秘钥如果没有生成秘钥
if [ ! -f ~/.ssh/id_rsa ];thenssh-keygen -P -f ~/.ssh/id_rsa
fi
//循环执行获取up状态的ip地址。
for i in {2..254}
do{ip192.168.17.$iping -c1 -w1 $ip /dev/nullif [ $? -eq 0 ];thenecho $ip up_ip.txtset timeout 10/usr/bin/expect -EOF //shell脚本中调用expect命令spawn ssh-copy-id $ipexpect {yes/no { send yes\r; exp_continue }password: { send $pass\r };}expect eof
EOFfi }
wait
done
echo finish...
[rootlocalhost script]# chmod x getip_push.sh
[rootlocalhost script]# expect getip_push.sh
//测试....
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911662.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!