ssh 反向隧道访问内网机器

有时候我们需要从公网访问内网的机器。现在一般家里都会有个路由器,路由器一般都会带防火墙,所以从墙外要访问内部的机器,,都需要设置防火墙,做端口映射。

今天我看到ssh有一个有趣的功能,可以在不设置端口影射的情况下直接建立一个隧道,允许从外部访问内网的机器。

假设我们有两台机器,一台在内网中,IP是192.168.1.2,命名为dest;另一台在公网上,地址是pub.server.net,命名为src。我们需要从pub.server.net去访问内网那台192.168.1.2.

一、从dest发起ssh连接到pub.server.net,建立一个反向隧道

ssh -R 19999:localhost:22 user@pub.server.net

二、从src发起ssh连接

ssh localhost -p 19999

因为之前dest到src的ssh反向隧道建立之后,src上的本地19999端口就被转发到dest的22端口了,所以上面这个ssh命令就建立了从src到dest:22的连接。

其中第一步可以加上-fN参数,这样就可以把ssh进程放到后台运行,且无需打开服务器端的shell。

本文参考:

示例脚本:

自动开启反向脚本

]<server ipaddr> <passwd> <src_port>”DECT_IPADDR=localhostDECT_POAT=22SRC_IPADDR=$1SRC_USER=ginoSRC_PASSWD=$2SRC_PORT=$3/usr/bin/expect -c “set timeout 10spawn ssh -fN -R $SRC_PORT:$DECT_IPADDR:$DECT_POAT $SRC_USER@$SRC_IPADDRexpect {\”*(yes/no)\” {send \”yes\r\”; exp_continue}\”*password\” {send \”$SRC_PASSWD\r\”;exp_continue}\”*\$ \” {send \”bash\r\”; interact}}”

自动连接映射好的机器脚本

#!/bin/bash]<ipaddr> <passwd> <src_port>”SERVER_IPADDR=$1SERVER_USER=ginoSERVER_PASSWD=$2SRC_PORT=$3/usr/bin/expect -c “set timeout 10spawn ssh $SERVER_USER@$SERVER_IPADDRexpect {\”*(yes/no)\” {send \”yes\r\”; exp_continue}\”*password\” {send \”$SERVER_PASSWD\r\”;exp_continue}\”*\$ \” {send \”bash\r ssh localhost -p $SRC_PORT\r\”; interact}}”

为了一些琐事吵架,然后冷战,疯狂思念对方,最后和好。

ssh 反向隧道访问内网机器

相关文章:

你感兴趣的文章:

标签云: