0%

SSH隧道

通过使用SSH连接来建立的通道,它被称之为SSH隧道。

本地SSH隧道

1
2
ssh -N -f -L 8080:234.234.234.234:80 123.123.123.123    # 通过SSH服务器(123.123.123.123)将远程机器(234.234.234.234)的80端口映射到本地8080端口
curl -i http://localhost:8080 # 访问本地8080端口相当于访问远程机器(234.234.234.234)的80端口

参数介绍:

  • -N: 不执行远程指令
  • -f: 后台执行ssh指令
  • -L: 做本地端口转发,冒号(:)分隔的三个参数分别是
    • 本地端口号
    • 目标机器IP地址
    • 目标机器端口号
  • 最后一个参数是远程SSH服务器地址

远程SSH隧道

1
2
3
ssh -N -f -C -R 8080:234.234.234.234:80 123.123.123.123      # 将本地的80端口映射到远程服务器(123.123.123.123)的8080端口
# 切换到机器123.123.123.123上
curl -i http://127.0.0.1:8080 # 访问127.0.0.1的8080端口相当于访问机器234.234.234.234的80端口

参数介绍:

  • -N: 不执行远程指令
  • -f: 后台执行ssh指令
  • -C: 压缩请求数据
  • -R: 做远程端口转发,冒号(:)分隔的三个参数分别是:
    • 目标机器端口号
    • 需要映射内部机器的IP地址
    • 本地端口号
  • 最后一个参数是远程SSH服务器地址

Socks代理

1
ssh -qtfnNC -D 0.0.0.0:7070 123.123.123.123  # 通过123.123.123.123建立socks代理,并绑定到0.0.0.0的7070端口上

参数介绍:

  • -q: 静默模式
  • -t: 为远程系统上的ssh进程分配一个伪tty(终端)
  • -f: 后台执行ssh指令
  • -n: 将标准输出重定向到/dev/null
  • -N: 不执行远程指令
  • -C: 压缩请求数据
  • -D: 绑定地址

注意

  • 如果经常发现过一段时间SSH连接自动断开,可能原因是SSH客户端的TCPKeepAlive被关闭了,可以使用参数-o TCPKeepAlive=yes来开启。
  • 自动检查连接,-o ServerAliveInterval=30,表示每30s检查一次连接, -o ServerAliveCountMax=3表示服务器没有响应次数达到3次,则断开连接。