ssh建立socks代理原理浅析

直入正题,先来一条命令:

ssh -N -D 9000 -f root@host.com

属性解释一下:

-D


这个属性很神奇,关键的那句话是“and the application protocol is then used to determine where to connect to from the remote machine”,翻译为”接下来应用程序协议就会决定去连哪”,应用程序协议指的是TCP/UDP。

它不仅仅是简单端口转发,当数据到达服务器端的这个端口后,ssh会尝试解析这个请求,并进行TCP或者UDP请求(当然也就包括http请求),将得来的结果从这个端口再回发到客户端。

9000

代表指定本地的socks代理端口。

root@host.com

这是ssh标准常用命令~ 指定socks服务器在哪,但这不代表监听就一定开在服务器,这取决于这条命令在哪执行。

-N


这是个辅助属性,一般ssh连好以后就进入shell,可以让你打命令了,我只要做端口转发,所以我不需要执行命令。

-f


这同样是个辅助属性,如果没有它,只有-D和-N,那么这个进程会在前台运行,阻塞后续操作,现象就是一个光标不停地在闪。用了它当前ssh进程就进后台运行了。

总结:

如果在服务器上执行这条命令,譬如 ssh -N -D 9000 -f root@localhost,那么服务器就开好socks监听端口了。

那么这个端口转发可以被其他机器使用么?比如通过其他客户端来直接连接 服务器 的 9000 端口?答案是不行的,在主流 SSH 实现中,本地端口转发绑定的是 lookback 接口,这意味着只有 localhost 或者 127.0.0.1 才能使用本机的端口转发 , 其他机器发起的连接只会得到“ connection refused. ”。好在 SSH 同时提供了 GatewayPorts 关键字,我们可以通过指定它与其他机器共享这个本地端口转发。

ssh-g  -N -D 9000 -f root@host.com

如果在客户机上执行,远程连root@remotehost,那么相当于在本地开了一个socks代理监听,socks服务器就是本机,但通过remotehost来处理请求。

网上有很多翻墙教程说要一个myentunnel通过ssh实现本地socks代理,其实如果你自己有ssh的vps,执行命令的权限,直接在远程主机上执行就开好socks代理了,那么这软件也不用运行了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值