需求:自动登录服务器并执行操作指令
使用到的命令:expect

expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。
使用 yum - y install expect 安装

send 命令接收一个字符串参数,并将该参数发送到进程。
expect 命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。
spawn 命令用来启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互。
interact 命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

代码示例:自动登录主机并执行操作

login.sh:执行时使用 expect login.sh

#!/bin/expect#设置变量
set user "root"
set host "192.168.149.100"
set loginpass "123456"
set cmd_prompt "]#|~]?"spawn ssh $user@$host
#设置超时时间,单位是秒
set timeout 30
# -re 匹配正则表达式
expect {-re "Are you sure you want to continue connecting (yes/no)?" {send "yes\r"} -re "password:" {send "${loginpass}\r"} -re "Permission denied, please try again." {exit}}expect { -re $cmd_prompt {send "df -h\r"send "cat /etc/hosts\r"send "ip addr \r"send "echo '111111' >> /data/a.log \r"send "exit \r"}}interact
批量进行登录操作

ssh.exp

#!/bin/expectset host [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
set timeout 5spawn ssh $user@$host
expect {"(yes/no)?" { send "yes \r" ;exp_continue }"*password*" { send "$passwd\r" ;exp_continue}"#" { send "echo '11111' >> /data/a.log \r"}
}
expect eof#interact

host.list

192.168.149.100 root 123456
192.168.149.101 root 123456
192.168.149.102 root 123456
192.168.149.103 root 123456

login.sh

#!/bin/bashhost='host.list'
while read line
do
echo $line
expect ssh.exp $line
done < $host

shell脚本远程ssh服务器并执行操作相关推荐

  1. MAC OS X 10.8 操作远程SSH服务器 + 无密码输入使用SSH服务器

    怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建. http://www.osssme.org/ 使用命令行连接连接远程SSH服务器,root为我使用的远程服务器用户名,@后为 ...

  2. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...

  3. Shell脚本实现每个工作日定时执行指定程序

    我们可能会遇到这样的情景:必须在每个工作日定时执行Linux服务器上的某个程序.那么有没有办法实现这一功能呢?答案是肯定的.我们可以运用Shell脚本简单实现这一功能. 原理很简单,Shell脚本内部 ...

  4. 2021-01-21 linux shell脚本实现间隔一定时间执行一次任务

    shell脚本实现间隔一定时间执行一次任务 1.编写shell脚本 while [ true ]; do sleep 20 bash test.sh >> /tmp/date.txt do ...

  5. Shell脚本中字符串的一些常用操作

    Shell脚本中字符串的一些常用操作 字符串长度 ${#string}可以获得${string}的长度 例子: string='How are you' echo ${#string} # 输出结果为 ...

  6. linux脚本定时执行,Shell脚本实现每个工作日定时执行指定程序

    我们可能会遇到这样的情景:必须在每个工作日定时执行 原理很简单,Shell脚本内部每隔1秒查询一次当前时间.日期以及星期数,当检测到当前星期数week非0或6(0代表星期天,6代表星期六)且时间cur ...

  7. 【Linux】Shell脚本中的多任务并发执行

    Shell脚本中的多任务并发执行 需求 实现一个脚本能够使用ping检测网络的连通性 可以同时检测多个IP地址, 并且将检测结果输出 分析 正常情况下,Shell脚本中的命令是串行执行的,当一条命令执 ...

  8. Linux运维:Shell脚本实现ssh免密登录远程服务器

    LInux系统日常运维过程中,经常需要在本地运行脚本执行对远程主机的命令,正常情况下,ssh登录远程服务器时会提示输入密码,这会影响到脚本的自动执行(因为shell脚本中没有自动填充密码的命令).有三 ...

  9. 如何在远程 SSH 服务器上运行本地 Shell 脚本

    通过 SSH 运行命令的问题在于,通常您必须自己键入它们或上传脚本文件.但是,通过一些 bash 知识,您可以通过 SSH 传递整个脚本,而无需.sh 在远程计算机上保存该文件. 解决方案:通过标准输 ...

最新文章

  1. 北京AI产业联盟来了!百度牵头,小米美团滴滴旷视纷纷入会
  2. DropdownList绑定的两种方法
  3. C/C++ 语言的常用开发工具下载
  4. php5ts.dll 注册码,修复php5ts.dll
  5. python中为什么训练数据_python训练数据时打乱训练数据与标签
  6. Mycat 之 通过Keepalived 实现高可用
  7. Unity3DGUI:Window
  8. linux下装sqlserver安装包,【sqlServer】CentOS7.x 上Microsoft SQL Server for Linux安装和配置...
  9. 第二次团队冲刺--9
  10. vc 环境下mysql_windows-VC++6.0环境下C++链接MySQL数据库
  11. access设置 dolby_win10系统设置和安装新款杜比音效的方法
  12. 〖Python零基础入门篇(62)〗- Python 中的魔法函数
  13. qemu指定CPU型号
  14. mysql中重复数据的查询
  15. CartoonGAN github
  16. JAVA入门万字总结
  17. 硕士学位答辩PPT制作技巧
  18. 【python】通过信号机制对子进程进行控制
  19. linux下开机自动启动,定时运行shell脚本
  20. 新网站收录情况的seo分析

热门文章

  1. [OpenWrt] 使 p910nd 支持 HP LaserJet 1020 Plus 打印机
  2. 一拍是多少秒 计算机制音乐,如何计算每分钟的节拍(BPM)的一首歌
  3. MongoDB 练习
  4. M-Arch(番外4)GD32L233评测-系统资源主要频率获取和打印
  5. ARM Generic Timer
  6. Springboot MSSQL连接异常处理
  7. 设计分享|单片机抢答器(汇编)
  8. 在 3ds Max 和 After Effects 中创建逼真的蜘蛛网模型
  9. 单位阶跃信号matlab,【单位|单位阶跃信号的表示-matlabWord版】
  10. php 数组交集函数,php数组交集函数