• Linux加持SSH隧道技术实现服务端口本地转发


    一、摘要

    在工作中,经常需要对公网云主机上运行的一系列服务进行维护,为了安全起见,通常对外开放的端口只有SSH(22端口)服务,虽然可以在运维的时候临时通过改变安全策略放行其它服务端口,但对于耗时较长的排查操作,长时间暴露敏感端口存在较大的安全风险。而通过SSH隧道技术,不用改变任何安全策略便可以将云主机中的服务端口映射到本地进行操作,不仅能够保证传输数据处于加密状态,而且可以在本地通过工具或浏览器访问目标服务,既方便又安全。

    二、SSH隧道原理

    SSH隧道技术在本文中的应用场景图如下:

    要成功建立SSH隧道,需要满足以下几个前提条件:

    (1).个人电脑需要安装支持SSH协议的软件,运维个人电脑推荐使用MacBook,直接命令行使用SSH非常方便,Windows系统可能 需要安装类似于Cygwin这样的软件。

    (2).云主机防火墙安全策略必须放行22端口,也就是SSH协议使用的默认端口。

    (3).云主机上同样需要安装支持SSH协议的软件包,要能保证能用SSH协议正常登录远程主机。

    SSH隧道主要从个人电脑开始建立,根据上图可知,SSH隧道建立过程如下:

    (1).在个人电脑中开放一个自定义端口,这里选择了5478端口,该端口没有特别要求,可以自己根据实际情况选择,不与其它端口冲突就行。5478端口可以看作是隧道的开端。

    (2).输入远程主机的SSH登录账号和密码建立隧道远程连接,防火墙的22端口必须放行才能成功建立连接。这里的SSH远程登录可以看作是隧道的延伸,由个人电脑的5478端口出发,延伸到远程云主机的22端口。

    (3).将远程主机的真实服务端口与本地隧道开端5478端口建立映射。映射关系可以看作是隧道的收尾工程,隧道从云主机的22端口连接后,需要将其与远程主机上的本地服务端口建立连接,假设本地服务有个3306的数据库服务, 这样最终就打通了个人电脑5478端口和3306端口的连接,实现从本地访问防火墙之后的云主机服务。

    三、实践应用

    上面建立SSH隧道的过程,在个人电脑里可以使用SSH工具自带的命令完成,完整命令如下:

    ssh -CfNg -L 5478:localhost:3306 root@..177.122

    这条命令参数含义如下:

    -C: 表示压缩传输,可以提高传输速率。

    -f: 将ssh传输转入后台执行,不会占用当前的shell

    -N:建立静默连接,不会看到具体的会话

    -g: 允许远程主机连接本地端口转发

    -L: 本地端口转发

    5478:localhost:3306 这个参数是建立端口映射关系,5478表示本地端口,localhost:3306表示远程主机的3306端口。

    注意:这里一定要写localhost,不要写..177.122,虽然localhost和..177.122代表同一台远程机器。

    root@..177.122参数就是远程SSH登录的过程,需要输入SSH密码才能最终完成隧道连接。

    如果命令执行失败,可以先看看本地有没有出现端口占用的情况,如图:

    如果命令执行返回了进程ID,说明本地转发端口5478被该进程占用了,要么kill 进程ID,要么更换其它端口。

    成功执行命令后,可以查看ssh的后台进程,发现该进程说明隧道建立成功,如图:

    在本地通过数据库软件连接5478端口试试,可以看到已成功连接远程数据库,如图:

    四、后记

    SSH隧道技术还有很多其它应用场景,这里没有继续去展开,等在以后的工作中遇到并解决了实际问题后再单独分享。

  • 相关阅读:
    树莓派系统文件解析
    高项_15-17章知识管理&项目变更管理&战略管理
    C++常考面试题(第一篇)
    Android为什么不能在子线程更新UI
    计算机毕设(附源码)JAVA-SSM基于Java的家庭事务管理系统
    微信怎么发状态?简单教程,一学就会!
    什么是会话劫持以及如何阻止它
    Elsevier (爱思唯尔) 期刊 投稿流程与注意点
    umask计算创建文件、目录的默认权限
    基于simulink的牛鞭效应模型建模与仿真
  • 原文地址:https://blog.csdn.net/suntiger/article/details/132626485