不自重者,取辱。不自长者,取祸。不自满者,受益。不自足者,博闻。
一个快捷远程登录线上Linux服务器的小工具:go 进入全屏
line

背景

平时工作中总是需要登录到线上服务,以解决各种问题,比如:

  • 远程登录线上日志机器查看PHP Error LogMysql Error Log
  • 登录QA的测试机检查代码是否正常发布、各项配置是否正确
  • 登录个人开发机

但是公司服务器都是需要通过跳板机登录,每次登录线上机器都需要先到跳板机登录一下,再登录到目标机器,很繁琐,而且必须得记得住目标机器的IP或者机器名才能尽快登录上去,要不然还得一顿查。。。


所以弄了个小工具,实现快捷登录(其实是几年前写的一个小脚本,最近升级了一下),分享出来大家使用。功能大概包括:

  • 自定义远程机器的快捷登录方式
  • 查看所有已配置过的快捷方式
  • 支持跳板机非跳板机两种场景的登录
  • 对于任意一个有权限的机器,可以直接一条命令登录
  • 可以指定任意账户登录线上服务器

总之,还是蛮方便的,简单的小工具,Open给大家,也许你也用得上。

一、工具下载

点击这里下载go工具:go.zip

二、配置&部署

1、将文件保存到固定的某个目录

cp ~/Downloads/go ~/Documents/Tools/

2、修改权限

chmod 0755 ~/Documents/Tools/go

3、配置到环境变量中

cd /usr/bin
ln -s ~/Documents/Tools/go go

4、修改配置

vim ~/Documents/tools/go

注:需要修改的内容有:

  • username: 用于登录跳板机
  • default_user:默认已这个账户登录到线上机器
  • server_list:自定义的登录快捷方式

三、使用

1、查看帮助

go -h

how-to-use-gotool-1.gif

2、查看所有快捷方式

go -list

how-to-use-gotool-2.gif

3、以默认用户登录某线上机器

go syq-fe03

how-to-use-gotool-3.gif

4、以指定用户登录newlab机器

go newlab xianliezhao

how-to-use-gotool-4.gif

5、任意一台有权限的机器,但是没有配置快捷方式

go 172.16.0.31 work

how-to-use-gotool-6.gif

6、关于配置&登录非跳板机的机器(比如我的阿里云机器)

go aliyun

how-to-use-gotool-5.gif

四、范例

五、脚本源代码

#! /bin/sh

##################################################################
# 此工具用于快捷登录线上机器
# author:xianliezhao@meilishuo.com
##################################################################

# 你的名字,用于登录到跳板机
username="xianliezhao"

# 默认以这个账户登录到线上机器
default_user="work"

# 定义机器的快捷方式
server_list=(
#----------------------------------------------------------------------------------------------------
#   "快捷方式        机器名/IP         是否需要跳板机(默认是1:需要)    用什么权限登录(默认是:$default_user)"
#----------------------------------------------------------------------------------------------------
    "syq-fe01       syq-bizfe-01"
    "syq-fe02       syq-bizfe-02"
    "syq-fe03       syq-bizfe-03"
    "syq-fe04       syq-bizfe-04"
    "dfz-fe01       dfz-bizfe-01"
    "dfz-fe02       dfz-bizfe-02"
    "dfz-fe03       dfz-bizfe-03"
    "dfz-fe04       dfz-bizfe-04"
    "dfz-fe05       dfz-bizfe-05"
    "dfz-fe06       dfz-bizfe-06"
    "dfz-fe07       dfz-bizfe-07"
    "dfz-fe08       dfz-bizfe-08"
    "dfz-snake01    dfz-bizsnake-01"
    "dfz-snake02    dfz-bizsnake-02"
    "dfz-snake03    dfz-bizsnake-03"
    "dfz-doota01    dfz-dootafe-01"
    "dfz-doota02    dfz-dootafe-02"
    "dfz-doota03    dfz-dootafe-03"
    "aliyun         www.baidufe.com       0   root"
)

# 使用帮助
help(){
    echo "
    远程登录工具:version 1.0
    使用方法:
        【1】:go 机器名 [登录账号]

            用法1:
                默认以work权限登录newlab ----> go newlab
            用法2:
                以rd权限登录newlab ----> go newlab rd
            用法3:
                以个人账号权限登录newlab ----> go newlab xianliezhao

        【2】:查看所有机器快捷方式:
            go -list
        \n"
    exit 1
}

# 查看所有快捷方式
show_list() {
    echo "\n您可以使用快捷方式进行登录如下服务器,如:go newlab rdol\n"
    echo "+------------------------------------------------------------------------------+"
    for (( i=0;i<${#server_list[*]};i=i+5 ));do
        A=`echo ${server_list[$i+0]} | awk '{print $1}'`
        B=`echo ${server_list[$i+1]} | awk '{print $1}'`
        C=`echo ${server_list[$i+2]} | awk '{print $1}'`
        D=`echo ${server_list[$i+3]} | awk '{print $1}'`
        E=`echo ${server_list[$i+4]} | awk '{print $1}'`

        # 格式化输出
        printf "%-1s %-13s %-1s %-13s %-1s %-13s %-1s %-13s %-1s %-12s %-1s\n" \
                \| ${A:-' '} \| ${B:-' '} \| ${C:-' '} \| ${D:-' '} \| ${E:-' '} \|
    done
    echo "+------------------------------------------------------------------------------+\n"
}

# 远程登录
remote_login(){

    # 默认的目标机器是$1
    host=$1

    # 跳板机
    proxy="@osys11.meilishuo.com -t ssh "

    # 如果指定了第二参数,则表示指定的账户登录
    if [ "$2" != "" ];then
        default_user=$2
    fi

    # 如果默认的登录用户是 rdol ,则在osys11机器上切换一下用户
    if [ "$default_user" == "rdol" ];then
        proxy=$proxy"rdol@osys11 -t ssh ";
    fi

    # 从server_list里查询是否有预定的快捷方式
    for key in ${!server_list[*]} ; do
        A=`echo ${server_list[$key]} | awk '{print $1}'`    # 快捷方式
        B=`echo ${server_list[$key]} | awk '{print $2}'`    # 机器名/IP
        C=`echo ${server_list[$key]} | awk '{print $3}'`    # 是否需要通过跳板机登录
        D=`echo ${server_list[$key]} | awk '{print $4}'`    # 登录用户名
        if [ "$host" == "$A" ];then
            host=$B;
            if [ "$C" == "0" ];then
                proxy="";
            fi
            if [ ! -z $D ];then
                default_user=""
                username=$D
            fi
            break;
        fi
    done

    # 登录目标机器
    ssh $username$proxy$default_user@$host
}


clear
# 未指定参数,或者参数为 -h | --help,则出现使用帮助
if [[ "$1" == "" || "$1" == "-h" || "$1" == "--help" ]];then
    help;

# 查看所有快捷方式
elif [ "$1" == "-list" ];then
    show_list;

# 执行登录
else
    remote_login $1 $2;

fi
趣店(原趣分期)技术学院
重点关注技术架构、服务化、优秀工具、自动化平台、开发全流程一体化解决方案、新人培养、工程师进阶之道等方面
这里环境优雅、氛围年轻、主要是福利还多,还等什么?我们敞开技术的大门,欢迎各种工程师加入!

评论区域

line
  • 前端小武 2016-03-23 23:18:02 回复
    回复 神剑戎 : win的crt下不是可以记录session么,克隆下,mac下可以修改vim ~/.ssh/config下,可以达到只登录一次吧~
    神剑戎 said:
    我们公司的服务器连接跳板机的时候,除了密码外还需要额外的6位验证码,每次需要从手机上查看才行,好麻烦的说~
  • Alien 2016-01-02 20:54:00 回复
    回复 神剑戎 : 额,这个就太麻烦了点儿;不过,公司内部为毛搞那么复杂。。。不够人性化
    神剑戎 said:
    我们公司的服务器连接跳板机的时候,除了密码外还需要额外的6位验证码,每次需要从手机上查看才行,好麻烦的说~
  • 神剑戎 2015-12-30 00:03:28 回复
    我们公司的服务器连接跳板机的时候,除了密码外还需要额外的6位验证码,每次需要从手机上查看才行,好麻烦的说~
  • Alien 2015-06-02 11:28:39 回复
    回复 cgcgbcbc : 名字都可以自己改的嘛,不打紧;一个软连搞定了,ln -s 
    cgcgbcbc said:
    这个工具和golang重名好么。。
  • cgcgbcbc 2015-06-02 10:35:35 回复
    这个工具和golang重名好么。。
  • 过境千帆 2015-05-19 18:24:07 回复
    非常不错的博客
  • 谢亮 2015-05-16 21:39:44 回复
    马克