ssh端口转发

一、ssh总结(思维导图)

这里写图片描述

SSH端口转发
  解释
    SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。
    但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发
    ,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”
    (tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通
    道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均
    能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此
    同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许
    SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
  SSH 端口转发能够提供两大功能:
    • 加密 SSH Client 端至 SSH Server 端之间的通讯数据
    • 突破防火墙的限制完成一些之前无法建立的 TCP 连接
  应用
    选项:
      -f 后台启用
      -N 不打开远程shell,处于等待状态
      -g 启用网关功能
      -L  本地转发
      -R 远程转发
      -D  动态端口转发
      -X   X协议转发
    本地转发:
    远程转发: 
    动态端口转发:
    X 协议转发

1.端口转发——本地转发

这里写图片描述

本地转发:
  -L localport:remotehost:remotehostport sshserver
    外部为客户端,内部为服务端;必须打开防火墙的ssh端口
  示例
    sshL 9527:telnetsrv:23 -N sshsrv
    telnet 127.0.0.1 9527
  解释:
    当访问本机的9527的端口时,被加密后转发到sshsrvssh服务,再解密被转发到telnetsrv:23
  数据流向
    data  <---> localhost:9527  <---> localhost:XXXXX <---> sshsrv:22  <---> sshsrv:YYYYY  <---> telnetsrv:23

2.端口转发——远程转发

这里写图片描述

远程转发: 
  -R sshserverport:remotehost:remotehostport sshserver
    防火墙内部是客户端,外部是服务端;
    防火墙策略(可以出,不可近)不必进行更改
    ·  命令在内部的ssh主机上敲
  示例:
    sshR 9527:telnetsrv:23N sshsrvsshsrv侦听9527端口的访问,如有访问,就加密后通过ssh
  解释:
    服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
  数据流向:
    Data <---> sshsrv:9527  <---> sshsrv:22  <---> localhost:XXXXX  <---> localhost:YYYYY  <--->  telnetsrv:23

3.端口转发——动态端口转发&X协议转发

这里写图片描述
动态端口转发

动态端口转发:
  当用firefox访问internet时,本机的1080端口做为代理服务器, firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
  在本机firefox设置代理socket proxy:127.0.0.1:1080
  ssh -D 1080 root@sshserver

X协议转发

X 协议转发
  所有图形化应用程序都是X客户程序
    • 能够通过tcp/ip连接远程X服务器
    • 数据没有加密机,但是它通过ssh连接隧道安全进行
  ssh -X user@remotehost gedit
    remotehost主机上的gedit工具,将会显示在本机的X服务器上
    传输的数据将通过ssh连接加密
  注意:
    c/s和ssh的c/s相反

二、实验——本地转发

1.前提:

主机 A和B可相互通过ssh服务访问,B和C可相互通过telnet访问;但是 A 不可以访问C

2.实现方式:

A使用B当作跳板,访问C(安全访问)
    A--B 走ssh协议,在ssh协议内封装telnet协议
    B--C 走telnet协议,B替A访问

3.准备

将A的ip地址加入C的防火墙策略
 iptables  -A INPUT -s 172.17.0.116  -j   REJECT 

这里写图片描述
这里写图片描述

4.实验

开启C的telnet服务

#在Centos7上
 systemctl -l status telnet.socket 
在centos6上
    1.先开启 xinet服务
            service xinetd start
    2.再修改/etc/xinetd.d/telnet
            distable yes 改为no
    3.chkconfig telnet on

在A主机上

#访问9527 端口时:去访问172.17.16.2的23端口;通过与172.17.1.116的隧道
 ssh -L 9527:172.17.16.2:23 -fN 172.17.1.116
#访问自己的9527端口
 telnet 127.0.0.1 9527

三、实验——远程转发

前提

A ——>防火墙 | B<–> C

A 主机在防火墙外;B C在防火墙内;A不能通过22端口穿过防火墙
    防火墙关闭22端口

思路:

B访问A ,建立隧道;B作为ssh客户端,A作为ssh服务端

实验

在B主机
# 建立与172.17.0.116之间的隧道;转发172.17.0.116 的9527 到 172.17.16.2的23端口
ssh -R 9527:172.17.16.2:23  -fN 172.17.0.116
在A主机
telnet 127.0.0.1 9527

这里写图片描述
这里写图片描述

四、实验——动态转发

A不能访问C(或者其他地址例如谷歌) ;可以使用B做代理;去访问不能访问的目标
这里写图片描述
这里写图片描述

实验

在A上
#访问本机的1080时,是使用172.17.1.116做代理
ssh -D 1080 -fN 172.17.1.116  
#通过本机的socks5(1080端口) ;访问172.17.0.116
curl  --socks5 127.0.0.1 172.17.0.116

这里写图片描述

### Ollama SSH 端口转发配置指南 Ollama 是一种用于管理大型语言模型的工具,但它本身并不直接提供 SSH 功能。然而,可以通过标准的 OpenSSH 配置实现端口转发功能,并将其集成到涉及 Ollama 的工作流中。 以下是关于如何通过 SSH 进行端口转发的相关说明: #### 本地端口转发 当需要将远程服务器上的某个服务暴露给本地计算机时,可以使用以下命令设置本地端口转发: ```bash ssh -L <local_port>:<destination_host>:<destination_port> user@remote_server ``` 在此场景下,`<local_port>` 表示本地监听的端口号,`<destination_host>` 和 `<destination_port>` 则表示目标主机及其开放的服务端口[^2]。 例如,如果希望将运行在 `10.2.2.9` 上的 MySQL 数据库(默认端口为 3306)映射到本地机器上,则可执行如下命令: ```bash ssh -L 3307:10.2.2.9:3306 user@ssh_gateway ``` 这样,在本地访问 `localhost:3307` 就相当于连接到了 `10.2.2.9:3306`。 #### 远程端口转发 对于某些情况下可能需要让外部网络能够访问本机的一个特定服务的情况,可以采用远程端口转发的方式完成此操作: ```bash ssh -R <remote_port>:<source_host>:<source_port> user@remote_server ``` 这里 `<remote_port>` 定义的是远端要绑定的端口;而 `<source_host>` 及其对应的 `<source_port>` 指定源地址和服务端口[^1]。 假设有一款仅限局域网内部使用的 Web 应用程序正在 localhost 的 8080 端口上运行,那么为了让其他同事也能看到这个页面,就可以这样做: ```bash ssh -R 8081:127.0.0.1:8080 colleague@example.com ``` 此时任何向 `colleague.example.com:8081` 发起请求的操作都会被重定向至发起者的个人电脑并返回相应数据。 #### 多节点环境下的无密码 SSH 设置 在一个多节点环境中,为了简化跨节点间通信流程以及提高效率,通常建议预先建立好免密登录机制以便后续自动化脚本调用更加顺畅[^3]。具体做法包括但不限于交换公钥文件等内容。 首先确认当前用户的 .ssh 文件夹是否存在 id_rsa.pub 类型的公开密钥材料,如果没有则先创建一对新的 RSA 密码对儿: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 接着把生成出来的 public key 添加进每一个目标设备中的 authorized_keys 文档里头去: ```bash cat ~/.ssh/id_rsa.pub | ssh user@target_node 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys' ``` 最后测试一下能否成功达成无需输入额外验证信息即可顺利完成整个链接过程的效果: ```bash ssh target_node ``` 如果一切正常的话应该可以直接跳转过去而不必再手动填写账号密码之类的信息了。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值