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

相关文章

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

使用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服务器