为了保障网络和数据安全,越来越多公司使用堡垒机。iTerm作为一个好用的终端利器,要实现自动通过堡垒机登录服务器的方式有多种。下面我就来介绍一种通过expect脚本的方式完成配置。

第一步,进入/usr/local/bin目录,新建remote.exp文件,文件内容如下:

//remote.exp文件内容

#!/usr/bin/expect
set jumpusr [lindex $argv 0]
set jumphost [lindex $argv 1]
set usr [lindex $argv 2]
set host [lindex $argv 3] catch {spawn ssh -l $jumpusr $jumphost} expect "*$jumphost*" { send "ssh -l $usr $host\r" }
expect "*$host*" { send "cd ~\r"; interact }

第二步,执行下面命令,修改文件属性为可执行

chmod 777 remote.exp

第三步,在iTerm中测试刚才的程序。测试命令格式如下:

// user1为登录堡垒机的用户名
// host1为堡垒机IP地址
// user2为登录目标服务器的用户名
// host2为目标服务器的IP地址 remote.exp user1 host1 user2 host2

如:remote.exp xiaowang 123.4.56.78 hadoop 132.45.6.89

执行命令后,直接进入目标服务器。如果没有成功检查自己是否有堡垒机和目标服务器权限

第四步,配置iTerm

在iTerm中打开 Preferences -> Profiles -> General, 点击左侧底部“+”增加配置。

配置完成后,点击菜单栏的profiles,即可看到添加的快捷入口,点击入口即可快速登录相应的服务器。这种方法默认从new tab打开服务器。

也可点击快捷点“command+O”打开profiles窗口,选择入口和打开方式登录服务器。这种方法可选择从水平分割、垂直分割、新tab、新窗口方式打开。

后续,如需要增加新的堡垒机和服务器登录,只需在iTerm的profiles中增加新的配置即可。

注:文中显示的IP地址均为虚构地址,如有雷同请联系我修改。

 


remote.exp文件内容详解:

#!/usr/bin/expect
set jumpusr [lindex $argv 0]
set jumphost [lindex $argv 1]
set usr [lindex $argv 2]
set host [lindex $argv 3] catch {spawn ssh -l $jumpusr $jumphost} expect "*$jumphost*" { send "ssh -l $usr $host\r" }
expect "*$host*" { send "cd ~\r"; interact }

#!/usr/bin/expect, 指定用来执行该脚本的命令程序,这里的expect类似linux下的bash、windows下的cmd。注意:这行必须在第一行。

set jumpusr [lindex $argv 0], 获取执行脚本时传入的参数(参数保存在$argv中,从0号开始是参数),并将第0个参数保存到变量jumpusr中。

spawn ssh -l $jumpusr $jumphost, spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的,所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。

spawn主要的功能是给ssh运行进程加个壳,用来传递交互指令。

expect "*$jumphost*" { send "ssh -l $usr $host\r" }, 这里的expect也是expect的一个内部命令,这个命令的意思是判断上次输出结果里是否包含$jumphost(堡垒机地址)的值的字符串,如果有,执行‘ssh -l $usr $host\r’

expect "*$host*" { send "cd ~\r"; interact }, 判断上次输出结果里是否包含$host(目标服务器地址)的值的字符串,如果有,进入服务器用户目录,并保持交互动作。

interact, 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

expect命令参考链接:http://www.cnblogs.com/lixigang/articles/4849527.html

 

 

 

 

 

 

iTerm通过堡垒机自动登录服务器的更多相关文章

  1. SecureCRT实现跳板机自动登录

    背景: 1.通常运维会开放几个内网的机器能跳转到外网机器进行访问,这样的就是跳板机. 2.比如线上有120.0.0.2这台机器,而内网192.168.1.2这台连接了VPN,能通过SSH登录120.0 ...

  2. 用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子

    因为要对客户方的快30个项目进行特别有顺序的重启,所以不得不想办法写个脚本,网上看了不少段子.真是残缺的可以.没有一段是可以正常运行的.我来按顺序记录一下 脚本的本身 使用expect实现自动登录的脚 ...

  3. linux通过expect工具来实现自动登录服务器,并执行相关操作

    参考地址:https://www.cnblogs.com/liyuanhong/articles/7728034.html EOF的使用参考:https://www.cnblogs.com/liyua ...

  4. shell脚本自动登录服务器

    #!/bin/sh function trapper(){ trap 'exit 1' EXIT QUIT; } serverArr=( guard-boot-001,10.1.17.12 guard ...

  5. python之实现批量远程执行命令(堡垒机)

    python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对pytho ...

  6. python之堡垒机(第九天)

    本节作业: 通过使用paramiko和sqlalchemy实现堡垒机功能 主要功能实现: 1.用户登录堡垒机后,无需知道密码或密钥可以SSH登录远端服务器: 2.用户对一个组内所有主机批量执行指定命令 ...

  7. Centos下堡垒机Jumpserver V3.0环境部署完整记录(2)-配置篇

    前面已经介绍了Jumpserver V3.0的安装,基于这篇安装文档,下面说下Jumpserver安装后的的功能使用: 一.jumpserver的启动 Jumpserver的启动和重启 [root@t ...

  8. paramiko模块实现堡垒机

    通过SSHClient 执行命令 """通过用户名密码验证""" import paramiko # 创建 SSH 对象 ssh = par ...

  9. IronFort---基于Django和Websocket的堡垒机

    WebSSH有很多,基于Django的Web服务也有很多,使用Paramiko在Python中进行SSH访问的就更多了.但是通过gevent将三者结合起来,实现通过浏览器访问的堡垒机就很少见了.本文将 ...

随机推荐

  1. java8之lambda表达式(2)-方法引用

    方法引用使用的地方也是在函数式接口,使用方法引用可以使代码更加简单和便捷 在如下代码中 根据List中字符串长度排序的代码可以写成如下: public static void test1_() { L ...

  2. C++ STL基本容器的使用(vector、list、deque、map、stack、queue)

    1.关联容器和顺序容器 C++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector.list.deque等.关联容器主要有map和set.如下图: 1.vector基本使用 #incl ...

  3. 深入理解SpringCloud之Eureka注册过程分析

    eureka是一种去中心化的服务治理应用,其显著特点是既可以作为服务端又可以作为服务向自己配置的地址进行注册.那么这篇文章就来探讨一下eureka的注册流程. 一.Eureka的服务端 eureka的 ...

  4. Javac中的方法

    例1: interface IA{ void m(int a); } abstract class AC implements IA{ // 这个抽象方法覆盖了 IA中的方法m public abst ...

  5. Element ui级联地址省市区插件

    安装 npm install element-china-area-data -S 使用 import { provinceAndCityData, regionData, provinceAndCi ...

  6. myeclipse解决Fail to create the java Virtual Machine

    今天在打开myeclipse的时候,就显示出 Fail to create the java Virtual Machine 这样的一个窗口出来. 解决的方案就是在myeclipse的安装目录下找到m ...

  7. Scrum 冲刺博客

    博客链接集合 Alpha阶段敏捷冲刺 敏捷冲刺一 敏捷冲刺二 敏捷冲刺三 敏捷冲刺四 敏捷冲刺五 敏捷冲刺六 敏捷冲刺七 Alpha阶段敏捷冲刺总结 Alpha阶段敏捷冲刺总结

  8. Ubuntu下opencv的安装及IDEA开发配置

    Ubuntu下opencv的安装及IDEA开发配置 环境配置  这篇博客主要介绍Ubuntu下opencv的安装编译,以及IDEA对opencv进行Java开发的环境配置 安装opencv 首先安装o ...

  9. HDU 3613 Best Reward(拓展KMP算法求解)

    题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...

  10. 并发编程之 Thread 类过期方法和常用方法

    前言 在 Java 刚诞生时,Thread 类就已经有了很多方法,但这些方法由于一些原因(有一些明显的bug或者设计不合理)有些已经废弃了,但是他们的方法名却是非常的好,真的是浪费.我们在进行并发必编 ...