SSH端口转发及隧道使用介绍

76 次查看 0 条评论

SSH 的端口转发功能可以加密 Client 和 Server之间的通讯数据,还可以突破防火墙的限制。

1、SSH端口转发类型:

  1. 本地端口转发
  2. 远程端口转发
  3. 动态端口转发

2、使用实例及方法介绍

2.1、利用ssh隧道连接IDC机房无公网的MySQL服务器(本地端口转发)

实验环境机器说明:

11071-q24s8gg1vr9.png

场景解说:主机 jumpservermysql 为托管在IDC机房服务器,主机 Lenvo 为某开发人员办公电脑。该开发人员能在主机 Lenvo 上SSH连接登录 jumpserver 服务器,不能直接在主机 Lenvo 上连接 mysql 服务,但 jumpserver 可以通过内网连接 mysql 服务。现配置使用SSH本地端口转发使得开发人员 Lenvo 主机能直接连接上 mysql 主机的MySQL服务。

配置SSH本地端口转发:

由于开发员主机 Lenvo 上3306端口已经有本地MySQL服务占用,这里使用3307端口配置转发:

Jack@Lenvo MINGW64 ~
$ ssh -p 36102 -fNL 3307:192.168.1.177:3306 root@119.147.212.249

SSH参数解释:

  • -f 后台运行
  • -N 不执行shell
  • -L 本地端口转发,将端口绑定到本地客户端,正向代理
  • -R 远程端口转发,将端口绑定到远程服务器,反向代理(需要在远程主机上开放SSH额外端口)
  • -D 动态端口转发
  • -C 允许压缩数据

47188-9w36ah08fop.png

查看本地已经监听3307端口了,这里我本地配置了到119.147.212.249的免密登录,故没有提示输入密码。

测试使用3307端口登录主机 mysql 上的服务:

Jack@Lenvo MINGW64 ~
$ mysql -h 127.0.0.1 -P 3307 -u root -p

50703-kmecat6e24.png

输入mysql密码后成功登录。

使用 Xshell 配置这个功能:

12300-oskgtj9k54.png

2.2、远程端口转发

使用场景:开发人员在电脑 Lenvo 上正在开发的一个web项目,客户现在想先一睹为快。但由于没有直接的公网直通 Lenvo 主机,所哟客户无法查看。然后客户那边能网络到 jumpserver 机器网络是通的。这时候可以使用SSH的远程端口转发让客户通过 jumpserver 机器的公网IP来访问到正在开发人员电脑上的web项目。

配置SSH远程端口转发:

首先修改公网机器 jumpserver 的SSH配置文件 /etc/ssh/sshd_config:

GatewayPorts yes

然后在 Lenvo 主机上建立端口转发连接:

Jack@Lenvo MINGW64 ~
$ ssh -p 36102 -fNR 8866:127.0.0.1:80 root@119.147.212.249

jumpserver 机器上查看已经监听8866端口:

72195-gm65dcr0hc.png

开放 jumpserver 机器上的 8866 端口;

[root@jumpserver ~]# iptables -I INPUT -p tcp --dport 8866 -j ACCEPT
[root@jumpserver ~]# service iptables restart

现在让客户在浏览器访问 http://119.147.212.249:8866 即可打开开发人员电脑上的web项目。

80616-3vqx4gwiatf.png

这里有一个问题:就是ssh连接可能会因为网络波动等原因中断连接,这样一来这个端口转发也就断了。推荐使用 autossh 这个工具解决。使用 autossh 可以自动在连接断开时自动重连,再把 autossh加入系统服务自动启动,则可以做到稳定的连接。

[Jack@Lenvo ~]$ autossh -M 5555 -p 36102 -NR 8866:127.0.0.1:80 root@119.147.212.249

参数 -M:在指定端口5555上监听连接的变化,只要断开就重连。

编译安装autossh步骤:

[root@centos7x64 ~]# wget https://www.harding.motd.ca/autossh/autossh-1.4g.tgz
[root@centos7x64 ~]# tar -zxvf autossh-1.4g.tgz
[root@centos7x64 ~]# cd autossh-1.4g
[root@centos7x64 autossh-1.4g]# ./configure
[root@centos7x64 autossh-1.4g]# make
[root@centos7x64 autossh-1.4g]# cp -a autossh /usr/bin/
[root@centos7x64 autossh-1.4g]# chmod +x /usr/bin/autossh

AutoSSH官网:https://www.harding.motd.ca/autossh/

2.3、动态端口转发(正向代理)

主机 Lenvo 建立到 jumpserver 动态端口转发,然后在 Lenvo 配置使用socks代理将连接使用SSH加密传输。

Jack@Lenvo MINGW64 ~
$ ssh -p 36102 -fND 1080 root@119.147.212.249
# 重定向下输出信息
$ ssh -p 36102 -fND 1080 root@119.147.212.249 > /dev/null 2>1&
$ curl --socks5 127.0.0.1:1080 ip.sb
119.147.212.249

这里是 Firefox 浏览器配置socks代理的截图:

37439-df6exnth77k.png

检查发现已经走 jumpserver 的公网IP去访问了。

53087-ngga0s9ht8.png

Linux SSH

暂无评论,快来抢沙发。