ssh端口转发(或称ssh遂道)

2023-10-13 01:30
文章标签 转发 端口 ssh 或称

本文主要是介绍ssh端口转发(或称ssh遂道),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 释义
    • 分类
    • 相关术语
    • 本地转发
    • 远程转发
    • 动态转发
    • 总结
    • 参考

释义


SSH tunneling is a method of transporting arbitrary networking data over an encrypted SSH connection. It can be used to add encryption to legacy applications. It can also be used to implement VPNs (Virtual Private Networks) and access intranet services across firewalls.
SSH is a standard for secure remote logins and file transfers over untrusted networks. It also provides a way to secure the data traffic of any given application using port forwarding, basically tunneling any TCP/IP port over SSH. This means that the application data traffic is directed to flow inside an encrypted SSH connection so that it cannot be eavesdropped or intercepted while it is in transit. SSH tunneling enables adding network security to legacy applications that do not natively support encryption.

SSH隧道是一种通过加密的SSH连接传输任意网络数据的方法。它可为应用程序提供加密传输服务,它还可用于实现VPN(虚拟专用网络)和跨防火墙访问Intranet。

SSH隧道的功能简单来说就是两点:

  • 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  • 提供任意TCP/IP port,本地套接字,X11连接的转发服务, 突破一些网络限制。

ssh tun

分类


  • 本地转发
  • 远程转发
  • 动态转发
  • X 协议转发

相关术语


  • SSH ClientSSH server
    ssh client: 发起ssh连接请求的一方 (简言之)
    ssh server:接收ssh连接请求的一方(简言之)

  • socketip:port
    socket := ip:port:= 表示定义),说明man里的两者是同一意思
    以下统一使用ip:port的方式,remote和local不要被其表面字义迷惑,不然后面不容易理解,用host:hostport代替,用之指代任何套接字)

  • 以下示例用到的符号说明

符号说明
A_IP表示ip为192.168.1.2
B_IP表示ip为192.168.2.7
C_IP表示ip为192.168.2.8
A->B表示从A可以发起与B的ssh连接,反之不能
A<->B表示AB可互通数据

本地转发


  • 命令格式

         ssh -L [bind_address:]localport:host:hostport  [user@]sshserver
    
  • 说明

    Local forwarding is used to forward a port from the client machine to the server machine. Basically, the SSH client listens for connections on a configured port, and when it receives a connection, it tunnels the connection to an SSH server. The server connects to a configurated destination port, possibly on a different machine than the SSH server.

    本地的ssh-client将从localport收到的数据通过ssh遂道发给sshserver 上的ssh-server,ssh-server再将数据转交给host:hostport,数据反之亦可,从而实现了从localport到host:hostport到数据传输

  • 注意事项

    • host的ip可以与sshserver相同,也可以是其它能与ssh server联通的ip
    • host如果是localhost,指的是sshserver端的127.0.0.1哦,可不是本机的
    • bind address省略则监听本地所有网络口,端口0-1023需要root权限
    • option -g:另一台可与本机通信的机器也可使用本机的port转发
  • 场景示例

    • 条件:A->B && B<->C
    • 目标:要实现A访问C的VNC端口(5900)
    • 方法: 可在本地A执行下面这条命令开起ssh转发端口(a与b开启ssh tunnel),即可从A的5901端口访问C的VNC服务
    root#A:ssh -L 5901:C_IP:5900 root@B_IP`
    root#A:open vnc://localhost:5901
    

远程转发


  • 命令格式

         ssh -R [bind_address:]remoteport:host:hostport  [user@]sshserver
    
  • 说明

    Specifies that connections to the given TCP port or Unix socket on the remote (server) host are to be forwarded to the local side.

    在远程sshserver上的ssh-server从remoteport处接到有数据后,通过ssh遂道发到本地的ssh-client,后再由其转发给host:hostport,上边的local side就是指host:hostport,同样数据反之亦可。

  • 场景示例

    • 条件:A<-B && B<->C;
    • 目标:同上节,要实现A访问C的VNC端口(5900)
    • 方法: 现在由于A无法与B建立ssh,只能从B发起ssh请求,所以在远程B上执行如下操作,建立起AB之间的ssh tunnel.
      此时A端的ssh-server收到从A的5901处发来的数据,将之发给C的5900,然后C在回复A,建立起vnc连接
    root#B:ssh -R 5901:C_IP:5900 root@A_IP`
    root#A:open vnc://localhost:5901
    

动态转发


  • 命令格式
    	ssh -D <local port> [user@]sshserver
    
  • 说明
    所谓的动态转发就是sshserver端负责将数据交给合适的端口,ssh还负责SOCKS服务

总结


本地与远程的区别:
如果你从A执行数据传输的服务到B或其它处,同时可从A发起ssh连接请求,那就是本地转发了,如果A是做为ssh接收端,那就是远程转发。

首先,SSH 端口转发自然需要 SSH 连接,而 SSH 连接是有方向的,从 SSH Client 到 SSH Server 。而我们的应用也是有方向的,比如需要连接 LDAP Server 时,LDAP Server 自然就是 Server 端,我们应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。如果这两个连接的方向一致,那我们就说它是本地转发。而如果两个方向不一致,我们就说它是远程转发

最后一问:翻墙,代理, 你懂了吗?

参考

  • ssh tunnel
  • 实战 SSH 端口转发

这篇关于ssh端口转发(或称ssh遂道)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/199816

相关文章

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

在SSH的基础上使用jquery.uploadify.js上传文件

在SSH框架的基础上,使用jquery.uploadify.js实现文件的上传,之前搞了好几天,都上传不了, 在Action那边File接收到的总是为null, 为了这个还上网搜了好多相关的信息,但都不行,最后还是搜到一篇文章帮助到我了,希望能帮助到为之困扰的人。 jsp页面的关键代码: <link rel="stylesheet" type="text/css" href="${page

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

SSH连接虚拟机中的Ubuntu 12.0.4

摘要:主要是解决不能使用ssh远程Ubuntu的问题、使用的远程工具是putty、也可以使用xshell、ubunut12.0.4是装在虚拟机中的、不过这个应该没有什么影响。 一:问题的出现 前两天使用VMware装了一个ubuntu12.0.4之后、因为常常使用命令行、又喜欢在虚拟机与实体机中切来切去、感觉很不方便、就想在xp中远程ubuntu、遇到了点小意外、经过一会调试解决成功、把