关于ssh隧道的个人笔记

ssh隧道可以分为3种:本地ssh隧道(-L)、远程ssh隧道(-R)和动态ssh隧道(-D)

本地ssh隧道的格式示例:

ssh -i ~/.ssh/remoteuser.pem -L 起点端口:终点地址:端口 remoteuser@remotehost.com

远程ssh隧道的格式示例:

ssh -i ~/.ssh/remoteuser.pem -R 起点端口:终点地址:端口 remoteuser@remotehost.com

动态ssh隧道的格式示例:

ssh -i ~/.ssh/remoteuser.pem -D 1080(本地端口) remoteuser@remotehost.com

本地与远程ssh隧道的格式除了第二位参数外并无不同,但其内在逻辑完全不同:

本地:本机通过本地ssh客户端监听本机的起点端口,并把通过此端口的数据转发给远程主机,远程主机最后代为连接终点地址:终点端口

远程:本机命令远程主机(targetdomain.com)监听远程主机网络中的起点端口,并将通过此端口的数据拦截转发到终点地址:终点端口

  • 可见,区别在于数据的初始入口:
    • 本地隧道中,数据入口在本地端口,出口给远程主机
    • 远程隧道中,数据入口在远程主机的端口,出口给任意目标主机
    • 两种命令都在本地主机执行发起。

    无论是本地隧道或是远程隧道,都只解决了一对一的端口关系。动态隧道则在本地端口上开启了一个socks5代理,通过此代理即🉑访问目标主机网络的任意服务,如:

    curl --socks5-hostname localhost:1080 http://127.0.0.1:8001

    即通过本地1080端口上的代理访问了远程主机环境下位于127.0.0.1:8001上的web服务。

    上一篇