后端技术总结

  • 首页
  • github
  • About Me
  1. 首页
  2. 脚本
  3. 正文

Expect脚本之一键登录

2021年4月21日 1689点热度 1人点赞 0条评论
内容纲要

背景

工作中常常会通过ssh登录各个服务器,我们可以直接把这些ssh信息用alias进行重命名,但是始终还是有个问题,就是密码还是得输,如果工作服务器是经过跳板机来跳转的,还得蛋疼的再ssh一下,那我们有没有啥办法能解决这个呢?有!用expect

Expect

From Wikipedia:Expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。

示例

文件以.sh结尾

#!/usr/bin/expectset timeout 5
# 跳板机spawn ssh [your name]@[server_ip]
expect "*password*"
send "[pwd]\r"
expect "xxxi@jumpserver*"
send "ssh dp@172.1.1.1\r"
expect "*password*"
send "[pwd]\r"
interact

安装

首先查看当前的类Unix环境中是否已经支持expect,可以使用ls -l /usr/bin/expect或ls -l /bin/expect中是否存在,如果不支持的话下面提供两个环境的安装方法

  • MacOS brew install expect
  • Linux sudo yum install expect或sudo apt install expect

    说明

    下面是对我们来说常用的命令,用了这几个也就能应付80%的使用场景了,相当简单

    set

    类似于定义常量,给变量赋值,如上面的set timeout 5,设置超时时间为5秒

    spawn

    执行shell命令,expect特有

    expect

    等待当前回话出现的条件if,可以直接匹配正则,比如我希望等出现某个字符串后再执行某些命令,就是使用expect,e.g.expect "*password*"匹配提示中的关键词password

    send

    向终端会话中输入指定数据,我们常用的是密码等,如send "123123\r",记得其中的\r,相当于我们输入完密码按的那个回车键,必不可少的

    interact

    脚本的结束标志语

    小结

    使用expect+alias能方便我们快速的登录各个终端服务器,哪怕跳板机再跳跳板机也能采用这几个命令简单实现。

标签: shell
最后更新:2021年8月15日

PingD

反思让我成长

点赞
< 上一篇

文章评论

取消回复

PingD

反思让我成长

归档
  • 2023年1月
  • 2022年3月
  • 2022年1月
  • 2021年10月
  • 2021年8月
  • 2021年4月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2019年9月
  • 2019年7月
  • 2019年6月
  • 2019年4月
  • 2019年3月
最新 热点 随机
最新 热点 随机
断更了,不想写了 新路由2(newifi d1) 小白刷老毛子固件 2021年度总结 golang之从源码角度看slice的len和cap 基于chan实现的简易协程池及说明 订单超时方案(初稿)
sh、bash和zsh区别 Go查看项目引用的包版本及当前最新的版本 记踩Etcd的一个坑 golang之从源码角度看slice的len和cap 新路由2(newifi d1) 小白刷老毛子固件 golang 判断interface是否为空nil
最近评论

COPYRIGHT © 2021 dpjeep.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

蜀ICP备18036663号-1