我是靠谱客的博主 雪白店员,最近开发中收集的这篇文章主要介绍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遂道)的全部内容,希望文章能够帮你解决ssh端口转发(或称ssh遂道)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部