SSH 反向端口转发-R

近期和同学聊到了他遇到的一个问题:

本地机器A,远程开发机C机器A需要通过ssh连接开发机C进行开发,ssh直连不通,SCP传输文件的话就比较费劲,需要通过跳板机B,经过跳板机这一步骤可用,但没那么方便,是不是有什么办法可以绕过跳板机

SSH的反向端口转发可以实现

ssh(1) - Linux man page,有一个R参数

-R

bind_address:\]port:host:hostport Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side. This works by allocating a socket to listen to port on the remote side, and whenever a connection is made to this port, the connection is forwarded over the secure channel, and a connection is made to host port hostport from the local machine

下面这句话的意思是,指定远程主机的某个端口,让其监听的数据转发到本地指定的主机和端口

Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

整个过程如下:

  1. C执行ssh -R,建立一条到Assh隧道;
  2. A起socket,监听本地端口,等待连接;
  3. A本地端口监听到数据,将数据通过ssh隧道转发到C

C执行如下命令:

bash 复制代码
ssh -R 2022:localhost:22 -Nf [email protected]

对应参数的解释:

  • 2022remote-port,A主机下端口,也就是A下socket需要监听的端口;
  • localhost:22local-host:local-port,C主机下IP和端口。由于命令是从C发起,这里即为localhost:22,这里是A端口转发的目的地
  • [email protected]user@remote-host,A用户和IP
  • -Nf:使其使用后台模式运行

C机器配置完成后,此时在A机器执行ssh,通过-p指定端口

bash 复制代码
[root@localhost opt]# ssh -p 2022 root@localhost
root@localhost's password:
Last login: Sun Nov 24 18:27:26 2024 from ::1

此时可以顺利登录C机器

A机器继续测试scp,需要使用大写字母P指定端口

bash 复制代码
[root@localhost opt]# touch test.md
[root@localhost opt]# scp -P 2022 test.md root@localhost:/opt
root@localhost's password:
test.md                                                                           100%    0     0.0KB/s   00:00
[root@localhost opt]#

C机器查看,也成功获取文件

如何关掉ssh隧道

C机器执行

bash 复制代码
ps aux | grep ssh

找到我们建立的隧道,kill掉

此时回到A主机,查询端口情况,发现监听也已经关闭

C让A端口转发A就转?

不是的,需要配置

AllowTcpForwarding Specifies whether TCP forwarding is permitted. The default is ''yes''. Note that disabling TCP forwarding does not improve security unless users are also denied shell access, as they can always install their own forwarders.

打开配置文件/etc/ssh/ssh_config,默认是看不到AllowTcpForwarding属性的,且其值为yes(测试环境为centos 7)。如果需显式设置,增加如下配置项

bash 复制代码
AllowTcpForwarding yes

为何叫反向端口转发

通常情况下端口转发,你在本地建了一个ssh连接转发到远程机器,连接是在本地建立的,数据也是通过本地ssh隧道发到远程,普普通通

bash 复制代码
ssh -L <local-port>:<remote-host>:<remote-port> <user>@<remote-server>

反向就不一样了,不再是本地端口转到远程机器,而是从远程机器转到本地端口。对应到开头的例子,连接是在本地C建立的,转发是在远程A执行的,数据是从A转到本地C

一个是本地到远程,一个远程到本地

相关推荐
yi个名字3 分钟前
Linux文件系统详解:从入门到精通
linux·运维·服务器
稳联技术5 分钟前
实践提炼,EtherNet/IP转PROFINET网关实现乳企数字化工厂增效
网络·网络协议·tcp/ip
红米饭配南瓜汤28 分钟前
WebRTC中的几个Rtp*Sender
网络·网络协议·音视频·webrtc·媒体
WhoisXMLAPI29 分钟前
利用 DNS 情报缓解报税季的网络威胁
运维·网络·安全·web安全
dessler1 小时前
代理服务器-LVS的3种模式与调度算法
运维·服务器·网络·算法·nginx·tomcat·lvs
Lw老王要学习1 小时前
Linux容器篇、第二章_01Ubuntu22 环境下 KubeSphere 容器平台高可用搭建全流程
linux·运维·服务器·k8s·kubesphere·容器化
moppol1 小时前
SSL/TLS握手全流程拆解:从“Hello“到“安全通道“的每一个字节
网络·安全·ssl
电商API_180079052473 小时前
构建高效可靠的电商 API:设计原则与实践指南
运维·服务器·爬虫·数据挖掘·网络爬虫
Oliverro3 小时前
人脸识别技术成为时代需求,视频智能分析网关视频监控系统中AI算法的应用
网络·人工智能
hao_wujing4 小时前
攻击模型的恶意行为检测
网络·数据库·php