用ssh反向隧道访问对方可上网机器的sshd
Windows和Linux桌面下可以用TeamViewer穿过防火墙来访问远端内网机器。但是linux server没有桌面,怎么连接到远端内网机器呢。
假定公司有个具有外网IP地址的linux server,不管放置在哪里(公司内部NAT也好,外面机房也好),自己肯定有权限可以从公司用ssh连接到这台机器,假定它为Middle,地址为113.105.93.100。
假定自己的电脑在自己公司可以ssh到Middle上面去,在公司内部地址为10.24.1.10。意思就是Middle完全由自己控制。
假定自己在外面别的地方出差,对方有台linux server服务器,是在对方的内网,可以连接上网,但是没有外网IP,假定它为Destination。
问题:如果我回到自己公司,我怎么才能用ssh连接到对方内网的那台名为Destination的linux server呢?
解决:
1. 做一个准备,在Middle机器上修改/etc/ssh/sshd_config文件。
这里的意思是让它的sshd服务器在做网关时用0.0.0.0监听端口,而不是127.0.0.1来监听端口。
# sed -i “s/#GatewayPorts no/GatewayPorts yes/” /etc/ssh/sshd_config
# service sshd restart
2. 出差时就在Destination机器上执行:
# /usr/bin/ssh -CNfg -R 10002:localhost:22 ht@113.105.93.100(Middle)
我们lab的两台机器:211.162.72.93,211.162.72.90,都有ht用户,如果用1024以下的端口则必须用root用户。
ht为Midlle机器的用户,输入口令即可,是作为一个进程在运行。最好是做一个无须密码登录的操作,然后把上面的这条命令放在rc.local文件中,这样每次启动都可以自动建立。
意思是在Middle上建立一个监听端口10002,等待公司内网用户来连接,连接来了之后会端口前转到Destination机器的22端口(即sshd)。
在Middle上用:
# netstat -apn|grep 10002 可以看到这个端口已经启用,并在监听。
tcp 0 0 :::10002 :::* LISTEN 13902/sshd: ht
如果第一步不做的话,这里显示的是:
tcp 0 0 127.0.0.1:10002 :::* LISTEN 13902/sshd: ht
tcp 0 0 ::1:10002 :::* LISTEN 13902/sshd: ht
3. 回到公司用自己的机器ssh到对方机器:
# ssh root@113.105.93.100(Middle) -p 10002
用secureCrt也可以的。
这里的root为Destination机器的用户。
这里的意思是ssh连接到Middle机器的10002端口,也就是用root用户ssh连接到Destnation机器的22端口。
4. 如果对方想连接到我们自己的电脑,则第二步就变成在我们自己电脑上执行了。