利用expect,提升小小的幸福感

2023-10-20 10:10

本文主要是介绍利用expect,提升小小的幸福感,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方 前端瓶子君,关注公众号

回复算法,加入前端编程面试算法每日一题群

本文首发于:github.com/bigo-fronte… 欢迎关注、转载。

⚡️利用expect,提升小小的幸福感

笔者经常要使用公司跳板机,登陆到目标服务器,查看日志等操作。要重复的复制ssh命令、ip地址等。每天来回的重复,是否有工具能够让重复的事情机器做呢?

经过翻阅资料,找到了一个很好的解决方案,基于expect,实现ssh自动交互。

使用expect后,自动帮我们连接服务器,输入密码,交互输入令牌验证码,跳转目标ip,一键登录。

如果要批量登录机器,是不是一下子效率就提升上来了。????????????

什么是expect

expect是一个用来处理交互的命令。借助expect,我们可以将交互过程写在一个脚本上,使之自动化完成。譬如ssh登录,ftp登录等场景。

四个命令

expect中最关键的四个命令是send,expect,spawn,interact

  • send:用于向进程发送字符串

  • expect:从进程接收字符串

  • spawn:启动新的进程

  • interact:允许用户交互

send命令

send命令接收一个字符串参数,并将该参数发送到进程。

expect1.1> send "hello world\n"
hello world
复制代码
expect命令

expect命令和send命令正好相反,expect通常是用来等待一个进程的反馈。expect可以接收一个字符串参数,也可以接收正则表达式参数。和上文的send命令结合,现在我们可以看一个最简单的交互式的例子:

expect "hi\n"
send "hello there!\n"这两行代码的意思是:从标准输入中等到hi和换行键后,向标准输出输出hello there。
复制代码
spawn命令

上文的所有demo都是和标准输入输出进行交互,但是我们跟希望他可以和某一个进程进行交互。spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的。结合上文的send和expect命令我们可以看一下更复杂的程序段了。

#!/usr/bin/expect -f
set password 123
set timeout -1spawn ssh -p 26890 bigo@127.0.0.1
expect "*passphrase*"
send "$password\r"
interact
expect eof这段代码的作用是登录到跳板机,匹配到进程返回的passphrase关键字,然后自动输入密码。
复制代码
interact

到现在为止,我们已经可以结合spawn、expect、send自动化的完成很多任务了。但是,如何让人在适当的时候干预这个过程了。比如自动输入跳板机密码后,还需要用户手动输入令牌验证码,才能登录成功。interact就是等待用户输入,实现人机交互。

#!/usr/bin/expect -f
set password 123
set timeout -1spawn ssh -p 26890 bigo@127.0.0.1
expect "*passphrase*"
send "$password\r"
interact
expect eof
复制代码

实践

好了,简单了解expect的用法后,我们就可以上手了。ssh操作,自然离不开max终端神器:iterm2

1.新建jump.sh

vim /Users/iterm2/jump.sh#!/usr/bin/expect -f
set password 123
set timeout -1spawn ssh -p 26890 bigo@127.0.0.1
expect "*passphrase*"
send "$password\r"
interact
expect eof
复制代码

2.新增登录跳板机指令

路径:iterm2 => Preferences => Profiles

企业微信20210406-110454@2x.png

3.新建文件

#!/usr/bin/expect -f
set password 123
set remoteip 127.0.0.2
set timeout -1spawn ssh -p 26890 bigo@127.0.0.1
expect "*passphrase*"
send "$password\r"
expect "*20190802*"
send "go $remoteip\r"
expect "*passphrase*"
send "$password\r"
interact
expect eof
复制代码

4.新增登录目标服务器指令

同上

结语

一键三连的感觉真香,是不是提升了小小的幸福感!有其他方法也欢迎留言交流,或者补充windows的使用方法。

欢迎大家留言讨论,祝工作顺利、生活愉快!

最后

欢迎关注【前端瓶子君】✿✿ヽ(°▽°)ノ✿

回复「算法」,加入前端编程源码算法群,每日一道面试题(工作日),第二天瓶子君都会很认真的解答哟!

回复「交流」,吹吹水、聊聊技术、吐吐槽!

回复「阅读」,每日刷刷高质量好文!

如果这篇文章对你有帮助,「在看」是最大的支持

》》面试官也在看的算法资料《《

“在看和转发”就是最大的支持

这篇关于利用expect,提升小小的幸福感的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/246418

相关文章

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

提升PrestaShop外贸电商网站安全的几款行业必备工具

提升PrestaShop外贸电商网站安全的几款行业必备工具 PrestaShop发展历程 PrestaShop是一款优秀且强大的外贸开源电商软件,我们开始使用PrestaShop始于2009年,那时PrestaShop还是0.9版本:界面清新,性能强悍,扩展友好等特性,既没有Magento的笨重,也没有ZenCart的古老,更没有OpenCart的脆弱,因此PrestaShop如雨后春笋,迅速

Axure元件库Ant Design中后台原型模板:提升设计与开发效率的利器

企业对于中后台产品的设计与开发需求日益增长。为了提升用户体验和开发效率,设计者和开发者们不断寻求更加高效、统一的解决方案。Ant Design,作为阿里巴巴开源的一套企业级UI设计语言和React组件库,凭借其丰富的组件和统一的设计风格,已成为众多项目的首选。而在Axure中使用Ant Design元件库,更是为中后台产品的原型设计带来了极大的便利。 Ant Design简介 Ant D

【JavaScript】let与var的区别及变量、函数提升

有var与无var的区别   在函数内部,有var和没var声明的变量是不一样的。有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口。 let与var的区别   在上面代码中,我们使用var语句声明变量x。因此,变量x的范围是函数范围。if语句内的变量x就是if语句外创建的变量x。因此,在你修改if语句块内变量x的值的时候,也会修改函数中变量x的所有引用的

如何通过食堂采购小程序端降低成本,提升效率?

随着数字化管理工具的普及,越来越多的食堂正在引入小程序来优化采购流程,减少成本和提升效率。食堂采购小程序端通过技术手段实现了自动化、智能化的管理方式,为管理者提供了极大的便利。本文将探讨如何利用技术手段开发一个高效的食堂采购小程序端,并提供一些代码示例,帮助你理解其背后的实现原理。 1. 简化采购流程 在食堂采购小程序中,简化采购流程是核心目标之一。我们可以利用数据库和后端服务来实现快速下单

自我提升社团成立啦,欢迎各位同学加入~

欢迎加入 大家好,我是马丁,我们的自我提升社团成立啦,欢迎有新的朋友加入!! 我们的社团主要目标是帮助每个人实现自我成长、自我提升,不论他是什么年龄、什么经验、什么专业,只要有一个好学和想进步的心,都可以加入。 为了提升帮助每个人实现自我成长,目前社团选择的是做一个智能客服系统,我们希望通过搭建一个企业级的智能客服系统来帮助每个人实现自我成长。后续,还会开发更多系统~ 目前群里大多是Jav

全能AI神器!工作效率提升80倍!Zmo.ai带你玩转AI做图!

今天,我要给大家介绍一款神器:Zmo.ai。 这个平台简直是做图神器,集多种功能于一身,让你像专业人士一样轻松创建和编辑图像,不需要任何美术与设计基础,真的非常适合我们这些“手残党”! 我们只需单击按钮即可从文本或图像生成令人惊叹的 AI 艺术、图像、动漫和逼真的照片,最关键的是它的功能真的很全啊! Zmo.ai旗下产品分类: AI照片生成器 AI动漫生成器 AI照片编辑器 A

Xinstall助力App全渠道统计,参数传递下载提升用户体验!

在移动互联网时代,App已成为我们日常生活中不可或缺的一部分。然而,对于App开发者来说,如何有效地推广和运营自己的应用,却是一个不小的挑战。尤其是在面对众多渠道、复杂的数据统计和用户需求多样化的情况下,如何精准地触达目标用户,提升用户的下载、安装和活跃度,更是考验着每一个运营者的智慧。 今天,我们就来揭秘一个能够帮助App开发者解决这些痛点的神器——Xinstall。作为一家一站式App全渠道

【C++】优化函数对象:提升性能和内存效率

函数对象 =》c语言里面的函数指针对象构造优化对象使用过程中背后调用的方法函数调用过程中对象背后调用方法:优化原则move,forward 函数对象 =》c语言里面的函数指针 通过函数对象调用operator(),可以省略函数的调用开销,比通过函数指针调用函数(不能够inline内联调用)效率高因为函数对象是用类生成的,所有还可以添加相关的成员变量,用来记录函数对象使用时的更