登录公司的跳板机是挺麻烦的事,首先要ssh,然后输入密码,有的公司可能还要动态密码,前两步操作都是固定的,所以能免去前两步的操作就会方便很多(线上出问题也能尽快登上去,免得紧张密码一直输错,哈哈哈)。

脚本源码

 #!/usr/bin/expect set bridge_host "jumper.******.com"
set username "zhengbin"
set password "******"
set timeout spawn ssh "${username}@${bridge_host}"
expect {
"Password:" {
send "${password}\n"
expect {
"verification code:" {
send_user "\nEnter verification code:"
expect_user -re "(.*)\n"
set veri_code $expect_out(,string)
send "${veri_code}\n"
expect {
"${username}@Jumper" {
send "r \r"
}
}
}
}
}
}
interact

脚本解释

shell 脚本解释器

#!/usr/bin/expect

脚本中首先引入解释文件,表明使用哪种 shell 解释器

(shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口)

set

set timeout 

用来设置响应的时间,如果脚本执行或网络问题超过了这个时间,则将不再执行

set 主要用来设置变量,如:

set param_name1
set param_name2 "zhengbin"

spawn

开启会话,接下来通过 expect ... send 来执行交互操作

spawn 后跟上命令,表示开启一个操作会话

expect

期望输出的字符串

send

发送交互字符串,回车为 /n,注意空格

分支

类似于 java 中的 switch

 expect {
"case1" {
send "do something \n"
}
"case2" {
send "do something \n"
}
}

结束符

expect eof

等待结束执行,若没有该结束符,脚本可能没有执行完毕就提前退出了

interact

执行完成后,保持控制台的交互状态,可以继续手动输入信息

参考资料

[1] shell 解释器:https://blog.csdn.net/tzy5210/article/details/58603765

[2] Linux expect:https://blog.csdn.net/houmou/article/details/53102051

[3] Linux shell实现ssh自动登录:https://www.jianshu.com/p/b1e0f2242f89

Linux expect 使用(免密登录跳板机)的更多相关文章

  1. Linux 双向 SSH 免密登录

    原理 双向,顾名思义,双方互通,此处的意思是多台 linux 两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要实现集群中的每一台机器都保存其他所有 ...

  2. Linux 实现密钥免密登录

    Linux 实现密钥免密登录 环境:CentOS 7 一. 创建密钥 登录Linux,进入/root/.ssh/目录下 执行ssh-keygen -t rsa创建密钥一直回车即可,因为是免密所以直接回 ...

  3. 【Linux】ssh免密登录

    一.ssh免密配置 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例.有机器A(192.168.1.155),B(192.168. ...

  4. linux上ssh免密登录原理及实现

    因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...

  5. Linux入门——SSH免密登录

    SSH免密登录 1.简介 SSH是一种网络协议,用于计算机之间的加密登录. 本文针对的实现是OpenSSH,它是自由软件,应用非常广泛. 2.初始化公钥私钥 有rsa,dsa两种加密方式,生成的公钥私 ...

  6. Linux的SSH免密登录(一)

    1.从cp/scp命令出发 scp(secure copy)是linux系统下基于ssh登录进行安全的远程文件拷贝的命令. 1. 传递文件到远程 scp local_file remote_usern ...

  7. linux 远程ssh免密登录

    写在前面 先说说需求: 我们平时开发.运维操作linux过程中经常需要实现将远程文件拷贝到本地或者本地文件拷贝到远程:执行远程命令等操作:这个时候建立ssh免密登录应该是一个比较好的选择: 原理 在l ...

  8. Linux机器间ssh免密登录

    前言 一台Linux机器通过ssh的方式连接别的机器或通过scp的方式传输文件,都需要输入密码. 为了解决每次输入密码的困扰,可采用添加密钥的方式实现. 实现过程 源服务器A,目标服务器B. 1.在源 ...

  9. linux 配置ssh免密登录

    一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目 ...

随机推荐

  1. JSONObject基本内容(二)

    参考内容:http://swiftlet.net/archives/category/json  十分感谢!!! 这部分的内容主要是讲述 javaBean转换为JSONObect时,如果有些属性不需要 ...

  2. C语言上机练习二

    #include<stdio.h> int main() { int a,b; while(~scanf("%d%d",&a,&b)) printf(& ...

  3. BZOJ.3667.Rabin-Miller算法(MillerRabin PollardRho)

    题目链接 Pollard_Rho:http://blog.csdn.net/thy_asdf/article/details/51347390 #include<cstdio> #incl ...

  4. 洛谷.3690.[模板]Link Cut Tree(动态树)

    题目链接 LCT(良心总结) #include <cstdio> #include <cctype> #include <algorithm> #define gc ...

  5. 转载:Gitlab备份和恢复操作记录

    转载:Gitlab备份和恢复操作记录 包含了备份和数据恢复的操作记录,实验可行 前面已经介绍了Gitlab环境部署记录,这里简单说下Gitlab的备份和恢复操作记录: 1)Gitlab的备份目录路径设 ...

  6. 使用NSSM将exe封装为服务

    NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行.同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大.它的特点如下: 支持普通 ...

  7. .net core程序中使用微软的依赖注入框架

    我之前在博文中介绍过Asp.net core下系统自带的依赖注入框架,这个依赖框架在Microsoft.Extensions.DependencyInjection中实现,本身并不是.net core ...

  8. OKHttpUtil工具类

    导入jar包下载链接 http://square.github.io/okhttp/ package com.common.util; import java.io.IOException; impo ...

  9. c++中string类对象和字符数组之间的相互转换

    string类在c++中是一个模板类,位于名字空间std中,注意这里不是string.h,string.h是C字符串头文件. 将string类型转换为字符数组char arr[10];string s ...

  10. 理解 .NET 2015

    去年跟着BUILD之后,我发了一篇文章Exciting Times for .NET 并从那以后我已经很荣幸地能够与.NET团队并肩作战,这其中包括了运行时.框架.语言和编译器.虽然去年我的重心已经更 ...