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

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

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

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

     
     
     
     
     
     

  • 相关阅读:
    割点和割边
    差分约束
    错题本(持续更新)
    高中语文小说赏析问题
    CSPS2019游记
    【USACO09FEB】改造路Revamping Trails
    【SDOI2013】森林
    Nozaki_Chiyo的代码盒
    【HAOI2015】树上染色
    kruskal重构树
  • 原文地址:https://www.cnblogs.com/-nothing-/p/9392582.html
Copyright © 2020-2023  润新知