SSH完整命令行参数
-D 绑定一个地址和端口
-p 指定ssh连接的端口
-L [bind_address:]port:host:hostport] 指定本地端口和远程服务器的端口,将本地端口上的数据,发送到指定的远程端口上
-R [bind_address:]port:host:hostport] 指定本地端口和远程端口,将远程端口上接收的数据发送到指定的本地端口上
-f 要求SSH连接以后就放到后台工作,不会在屏幕上显示。在建立SSH隧道的时候很有用。
-N 不执行远程命令,在配置端口转发的时候很有用
如果SSH在连接的时候,指定了本地端口,SSH连接以后就建立了一个SOCKS5代理,使用代理,把数据转发到本地指定的端口,数据就可以发送到远程服务器上去了。这一点,真的挺强大的。
SSH远不止远程管理这么简单。各种复杂的选项,可以实现很多很多功能。比如下面的几个,是我刚学会的。
ssh -f -N -R 22222:localhost:22 141.16.40.170 -l oracle
建立一个映射或者端口转发,打开22222端口,监听从141.16.40.170发送过来的数据,转发到22端口上。
ssh -f -N -D 192.168.101.165:7080 bea@127.0.0.1 -p 22222
建立一个映射或者端口转发,绑定本地的7080端口,并把数据转发到22222端口
ssh -L 8000:192.168.101.165:7080 root@218.2.135.1 -p 50001
指定本地端口为8000,先登录218.2.135.1,连接端口为50001,在通过已经连接的218.2.135.1,去连接内网的192.168.101.165,端口是7080
这样的组合,就建立了一个SSH隧道,突破信息系统的层层防御,这次测试中,我们突破了三个安全域。最后一个,按照一开始的建设要求,应该是和外网做物理隔离的,但是网管为了方便,在几个安全域之间做了端口映射。
另外是最近找到的几个工具,我还花钱买了的……
Proxifier
算是图形界面版的proxychains,Mac下安装proxychains出了点问题,我没去深究。
因为我建立了socks5代理以后,浏览器和少部分工具可以通过SOCKS5去对内网进行测试,但是很多工具依然不行。比如,Oracle Developer
而且,有的工具支持设定代理,但也不是所有都可以。总之很烦就是了。
SSH隧道建立以后,用Proxifier来做全局代理,整个系统的流量就都被接管了。这样也不是舒服,但是Proxifier允许用户自己制定策略,哪些应用的数据被代理,访问哪些网站的时候不代理,比较人性化。而且,可以制定多条代理策略,需要的时候按需开启就是了。
相比来说,这个工具减少了很大的工作量。
另外是SSH Proxy和SSH Tunnel
实际上,就是简化了复杂的SSH命令行工作而已一次配置好,之后就只要点点鼠标就好了。