美文网首页
优雅地通过跳板机登录公司内网服务器

优雅地通过跳板机登录公司内网服务器

作者: amilyxy | 来源:发表于2020-05-11 00:42 被阅读0次

    前言:
      最近入职x手,撒花~~,花了好几天开通权限,熟悉服务器使用流程,因为没实习过,遇到很多不懂的知识,冒个泡来讲一下如何减少重复工作,解放生产力
    Jump Server 跳板机
    顾名思义,这是一个本地跳到服务器的一个节点,疫情期间无法回学校,在没有使用VPN之前,我是采用teamview来远程连接实验室电脑,然后通过实验室电脑使用服务器资源,其实这台实验室电脑就是跳板机。
    本地PC->跳板机->服务器

    ① 跳板机是一类可作为跳板批量操作远程设备的网络设备,是系统管理员或运维人员常用的操作平台之一。
    ② 跳板机是网络中容易受到侵害的主机,所以跳板机必须是自身保护完善的主机。通常至少配备两块网卡设备,分别具备不同的网络连接:连接外网(用以对目标服务器的远程登录及维护),连接内网(便于内部网络的管理、控制和保护,通过网关服务提供从私网到公网,或从公网到私网的特殊协议路由服务)

    公司对安全非常重视 ,用公司内网服务器跑程序,不仅使用跳板机,并且需要固定密码+软token,十分百分的繁琐,都说公司给的环境肯定是比实验室高效的,需要自己去摸索,那有什么方法可以安全又优雅呢?经过摸索,找到了两种方法,我真的太开心了~

    方法一:ssh隧道方式

    参考文档:
    关于ssh隧道
    使用Pycharm 连接内网服务器
    ① 步骤一:config设置

    Host *
        ControlPersist yes
        ControlMaster auto
        ControlPath ~/.ssh/%n:%p
    

    vi ~/.ssh/config追加上述代码,完成配置后本地登录跳板机,并在跳板机上vi ~/.ssh/config追加上述代码,完成配置后登录内网服务器。

    ② 步骤二:ssh隧道设置

    ssh -N -f -L 6000:web_server@abcdefg:22 amilyxy@xxxx.xxxx.com
    # ssh -N -f -L 本地端口:服务器ip:服务器端口 跳板机ip 
    

    具体参数解释:

    -N 告诉SSH客户端,这个连接不需要执行任何命令,仅做端口转发
    -f 告诉SSH客户端在后台运行
    -L X:Y:Z 做本地映射端口,将IP为Y的机器的Z端口通过中间服务器映射到本地机器的X端口。

    为了脱敏,把公司信息给去掉了,这行命令的作用是建立ssh隧道,通过访问本地6000端口就可以访问服务器22端口,执行完之后会发现.ssh文件夹下生成了一个文件名为跳板机ip的文件名,这时就可以免密访问跳板机了。
      暂时只能到免密登录跳板机了,因为申请资源可能是随机分配资源,所以怎么免密登录到内网服务器还在摸索,画个饼,有缘再来更。

    方法二:expect shell

    expect shell:

    expect是shell中处理交互的工具,通过spawn来执行shell脚本,通过expect捕捉用户需要进行的交互内容,通过send发送交互内容,通过set设置变量值。

    基本思路:
    ① 使用spawn命令执行登录跳板机的命令,一般为ssh user@ip。
    ② 使用expect来监听该进程的输出。
    ③ 使用send命令来发送密码给该进程,就完成连接。

    具体步骤:
    步骤一:写脚本

    #!/usr/bin/expect
    # 用户
    set user xieyang
    # 固定密码
    set passwd_prefix *******.
    # 连接固定密码+softtoken(如果为固定密码,可忽略该参数
    # 抓包得到的cookie
    set cookie  "*****"    
    # 这里是通过cookie获取的token
    
    # concat 固定密码+token
    set passwd  "$passwd_prefix [lindex $argv 0]"
    # 跳板机ip
    set ipaddress xxx.xxxx.com
    # 选择system list (实习生好像不需要选择device
    set syslist 2
    spawn ssh $user@$ipaddress   #执行ssh
    expect {
        "*Password:" { send "$passwd\r" }
        "Please select system" { send "$syslist\r" }
    }
    interact
    

    将脚本保存为sshxyrelay3.sh,并通过chowd 777 sshxyrelay3.sh添加权限,如果你是静态密码登录可以直接跳过步骤二。

    步骤二:监听soft_token的输出
      公司内部会有产生soft_token入口,如何自动化获取动态密码,可以考虑charles抓包,关于charles的介绍,这里说的很详细了,下面为macos下charles的抓包过程:

    • 安装charles
      官网安装新版本的charles ,最新版的试用期为一个月,可以去网上搜一下激活账户进行register。
    • 设置charles
      ① 证书安装与认证
      菜单:help -> SSL Proxying -> Install Charles Root Certificate
      证书安装
      在钥匙串中找到Charles Proxy CA,并设置为始终信任。
      证书认证
      ②SSL代理设置
      菜单:Proxy -> SSL Proxying settings,添加需要匹配的域名和端口。
      添加需要匹配的域名和端口
      ③通过macos抓包
      菜单:Proxy -> macOS Proxy
      另外也可以通过ios进行抓包,这里不多说了。
      设置抓包方式
      现在就可以对系统中的网络请求进行抓包啦,这是系统几秒活动的抓包记录:
      部分抓包记录
      ④ 对指定的网络请求抓包
      抓包记录太多难免有点繁琐,一般我们需要的只是某几个特定网页的抓包记录,因此可以考虑指定网络请求:
      菜单:Proxy -> Recording Settings

    ✅静态密码:shell上执行./sshxyrelay3.sh实现一键登录啦~(嫌弃./sshxyrelay3.sh可以在sh里面alias一下,或者添加到iterm2快捷方式)
    ✅动态密码:通过抓包产生动态密码的网络请求(可以考虑获取cookie,模拟网页登录请求,产生soft_token)得到最终的登录密码,这个具体脚本,之后再写吧...

    后续问题

    charles关闭后 无法联网,画个饼,等进公司再来补充吧,好像有点搞砸了

    相关文章

      网友评论

          本文标题:优雅地通过跳板机登录公司内网服务器

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