代码如下:
设置方式是:iterm2-preference-Profiles-新建一个profile,并设置Name为a, Command为 /Users/XXX/Desktop/a.sh 在sen text as start内传入4个参数:USER JUMPER_SERVER LOG_SERVER PW
在桌面新建文本文件输入以下内容并保存为a.sh
在iterm中右键new window并选择a,即能自动执行。
#!/usr/bin/expect
set timeout -1
### prepare the variable
set USER [lindex $argv 0]
set JUMPER_SERVER [lindex $argv 1]
set LOG_SERVER [lindex $argv 2]
set PW [lindex $argv 3]
### login the jump server
spawn ssh $USER@$JUMPER_SERVER
expect {
"]"
{
# already login
send_user "already login\n"
}
"(yes/no)?"
{send "yes\n"; exp_continue}
"DomainPassword*:"
{
send_user "\nEnter your token: "
expect_user -re "(.*)\n"
set TOKEN "$expect_out(1,string)"
send_user "\n"
#get the token from user
send "$PW$TOKEN\n"
send_user "**********\n"
}
}
expect "]"
send "ssh $LOG_SERVER\r"
expect "pass*:"
send "$PW\n"
expect "$USER@*"
interact
部分代码说明如下:
expect{}内嵌入多个""时,依次判断是否满足,如果满足则执行{}的内容,并跳出该expect,继续向下执行;如果希望执行完毕{}后还需要继续下一个""则需要添加exp_continue.
执行完脚本后如果不带interact则自动退出。
使用for()循环存在异常情况导致无法正确interact.
vim .ssh/config
//增加以下内容即可
host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p