MACBOOK 通过iterm2连接堡垒机跳转服务器

  • 本公司是通过齐治堡垒机连接远程服务器的环境,因为连接过程中需要自动输入密码和选择主机,所以要使用expect工具,编写expect脚本
  • remote.exp 
#!/usr/bin/expect

if { $argc != 7 } {
    send_user "usage: expect $argv0 \[JUMP_HOST\] \[JUMP_PORT\] \[JUMP_USER\] \[JUMP_PASSWORD\] \[HOST\] \[USER\] \[PASSWORD\]\n\n\t"
    send_user "*JUMP开头\t是堡垒机的登录信息\n\t"
    send_user "*非JUMP开头\t是连接目标主机的登录信息."
    exit
}

set timeout 5

set jump_host [lindex $argv 0]
set jump_port [lindex $argv 1]
set jump_user [lindex $argv 2]
set jump_pswd [lindex $argv 3]
set host [lindex $argv 4]
set user [lindex $argv 5]
set pswd [lindex $argv 6]

# 连接堡垒机
spawn ssh -p$jump_port $jump_user@$jump_host
# 登录堡垒机
expect {
   "*(yes/no*)?" {
       send "yes\r"
       expect "*assword:"
       send "$jump_pswd\r"
   }
    # 接受到password输入密码
    "*assword:" {
        send "$jump_pswd\r"
    }
}
# 选择登录主机
expect {
    "*:" {
        send "$host\r"
    }
}
# 选择登录用户 1 是 any
expect {
     "*:" {
        send "1\r"
    }
}
# 输入主机用户
expect {
    "*login:" {
        send "$user\r"
    }
}
# 输入主机密码
expect {
    "*assword:" {
        send "$pswd\r"
    }
}

interact
  • 配置iterm2 profile
    • Send text at start: /Users/aaa/scripts/remote.exp 堡垒机ip 堡垒机ssh端口 堡垒机ssh用户 堡垒机ssh密码 跳转主机ip 跳转主机ssh用户 跳转主机ssh密码

  • 配置lrzsz
    • mac上传脚本,根据自己rz sz命令路径修改
  • recv
    cat /usr/local/bin/iterm2-recv-zmodem.sh
    
    #!/bin/bash
    # Author: Matt Mastracci (matthew@mastracci.com)
    # AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
    # licensed under cc-wiki with attribution required
    # Remainder of script public domain
    
    osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
    if [[ $NAME = "iTerm" ]]; then
        FILE=`osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
    else
        FILE=`osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
    fi
    
    if [[ $FILE = "" ]]; then
        echo Cancelled.
        # Send ZModem cancel
        echo -e \\x18\\x18\\x18\\x18\\x18
        sleep 1
        echo
        echo \# Cancelled transfer
    else
        cd "$FILE"
        /opt/homebrew/bin/rz -E -e -b
        sleep 1
        echo
        echo
        echo \# Sent \-\> $FILE
    fi
  • send
    cat /usr/local/bin/iterm2-send-zmodem.sh
    #!/bin/bash
    # Author: Matt Mastracci (matthew@mastracci.com)
    # AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
    # licensed under cc-wiki with attribution required
    # Remainder of script public domain
    
    osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
    if [[ $NAME = "iTerm" ]]; then
        FILE=`osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
    else
        FILE=`osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
    fi
    if [[ $FILE = "" ]]; then
        echo Cancelled.
        # Send ZModem cancel
        echo -e \\x18\\x18\\x18\\x18\\x18
        sleep 1
        echo
        echo \# Cancelled transfer
    else
        /opt/homebrew/bin/sz "$FILE" -e -b
        sleep 1
        echo
        echo \# Received $FILE
    fi

  • 配置Triggers

  • Regular expression: rz waiting to receive.\*\*B0100
                Action: Run Silent Coprocess
            Parameters: /usr/local/bin/iterm2-send-zmodem.sh
               Instant: checked
    
    Regular expression: \*\*B00000000000000
                Action: Run Silent Coprocess
            Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
               Instant: checked

    * 如果是通过expect方式登录的服务器,需要做一下配置,写一个shell脚本加入               export LC_CTYPE=en_US

  • #!/bin/bash
    # $1 是expect脚本,其他的参数就是登录堡垒机和服务器的参数
    
    if [ $# -ne 8 ];then
        echo -e  "usage: $0 [EXPECT_SCRIPT_PATH] [JUMP_HOST] [JUMP_PORT] [JUMP_USER] [JUMP_PASSWORD] [HOST] [USER] [PASSWORD]\n\n\t"
        echo -e "*JUMP开头\t是堡垒机的登录信息\n\t"
        echo -e "*非JUMP开头\t是连接目标主机的登录信息."
        exit
    fi
    
    export LC_CTYPE=en_US
    
    /usr/bin/expect $1 $2 $3 $4 $5 $6 $7 $8
    
    
    
    
    # 运行示例
    
    # bash /Users/test_user/scripts/login.sh /Users/test_user/scripts/remote.exp 172.88.88.88 22 test_user test_user_password 172.77.77.77 root 'root_password'
    
    # 如果使用了这种方式的话,iterm2 profile 也需要对应的修改一下

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值