一条ssh命令实现端口转发,实现跨机器直接访问
http://blog.****.net/oufuji/article/details/50358756
一条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
#####
[[email protected] ~]# ssh -C -f -N -g -L 6180:192.168.100.11:7180 [email protected]
[email protected]'s password:
[[email protected] ~]# netstat -an |grep 6180
tcp 0 0 0.0.0.0:6180 0.0.0.0:* LISTEN
tcp 0 0 :::6180 :::* LISTEN
[[email protected] ~]#
#以上会发现,12这台机器起了6180端口,侦听外面发起的连接请求
#那么在其他机器发起对6180连接后,可以看到会话建立了。
###########
11:
netstat -an |grep 7180
#####
[[email protected] ~]# netstat -an |grep 7180
tcp 0 0 0.0.0.0:7180 0.0.0.0:* LISTEN
[[email protected] ~]#
插图:
#(实验环境没有跨网段,实际情况,第三方机器访问的不是192.168.100.11那个IP,而是其他网口IP,侦听端口对即可)
#实际上,浏览器中地址栏显示是12的6180端口,但是内容实质是11那边开启的7180服务。
插图:########### 网页连接后
12:
netstat -an |grep 6180
#####
[[email protected] 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
[[email protected] opt]#
wireshark抓包:12上抓eth0的包
tcpdump -i eth0 host 192.168.100.11 -w /opt/6180.cap
################## 用完,直接停掉进程即可。
[[email protected] opt]# netstat -an |grep 6180
tcp 0 0 0.0.0.0:6180 0.0.0.0:* LISTEN
tcp 0 0 :::6180 :::* LISTEN
[[email protected] 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
[[email protected] 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 Hadoop@192.168.100.11
[[email protected] opt]# kill -9 4642
[[email protected] opt]# netstat -tlnp |grep 6180
[[email protected] opt]# netstat -tlnp |grep 6180
[[email protected] opt]#
################################
问题:有些机器SSH设置不允许端口转发,需要设置vi /etc/ssh/sshd_config
gatewayports yes
参考:
http://blog.****.net/ghosttzs/article/details/7572159
如果ssh端口转发时候-g没有效果解决方案
http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
实战 SSH 端口转发
其他的远端转发,用于私网和公网建立隧道,反向访问私网的一个手段,暂时没有用得上。至于*翻*墙*的socket转发,呵呵。