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

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

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