问题:

一般情况下,公司所有的服务器都在内网,公网访问、管理服务器都要先通过登录一台跳板机,然后再由跳板机登录到相应的服务器进行操作,跳板机与服务器的连接都是内网地址。我们经常看到的现象就是下图这样,每次都要通过 ssh 登录两次,输入两次密码,密码也经常输错,不胜其烦。

先决条件:

mac或者其他类unix操作系统作为本地机器,安装expect

解决办法:

利用expect的自动交互特性与服务器自动交互

 #!/usr/bin/expect
#author @qq.com #定义数组,这里有多台就定义多个
#连接枚举
set connection_enum() "第一台目标机器别名" #名字可以随便取
set connection_enum() "第二台目标机器别名" #用户枚举
set connection_user() "第一台目标机器用户名"
set connection_user() "第二台目标机器用户名" #连接密码
set connection_passwd() "第一台目标机器密码"
set connection_passwd() "第二台目标机器密码" #连接ip,这里说下一般跳板机跟目标机器ssh连接是走的内网,所以配置的是内网ip
set connection_ip() "第一台目标机器ip"
set connection_ip() "第二台目标机器ip" #函数定义必须在使用前面否则会报错
#列出可用的host以及枚举
proc connectionlist {} {
global connection_enum #函数里面如果要用全局变量expect语法里要global进来
#[array size connection_enum]命令是求数组connection_enum的长度
for {set i } {$i <= [array size connection_enum]} {incr i} { #这是expect语法的for循环和自增
puts "signin \[$i\] for $connection_enum($i)" #输出到控制台
}
} #登录host
proc connecthost { enum } {
global connection_passwd
global connection_ip
global connection_user #我这里登录跳板机是免密的,所以注释掉下面三行,如果不是免密登录跳板机就需要打开注释
spawn ssh -l 跳板机用户名 跳板机ip
#expect {
# "*password*" { send "登录跳板机密码\r" }
# } #接收到跳板机登录成功的消息后登录目标机器,这一行expect的内容你的跟我的不一定一样,根据跳板机器返回的信息进行匹配
expect "*System restart required*" {send "ssh -l $connection_user($enum) $connection_ip($enum)\r"}
expect {
"yes/no" {send "yes\r";exp_continue;}
"*password:*" { send "$connection_passwd($enum)\r" }
}
interact
} if {[llength $argv] == } {
puts "choice your login host:"
connectionlist expect {
#正则匹配输入的值,1或2
"\[12\]" {
set num $expect_out(buffer); #$expect_out(buffer)获取输入值,set进行类型转换
connecthost $num;
}
# "" { connecthost }
# "" { connecthost }
}
}

根据你的个人及其配置修改好文件之后就可以直接运行脚本了。

不输入用户名密码通过跳板机登录到线上linux机器的更多相关文章

  1. 【效率工具】SSH一键登录脚本(可一键从跳板机登录线上服务器)

    说明 前阵子上线,一次性上了十个服务,一直上到凌晨才完事,期间每个服务都要先输入跳板机的登录信息来登录跳板机,然后再输入线上服务器的信息来登录线上服务器,实在是太过于麻烦,而且有些服务还有好几台服务器 ...

  2. WAMPserver配置(允许外部访问、phpmyadmin设置为输入用户名密码才可登录等)

    对于很多不熟悉PHP环境安装的朋友来说,用集成环境可以更快的上手,更方便的搭建PHP的运行环境,但是,WAMP的集成环境仅仅是将底层基础工作做好 了,有些个别关键的配置操作并没有集成到环境安装中,所以 ...

  3. WampServer PHP服务配置方法(允许外部访问、phpmyadmin设置为输入用户名密码才可登录等)

    WampSever 指的是apache + mySQL + PHP 三合一套装,第一字母W,是指用于windows系统,我用的是2.0f版.用于Linux系统的,是LampSever,第一字母是L.请 ...

  4. SSH工具登录远程指定节点时输入用户名密码方式【我】

    通过堡垒机部署项目, 一种方式:先把补丁传到接入机,然后用CRT等命令行工具登录指定接入机,然后用SCP命令把 补丁传到 生产服务器,比如 scp -P90010 /app/backup/packet ...

  5. python作业设计:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定

    作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判 ...

  6. 解决`向github提交代码是老要输入用户名密码`

    在命令行输入命令:git config --global credential.helper store☞ 这一步会在用户目录下的.gitconfig文件最后添加: [credential] help ...

  7. ubuntu 输入用户名密码又回到登陆界面

    问题描述: 输入正确的用户名密码,登陆后又返回登陆界面,重复出现. 问题解决: 环境变量出错,重新配置环境变量. 1.进入命令行模式Ctrl+Alt+F*,然后输入用户名密码: 2.登进去之后,以管理 ...

  8. git 解决每次更新代码都要输入用户名密码的解决方案

    使用git pull或者git push每次都需要输入用户名和密码很繁琐,耽误时间,现在教大家一条命令实现保存用户名和密码不用再输入 git config --global credential.he ...

  9. git 生成公钥 使用命令行无需输入用户名密码(windows)

    之前设置过一次,后来就忘记了,今天改完密码之后发现命令行clone时验证身份失败,重新设置公钥,记录一下 1. 由于之前设置过公钥,所以不用输入用户名密码就可以执行git命令.现在密码变了,取消公钥, ...

随机推荐

  1. python作业:购物车(第二周)

    一.作业需求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4 ...

  2. 搭建 MongoDB分片(sharding) / 分区 / 集群环境

    1. 安装 MongoDB 三台机器 关闭防火墙 systemctl stop firewalld.service 192.168.252.121 192.168.252.122 192.168.25 ...

  3. 爬虫:Scrapy14 - Telnet 终端(Telnet Console)

    Scrapy 提供了内置的 Telnet 终端,以供检查,控制 Scrapy 运行的进程.Telnet 仅仅是一个运行在 Scrapy 进程中的普通 Python 终端.因此你可以在其中做任何是. T ...

  4. PHP连接mysql数据库进行增删改查--修稿数据

    <?php $id = $_GET['id']; $db = new Mysqli("localhost","root","root" ...

  5. Spring AOP的一个简单实现

    针对学习笔记(六)中的购买以及退货代码,我们加入AOP框架,实现同样一个功能. 首先配置XML:service采用和之前一样的代码,只是没有通过实现接口来实现,而是直接一个实现类.transactio ...

  6. VB.NET——报表

    在工具箱查找ReportViewer,添加. 选择设计新报表: 排列字段,布局的步骤省略. 完成. 接下来,我们可以更改中文标题,设置背景色等,让界面看起来更美观. 如果需要添加参数,所传递的参数要与 ...

  7. jquery radio 行选中 操作

    想实现点击一行中任意位置 此行的 radio 选中. function rowClick(t) { var id = $(t).attr("id").substr(3, 1); / ...

  8. Window系统命令行调用控制面板程序

    Window系统命令行调用控制面板程序 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name M ...

  9. [NC189A]数字权重

    题目大意:有一个$n$位的数,设第$i$位为$a_i$(最高位为$a_1$).问满足$(\sum\limits_{i=2}^n(a_i-a_{i-1}))==k$的数的个数(不含前导零) 题解:发现$ ...

  10. POJ3717 Decrypt the Dragon Scroll

    Description Those who have see the film of "Kong Fu Panda" must be impressive when Po open ...