zoukankan      html  css  js  c++  java
  • ssh tunnel

    ssh tunnel

    相关概念
    ssh 一种对数据进行加密安全传输的协议
    ssh tunnel ssh隧道,通过ssh连接建立起来的一条加密安全通道
    ssh port forwarding ssh端口转发,通过ssh隧道把tcp连接转发出去
    相关参数
    参数 说明
    C 压缩数据传输
    g 允许远程主机连接到转发的端口,只对本地转发有效
    f 认证成功后,后台运行
    N 不执行脚本或命令,通常和f连用
    o 指定配置选项
    L 本地转发或正向转发
    R 远程转发或反向转发
    D 动态转发
    本地转发
    把本地主机的本地端口转发到远程主机的远程端口上
    工作原理:本地主机分配一个socket侦听本地端口,一旦该本地端口有了连接,该连接就通过加密安全通道转发出去,同时和远程主机的远程端口建立起了连接。
    X:Y:Z  把本地主机的X端口通过ssh隧道映射到远程Y主机的Z端口上
    远程转发
    把远程主机的远程端口转发到本地主机的本地端口上
    工作原理:远程主机分配一个socket侦听远程端口,一旦该远程端口有了连接,该连接就通过加密安全通道转发过来,同时和本地主机的本地端口建立起了连接。
    X:Y:Z  把远程主机的X端口通过ssh隧道映射到本地Y主机的Z端口上
    动态转发
    一个本地动态的应用程序级端口转发,可以充当socks代理服务器,支持socks协议(socks5和socks4)
    工作原理:本地主机分配一个socket侦听本地端口,一旦该本地端口有了连接,该连接就通过加密安全通道转发出去,根据应用程序的协议决定连接去向。
    使用技巧
    自动重连
    隧道会因某些原因被断开,如主机重启、断网、长时间没有通讯而被路由器切断等等,因此需要依赖外界某种机制使隧道重新连接。
    注意:要避免隧道重新连接时的认证交互,以防ssh程序被卡死。
    保持长连接
    有些路由器会把长时间没有通讯的连接断开,ssh客户端的TCPKeepAlive选项可以避免该问题。
    隧道状态检查
    隧道会因某些原因通信不畅而卡死,如传输数据量太大被路由器带入stalled状态等等,这时ssh程序并不终止退出,因此需要依赖某种机制使隧道断开。
    隧道状态检查可以通过ssh客户端心跳或ssh服务端心跳来判别:
    ssh客户端心跳 通过ServerAliveInterval和ServerAliveCountMax选项来实现,ssh客户端会在隧道无通讯后的ServerAliveInterval时间后发送一个请求给服务器要求服务器响应,服务器在ServerAliveCountMax次请求后都没能响应,ssh客户端就断开连接并退出。
    ssh服务端心跳 通过ClientAliveInterval和ClientAliveCountMax选项来实现,ssh服务端会在隧道无通讯后的ClientAliveInterval时间后发送一个请求给客户端要求客户端响应,客户端在ClientAliveCountMax次请求后都没能响应,ssh服务端就断开连接并退出。
    端口地址绑定
    隧道端口对应主机的绑定规则:在没有明确指定绑定主机的情况下,这时候取决于参数g和GatewayPorts选项,有参数g或GatewayPorts=yes的情况绑定到0.0.0.0,否则绑定到127.0.0.1。
    建议:要明确指定绑定主机。
    通常使用
    # 本地转发
    ssh -CfN -o TCPKeepAlive=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 -L listenHost:listenPort:remoteHost:remotePort sshServer

    # 远程转发
    ssh -CfN -o TCPKeepAlive=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 -R listenHost:listenPort:localHost:localPort sshServer

    # 动态转发
    ssh -CfN -o TCPKeepAlive=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=3 -D sshServer

  • 相关阅读:
    HttpRunner接口自动化测试框架
    使用Appium 测试微信小程序和微信公众号方法
    WiFi无线连接真机进行Appium自动化测试方法
    idea tomcat 乱码问题的解决及相关设置
    解决idea导入maven项目缺少jar包的问题
    Docker php安装扩展步骤详解
    Python之No module named setuptools 安装pip
    MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容
    Nginx如何来配置隐藏入口文件index.php(代码)
    vueThink框架搭建与填坑(new)
  • 原文地址:https://www.cnblogs.com/laverne/p/12674765.html
Copyright © 2011-2022 走看看