SSH端口转发

实验环境:
三台centos主机
一、实现本地端口转发转发
在这里插入图片描述
1、在telnet服务器主机上安装telnet服务,并启动

[root@centos7 ~]# yum install telnet-server -y 
[root@centos7 ~]# systemctl start telnet.socket
[root@centos7 ~]# ss -ntl | grep 23
LISTEN     0      128         :::23                      :::* 

2、在本地主机上使用ssh服务输入如下命令。
ssh -L localport:remotehost:remotehostport sshserver
localport:本地没有使用的端口
remotehost:要连接的远程主机
remotehostport:远程主机的端口
sshserver:中间的ssh服务器
示例:通过ssh隧道连接远程的telnet服务器。
在本地客户端上

[root@centos7 ~]# ssh -L 9527:192.168.239.130:23  192.168.239.129
Last login: Sun Oct 27 22:52:11 2019 from 192.168.239.128
[root@centos6 ~]#      //这时已经连接上了ssh服务器

这时开启一个新窗口,然后telnet 127.0.0.1 9527就可以连接远程的telnet服务器了。

[root@centos7 ~]# telnet 127.0.0.1 9527
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

Kernel 3.10.0-693.el7.x86_64 on an x86_64
centos7 login: cwj  
Password: 
Last login: Sun Oct 27 22:53:00 from ::ffff:192.168.239.128
[cwj@centos7 ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.239.130  netmask 255.255.255.0  broadcast 192.168.239.255
        inet6 fe80::20c:29ff:fe65:a88f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:65:a8:8f  txqueuelen 1000  (Ethernet)
        RX packets 4375  bytes 1399426 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1378  bytes 162975 (159.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

实现原理:当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23,此时中间的sshsrv即充当了ssh服务器,又充当了telnet的客户端。

二、实现远程端口转发
在这里插入图片描述
-R sshserverport:remotehost:remotehostport sshserver
示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
1、在内网的主机上,此时这里的sshsrv是外部的主机。

[root@centos6 ~]# ssh -R 9527:192.168.239.130:23  192.168.239.128
Last login: Sun Oct 27 22:56:40 2019 from 192.168.239.1
[root@centos7 ~]# 

2、在外部的主机上telnet 127.0.0.1 9527。

[root@centos7 ~]# telnet 127.0.0.1 9527
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

Kernel 3.10.0-693.el7.x86_64 on an x86_64
centos7 login: cwj
Password: 
Last login: Sun Oct 27 23:02:32 from ::ffff:192.168.239.129
[cwj@centos7 ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.239.130  netmask 255.255.255.0  broadcast 192.168.239.255
        inet6 fe80::20c:29ff:fe65:a88f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:65:a8:8f  txqueuelen 1000  (Ethernet)
        RX packets 4469  bytes 1406096 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1454  bytes 171439 (167.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

实现原理:让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
三、实现动态端口转发。
当使用firefox浏览器访问访问外部网络时时,就使用本机的1514端口做为代理,把firefox浏览器的访问请求转发到sshserver上,由sshserver替之访问。
在这里插入图片描述
1、在192.168.239.147主机模拟Google网址。

[root@centos7 ~]# yum info httpd
[root@centos7 ~]# cd /var/www/html/
[root@centos7 html]# echo www.google.com > index.html
[root@centos7 html]# cat index.html 
www.google.com
[root@centos7 html]# systemctl start httpd

先使用iptables规则拒绝客户端主机的访问

[root@centos7 httpd]# iptables -A INPUT -s 192.168.239.128 -j REJECT
[root@centos7 httpd]# iptables -vnL
Chain INPUT (policy ACCEPT 53 packets, 4268 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       192.168.239.128      0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 42 packets, 4536 bytes)
 pkts bytes target     prot opt in     out     source               destination         

这样客户端就无法直接访问了。

[root@centos7 ~]# curl 192.168.239.130
curl: (7) Failed connect to 192.168.239.130:80; 拒绝连接

2、在客户端192.168.239.128主机上。
ssh -D 1514 root@sshserver

[root@centos7 ~]# ssh -D 1514 root@192.168.239.129
Last login: Thu Oct 31 22:10:30 2019 from 192.168.239.1
[root@centos6 ~]# ss -nt
State       Recv-Q Send-Q                                                             Local Address:Port                                                               Peer Address:Port 
ESTAB       0      0                                                                192.168.239.129:22                                                                192.168.239.1:50440 
ESTAB       0      0                                                                192.168.239.129:22                                                              192.168.239.128:44624 

然后打开Firefox浏览器,设置代理socket proxy:127.0.0.1:1514。
在这里插入图片描述

3、访问
用浏览器访问
在这里插入图片描述
命令行方式,这时得新开启一个会话

[root@centos7 ~]# curl --socks5 127.0.0.1:1514 192.168.239.130
www.google.com

同时在后端的130主机上可以看到连接情况,是中间的ssh server从当代理客户端访问的。

[root@centos7 httpd]# ss -nt
State       Recv-Q Send-Q                                                Local Address:Port                                                               Peer Address:Port              
ESTAB       0      52                                                  192.168.239.130:22                                                                192.168.239.1:50441              
ESTAB       0      0                                            ::ffff:192.168.239.130:80                                                       ::ffff:192.168.239.129:55894      
### 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、付费专栏及课程。

余额充值