iTerm通过堡垒机自动登录服务器
为了保障网络和数据安全,越来越多公司使用堡垒机。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通过堡垒机自动登录服务器的更多相关文章
- SecureCRT实现跳板机自动登录
背景: 1.通常运维会开放几个内网的机器能跳转到外网机器进行访问,这样的就是跳板机. 2.比如线上有120.0.0.2这台机器,而内网192.168.1.2这台连接了VPN,能通过SSH登录120.0 ...
- 用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子
因为要对客户方的快30个项目进行特别有顺序的重启,所以不得不想办法写个脚本,网上看了不少段子.真是残缺的可以.没有一段是可以正常运行的.我来按顺序记录一下 脚本的本身 使用expect实现自动登录的脚 ...
- linux通过expect工具来实现自动登录服务器,并执行相关操作
参考地址:https://www.cnblogs.com/liyuanhong/articles/7728034.html EOF的使用参考:https://www.cnblogs.com/liyua ...
- shell脚本自动登录服务器
#!/bin/sh function trapper(){ trap 'exit 1' EXIT QUIT; } serverArr=( guard-boot-001,10.1.17.12 guard ...
- python之实现批量远程执行命令(堡垒机)
python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对pytho ...
- python之堡垒机(第九天)
本节作业: 通过使用paramiko和sqlalchemy实现堡垒机功能 主要功能实现: 1.用户登录堡垒机后,无需知道密码或密钥可以SSH登录远端服务器: 2.用户对一个组内所有主机批量执行指定命令 ...
- Centos下堡垒机Jumpserver V3.0环境部署完整记录(2)-配置篇
前面已经介绍了Jumpserver V3.0的安装,基于这篇安装文档,下面说下Jumpserver安装后的的功能使用: 一.jumpserver的启动 Jumpserver的启动和重启 [root@t ...
- paramiko模块实现堡垒机
通过SSHClient 执行命令 """通过用户名密码验证""" import paramiko # 创建 SSH 对象 ssh = par ...
- IronFort---基于Django和Websocket的堡垒机
WebSSH有很多,基于Django的Web服务也有很多,使用Paramiko在Python中进行SSH访问的就更多了.但是通过gevent将三者结合起来,实现通过浏览器访问的堡垒机就很少见了.本文将 ...
随机推荐
- java 简单认识移位运算符和位运算符
移位运算符和位运算符本质上都是操作二进制位,因为计算机存储的是二进制数据,运算效率相对较高. 移位运算符:把整数的二进制位进行左移或右移 .左移一位,相当于这个数乘以2, 右移一位,相当于这个数除以2 ...
- vue教程1-03 v-for循环
vue教程1-03 v-for循环 v-for循环: v-for="name in arr" {{value}} {{$index}} v-for="name in js ...
- odoo 开发基础 -- 视图之xpath语法
odoo 视图函数 在整个项目文件中,结构并不是十分明显,虽然它也遵循MVC设计,类比django的MTV模式,各个模块区分的十分明显,在Odoo中,视图的概念不是特别明显,很多时候,我们会将调用模型 ...
- 8 Ways to Become a Better Coder
It’s time to get serious about improving your programming skills. Let’s do it! That’s an easy career ...
- Nutch抓取流程
nutch抓取流程注入起始url(inject).生成爬取列表(generate).爬取(fetch).解析网页内容(parse).更新url数据库(updatedb)1:注入起始url(inject ...
- (转)shlex — 解析 Shell 风格语法
原文:https://pythoncaff.com/docs/pymotw/shlex-parse-shell-style-syntaxes/171 这是一篇协同翻译的文章,你可以点击『我来翻译』按钮 ...
- tensorflow进阶篇-5(反向传播2)
上面是一个简单的回归算法,下面是一个简单的二分值分类算法.从两个正态分布(N(-1,1)和N(3,1))生成100个数.所有从正态分布N(-1,1)生成的数据目标0:从正态分布N(3,1)生成的数据标 ...
- ThreadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别
Java并发编程中在使用到ThreadPoolExecutor时,对它的三个关闭方法(shutdown().shutdownNow().awaitTermination())的异同点如下: shutd ...
- JavaScript初探四
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- es-06-java创建mapping和setting
说实话, java的方式太繁琐, 不如直接使用DSL进行创建 1, create package com.wenbronk.elasticsearch.usage.index; import com. ...