韩灵稚--老韩的老窝

累了,就歇歇~

导航

使用appscript完成堡垒机的自动登录

Posted on 2017-02-06 21:56  韩灵稚  阅读(1341)  评论(0编辑  收藏  举报

出于网络安全性的考虑,公司内部服务器访问,使用的是kerbrose+堡垒机。日常访问线上的服务器大致的步骤,先登录kerbrose获取票据,再登录堡垒机,再选择要登录的服务器完成最终登录。久而久之,使用mac+iterm每次都要重复上述步骤,对工作效率有很大的影响。考虑自动化的方案,在不能通过运维渠道开启绿色通道的情况下,我们只能自给自足了。

利用applescript写一个脚本mac脚本,完成我们的目的。AppleScript是Mac OS X内置的一种功能强大的脚本语言,使用 AppleScript 的目的是把一些重复繁琐并且耗费时间的任务自动化。初次接触,让我想起了windows下的vbscript脚本,简单高效。虽然丧失了跨平台性,但是在自己专属的平台上代码效率可以达到极致。

由于我使用的shell终端是iterm,粘一下自动操作iterm完成登录的自动化操作。

set worklogin to "ssh work@" & machine_ip
set pwd to "你的密码"
tell application "iTerm"
    activate
    --tell (make new terminal) 可以生成一个新的终端
    tell (current terminal)
        --set number of columns to 150 设置终端的宽
        --set number of rows to 40 设置终端的高
        tell (launch session "login_session")
            write text "relay"
            delay 2
            write text "q"
            delay 0.5
            write text "kinit hanlingzhi"
            delay 1
            write text pwd
            delay 1
            write text worklogin
        end tell
    end tell
end tell

简单介绍一下脚本前两行设置变量,set 变量 to 变量值。tell呼气mac的application,这里选择的是"iterm",其他应用同理,比如"Finder"。开启一个新的会话,在iterm中创建一个新的session,然后按照一下步骤模拟操作。简单吧~(大笑)

AppleScript 这种脚本语言本身尽可能使用平实的英语作为语法来让代码特别容易理解和阅读。AppleScript 的大多数命令会位于 Tell 命令块内,它叫 “Tell 命令块” 是由于你在告诉应用程序你 想它做些什么。你必须要 以 “end tell” 命令来结束这个 Tell 命令块。 

machine_ip 我选择外部传入具体登录的服务器地址,这样可以参数配置需要登录的服务器,applescript外部接收参数,使用的是on run的handler的函数。
on run {para1}
    set machine_record to {测试服务列表}
    if para1 = "-h" or para1 = "--help" then
        helpinfo(machine_record)
    else
        set machine_ip to recordvalue(machine_record, para1)
        if machine_ip = "" then
            log "[warning]:没有你要登录的服务器"
            helpinfo(machine_record)
        else
            try
                itermlogin(machine_ip)
            on error
                log "[warning]:登录失败,请检查密码和票据是否正确"
            end try
        end if
    end if
end run

至此完成了脚本核心内容,applescript脚本的执行是通过osascript命令进行,为了方便使用可以通alias别名的方式简化操作。

alias login='osascript /Users/hanlingzhi/project/applescript/login.scpt'
 
然后执行
login 服务器IP就可以了~~

AppleScript 的一个优点是你不必是一个天才程序员才能使用它,事实上你甚至不需要太多有任何编程的经验,感兴趣了?那就尝试一下吧~