iTerm经过堡垒机自动登陆服务器

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

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

//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 }

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

chmod 777 remote.exp

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

// 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, 点击左侧底部“+”增长配置。
bash

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

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

后续,如须要增长新的堡垒机和服务器登陆,只需在iTerm的profiles中增长新的配置便可。ssh

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

 


 

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

相关文章
相关标签/搜索