一条ssh命令实现端口转发,实现跨机器直接访问

一条ssh命令实现端口转发,实现跨机器直接访问


#功能场景:192.168.100.12和192.168.100.11在内网可以连接,但是只有12这台机器有另外一个网口配置了外网可访问的地址,外网不能直接访问11这台机器。

#那么,平时的做法是外网连接12机器,然后通过12这个跳板访问11;ssh连接的方式。
#问题来了:我客户端要直接访问11的数据库或者网页,肿么办?

#SSH隧道端口端口转发帮助你,只要一条命令搞定。

#具体需求,192.168.100.11:7180是CM的管理页面,外部无法访问,通过12这台机器的外网网口转发。

#本机192.168.100.12监听来自对本机全部网口6180端口发起连接的请求,然后把数据全部转发到192.168.100.11的7180端口去


ssh -C -f -N -g -L 6180:192.168.100.11:7180 [email protected]
#6180:192.168.100.11:7180 意义--本机监听端口:远端主机:远端端口
#[email protected] 建立隧道需要对端SSH用户名和密码

########### 网页连接前
12:
netstat -an |grep 6180
#####
[root@snn ~]# ssh -C -f -N -g -L 6180:192.168.100.11:7180 [email protected]
[email protected]'s password:
[root@snn ~]# netstat -an |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN
tcp        0      0 :::6180                     :::*                        LISTEN
[root@snn ~]#
#以上会发现,12这台机器起了6180端口,侦听外面发起的连接请求
#那么在其他机器发起对6180连接后,可以看到会话建立了。
###########
11:
netstat -an |grep 7180
#####
[root@master ~]# netstat -an |grep 7180
tcp        0      0 0.0.0.0:7180                0.0.0.0:*                   LISTEN
[root@master ~]#

插图:

#(实验环境没有跨网段,实际情况,第三方机器访问的不是192.168.100.11那个IP,而是其他网口IP,侦听端口对即可)

一条ssh命令实现端口转发,实现跨机器直接访问_第1张图片


#实际上,浏览器中地址栏显示是12的6180端口,但是内容实质是11那边开启的7180服务。

插图:
一条ssh命令实现端口转发,实现跨机器直接访问_第2张图片
########### 网页连接后
12:
netstat -an |grep 6180
#####
[root@snn opt]# netstat -an |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN
tcp        0      5 192.168.100.12:6180         192.168.100.1:49330         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49332         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49331         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49345         ESTABLISHED
tcp        0      0 192.168.100.12:6180         192.168.100.1:49334         ESTABLISHED
tcp        0      0 :::6180                     :::*                        LISTEN
[root@snn opt]#

wireshark抓包:12上抓eth0的包
tcpdump -i eth0 host 192.168.100.11 -w /opt/6180.cap


################## 用完,直接停掉进程即可。

[root@snn opt]# netstat -an |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN
tcp        0      0 :::6180                     :::*                        LISTEN
[root@snn opt]# netstat -tlnp |grep 6180
tcp        0      0 0.0.0.0:6180                0.0.0.0:*                   LISTEN     4642/ssh
tcp        0      0 :::6180                     :::*                        LISTEN      4642/ssh
[root@snn opt]# ps -f 4642
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root      4642     1  0 16:05 ?        Ss     0:00 ssh -C -f -N -g -L 6180:192.168.100.11:7180 [email protected]
[root@snn opt]# kill -9 4642
[root@snn opt]# netstat -tlnp |grep 6180
[root@snn opt]# netstat -tlnp |grep 6180
[root@snn opt]#

################################

问题:有些机器SSH设置不允许端口转发,需要设置
vi /etc/ssh/sshd_config
gatewayports yes

参考:
http://blog.csdn.net/ghosttzs/article/details/7572159
如果ssh端口转发时候-g没有效果解决方案

http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
实战 SSH 端口转发

其他的远端转发,用于私网和公网建立隧道,反向访问私网的一个手段,暂时没有用得上。至于*翻*墙*的socket转发,呵呵。


你可能感兴趣的:(SSH)