为了保障网络和数据安全,越来越多公司使用堡垒机。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. python for dblp.xml

    由于最近处理数据时涉及到dblp.xml,刚开始下载时dblp.xml只有300多M,但解压之后就有1.9G,没有什么东西能够打开,所以必须要用工具来处理,在python中sax包能够一边解析一边处理 ...

  2. WebFlux基础之响应式编程

    上篇文章,我们简单的了解了WebFlux的一些基础与背景,并通过示例来写了一个demo.我们知道WebFlux是响应式的web框架,其特点之一就是可以通过函数式编程方式配置route.另外究竟什么是响 ...

  3. CFileDialog类的详情

    CFileDialog类封装了Windows常用的文件对话框. 常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能. void CnotepadDlg::OnOp ...

  4. spring boot 与 thymeleaf (2): 常用表达式

    在asp.net mvc 中, 有一个视图解析器, 可以支持Razor语法. 使用起来, 是非常的方便, 并且, 写在前台页面的后台方法, 是可调试的. 但是在java中, 目前我还没有接触到, 像. ...

  5. apache 服务器概述--安装(一)

    一.安装httpd,elinks浏览器 [root@ ~]# yum install elinks httpd -y [root@ ~]# elinks www.baidu.com 二.配置文件 # ...

  6. Java中的八大基本数据类型

    Java中的基本类型主要包括整数.浮点数.字符和布尔类型. 整数: 整数类型主要包括byte.short.int.long四种类型,所占大小分别为1byte.2byte.4byte和8byte: 浮点 ...

  7. 了解Spring-boot-starter常用依赖模块

    Spring-boot的优点: 1.Spring框架的“约定优先于配置(COC)”理念以及最佳实践. 2.针对日常企业应用研发各种场景的Spring-boot-starter自动配置依赖模块,且“开箱 ...

  8. Java NIO系列教程(九) ServerSocketChannel

    Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样.ServerSocketChannel类在 jav ...

  9. rsync --include-from --exclude-from的理解

    rsync --include-from --exclude-from的理解: 1.同时添加--include-from --exclude-from时.后者是对前者的结果进行排除 如:“--incl ...

  10. QYH练字

    汉字书写笔划,提取自百度汉语等网站... 以下凑字数: [发文说明]博客园是面向开发者的知识分享社区,不允许发布任何推广.广告.政治方面的内容.博客园首页(即网站首页)只能发布原创的.高质量的.能让读 ...