美文网首页
用脚本登录跳板机与远程目标机器

用脚本登录跳板机与远程目标机器

作者: TangFly | 来源:发表于2018-10-26 18:37 被阅读0次

    前情介绍:

          最近,需要自己动手部署项目到测试环境。测试环境需要用跳板机登录。于是每天自己在不停的输入ssh命令登录到跳板机和远程测试机器。烦死。敲了一遍又一遍的登录命令,而跳板机还是用名字的,名字却老长老长,记不住。于是,每次登录前,先找到对应的跳板机名称,然后copy到命令里面,然后再去登录。要最终登录到测试机器上,需要做三步:1. 打开记录跳板机地址名称的文件;2.在终端输入ssh登录命令,copy跳板机名称粘贴到终端作为登录命令的参数. 3.在跳板机器上再输入一遍命令登录到目标机器上。花去的时间不说,问题是自己老在做这个重复没有技术含量的动作。很显然,我要自动化。脚本,不就是干这个事情吗?OK,我决定写一个登录到目标机器的脚本。

    脚本第一稿:

           登录的命令其实很简单,不就是“ssh -i ${cert-file} ${target_machine}” 吗?敲两个命令就好,但于我前面介绍的的原因,这两个命令敲的快不了。因此,一开始的想法就是把这两条命令放在sh脚本中执行即可。于是,第一稿出炉,格式如下:

    #!/bin/sh

    TARGET_MACHINE=$1

    board_machine=$2

    local-cert-file=$3

    board-cert-file=$4

    echo "you input target machine:" $TARGET_MACHINE

    echo "you input machine profile:" $local-cert-file

    sudo ssh -i ${local-cert-file} ${board_machine} "ssh -i ${board-cert-file} $TARGET_MACHINE"

    执行,发现出来错误:

    Pseudo-terminal will not be allocated because stdin is not a terminal

    发现这事伪终端问题。于是,添加选项-tt解决。最后一句话成这样:

    sudo ssh -i ${local-cert-file} ${board_machine} "ssh -i  -tt ${board-cert-file} $TARGET_MACHINE"

    然后chmod +x login.sh,再执行./login.sh 10.0.1.9 xxxxxx#@longboardmachinename ./local-certfile /home/board-certfiledir/board-certiflename。 ok,顺利登录到目标机器10.0.1.9了。虽然正常工作了,可是这4个参数要敲这么长,根本没有改进啊,还是会烦死。。。不行,还得改进;

    脚本第二稿:

    因为跳板机的名称是不变的,因此完全可以写死在脚本里面啊。而且因为本地和跳板机的certfile名称完全一致,都是形如xxx_cert.pem的格式,xxx是对应的测试环境标记,因此改写如下:

    #!/bin/sh
    TARGET_MACHINE=$1
    PROFILE=$2
    echo "you input target machine:" $TARGET_MACHINE
    echo "you input machine profile:" $PROFILE
    echo "Begin to login target machine......"
    board-certfile="/home/certfiledir/${PROFILE}_cert.pem"
    echo "pem:" ${board-certfile}
    sudo ssh -i ${PROFILE}_cert.pem #longboardmachinename# "ssh -tt -i ${board-certfile} $TARGET_MACHINE"

    此时,就只要输入2个参数了,键入: ./login.sh 10.0.1.9 test,这样就用到测试的认证文件登录到目标机器上了。只需要记录下要登录的目标机器和认证文件的标记即可。此时,我突然只想登录到跳板机上,这个又不适用了。。。于是,再改。

    脚本第三稿:

    添加选项,采用if分支。如果只想登录到跳板机,就把第一个target-machine的名称写成“board”,发现是“board”,则只登录到跳板机就行。添加if后的写法如下:

    #!/bin/sh
    TARGET_MACHINE=$1
    PROFILE=$2
    echo "you input target machine:" $TARGET_MACHINE
    echo "you input machine profile:" $PROFILE
    if [ $TARGET_MACHINE = "board" ];then
        echo "Begin to login board machine......"
        sudo ssh -i ${PROFILE}_cert.pem #longboardmachinename#
    elif [ $TARGET_MACHINE ];then
        echo "Begin to login target machine......"
        board-certfile="/home/certfiledir/${PROFILE}_cert.pem"
        echo "pem:" ${board-certfile}
        sudo ssh -i ${PROFILE}_cert.pem #longboardmachinename# "ssh -tt -i ${board-certfile} $TARGET_MACHINE"
    else
        echo "Usage: login.sh [target_machine] [profile(test|release|]."
        echo "     [target_machine]: the ip of the machine or 'board' if you only want to login the board machine"
    fi

    此时,就支持只登录到跳板机的任务了。只需输入:./login.sh board test即可。

    最终,这个脚本执行时,只要输入你要登录的目标机器和认证文件标记即可。只要一步,时间1s 搞定。

    相关文章

      网友评论

          本文标题:用脚本登录跳板机与远程目标机器

          本文链接:https://www.haomeiwen.com/subject/ihjltqtx.html