ssh端口转发-本地端口转发和远程端口转发的具体用法实例

这篇具有很好参考价值的文章主要介绍了ssh端口转发-本地端口转发和远程端口转发的具体用法实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ssh端口转发

在一开始学习ssh端口转发的时候,总是被本地端口转发和远程端口转发的区别搞得头大,缠斗数日无果,沉思一番之后,决定逐个攻破,先揪住一个掰开揉碎,另一个再如法炮制,如此一来,迷惑可解矣。
ssh一般会涉及到3个角色:两个端之间建立ssh连接,还有一个角色则是转发的目的地,为避免A、B、C这样一看便觉枯燥的指代名词,我们请出在东方大陆妇孺皆知的取经队伍

本地端口转发

某一日悟空又和三藏闹矛盾了,三藏赌气不理悟空了,这时悟空想要和三藏建立联系就需要八戒来当传声筒。
现在利用三台虚拟机来具象化这个例子
悟空:192.168.1.1(CentOS7.8)
八戒:192.168.1.2(CentOS7.8)
三藏:192.168.1.3(Ubuntu20.04)
192.168.1.3的防火墙设置拒绝来自192.168.1.1的访问
ufw deny from 192.168.1.1

这时,192.168.1.1想要和192.168.1.3建立连接,就可以通过192.168.1.2来建立一个隧道,在192.168.1.1上执行ssh -L 30000:192.168.1.3:22 root@192.168.1.2,这样隧道就建立起来了。这里-LLocal,指本地端口转发;30000:192.168.1.3:22 指把对192.168.1.1的30000端口的访问转发到192.168.1.3的22端口(在做转发之前应该先检查192.168.1.1的30000端口是否已经被占用了,可以使用lsof -i:port来进行检查);最后面的root@192.168.1.2要和最前面的ssh放在一起看,也就是说,192.168.1.1先执行了ssh root@192.168.1.2,依据这个ssh连接建立起了 一个本地端口转发的隧道,隧道实现了 30000:192.168.1.3:22 所指的转发工作。

当完成了上面所说的建立隧道的工作,就可以测试隧道的连通性了,在任意一个192.168.1.1的终端执行telnet localhost 30000 进行测试,如果测试通过(输出结果为已连接,而不是连接被拒绝),说明隧道没问题,下一步可以尝试使用ssh通过隧道连接到192.168.1.3了,在任意一个192.168.1.1的终端执行ssh root@localhost -p 30000,即可以ssh登录到192.168.1.3,在192.168.1.3看来,该ssh会话的来源是192.168.1.2。

有个小细节,在192.168.1.1上执行ssh -L 30000:192.168.1.3:22 root@192.168.1.2 之后,终端会打开192.168.1.1到192.168.1.2的会话,但是这样原来192.168.1.1的终端就被占用了,为了节省出这个终端,执行端口转发可以加上-Nf参数,-N表示不执行命令,使得该ssh连接只起到隧道的作用,-f表示在后台运行该ssh连接。还有一点要注意,-f参数不能单独使用,因为在没有 -N 特别指明的情况下,无法把没有指定登录后要执行的命令的ssh会话放到后台。

除了在192.168.1.1执行端口转发,192.168.1.1要和192.168.1.3建立会话,在192.168.1.2做一个本地端口转发也能达到同样的目的。在192.168.1.2执行:ssh -NfL 30000:192.168.1.3:22 root@localhost,这里192.168.1.2与自身建立了一个会话,把对自己的30000端口的访问转发到了192.168.1.3的22端口。但是这样还不能达到目的,这是因为OpenSSH有一个限制,默认情况下,ssh只监听来自本机的回环地址的对于本地转发端口的访问,在这里也就是只有192.168.1.2自己才能访问30000这个本地转发端口。想要达到目的,还需要一个参数:-g-g能够取消这个限制,使得其他主机也能够访问这个本地转发端口,所以192.168.1.2应该执行的完整的命令是:ssh -g -NfL 30000:192.168.1.3:22 root@localhost。此外,如果192.168.1.2开启了iptables,iptables的INPUT链中相关的 target 为 REJECT 的规则也会阻止其他主机访问本地转发端口。

远程端口转发

某一日悟空又和三藏闹矛盾了,三藏把悟空赶走了,悟空于是回到花果山,开始过逍遥自在的日子。没过多久,三藏那边取经形式日益严重,路上遇到的妖怪八戒和沙僧解决起来力有不逮,唐僧于是责怪八戒能力不足,八戒开始怀念大师兄在的日子,但是此时唐僧和猴哥都不愿说软话,八戒没得办法,只得主动去找大师兄,陪着笑脸,意在沟通唐僧和悟空彼此思念之情。

仍然以三台虚拟机来创建实例
悟空:192.168.1.1(CentOS7.8)
八戒:192.168.1.2(CentOS7.8)
三藏:192.168.1.3(Ubuntu20.04)
192.168.1.3的防火墙设置拒绝来自192.168.1.1的访问
ufw deny from 192.168.1.1

这一回,192.168.1.1无意主动通过192.168.1.2建立隧道,反过来,192.168.1.2要主动与192.168.1.1建立连接,在192.168.1.1和192.168.1.3之间建立一个隧道。为此,192.168.1.2需要执行:ssh -NfR 30000:192.168.1.3:22 root@192.168.1.1-Rremote30000:192.168.1.3:22 同样是指把对192.168.1.1的30000端口的访问转发到192.168.1.3的22端口,注意不要把这里的转发端口当成是执行端口转发命令的一方。最后的root@192.168.1.1 的解释参考本地端口转发部分。

测试隧道的连通性同本地端口转发部分,在任意一个192.168.1.1的终端执行telnet localhost 30000 进行测试。

容易产生歧义的

还有一件事,来看这种情况:192.168.1.1执行 ssh -L 30000:localhost:22 root@192.168.1.2,这里不考虑转发的合理性,只关注一件事:命令中的localhost指的是谁,根据实际测试,上面命令中的localhost指的是192.168.1.2;而如果192.168.1.1执行的是 ssh -R 30000:localhost:22 root@192.168.1.2,情况是否相同呢?根据实际测试,这种情况下的localhost指的是192.168.1.1。也就是说,如果是本地端口转发,localhost指的是接受ssh连接的一方;如果是远程端口转发,localhost指的是发起ssh连接的一方(也就是执行端口转发命令的一方)。更统一的说法是:不论本地端口转发还是远程端口转发,localhost都是指连通隧道两端的那个主机。

参考资料

[1] SSH, the Secure Shell, 2nd Edition (Barrett, Daniel J)-Chapter 9. Port Forwarding and X Forwarding
[2] Ubuntu 防火墙命令(查看,关闭,启动) 博客园
[3] 如何列出和删除防火墙规则UFW myfreax文章来源地址https://www.toymoban.com/news/detail-661978.html

到了这里,关于ssh端口转发-本地端口转发和远程端口转发的具体用法实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习资料|SSH隧道端口转发功能详解

    ssh隧道大致可以分为3种,分别为本地端口转发,远程端口转发,动态端口转发,本文将让你彻底搞懂这3个转发的命令表达形式,让你能够灵活运用解决生活中的各种特殊场景。 如果你正在使用mobaxterm、xshell、secureCRT、putty这类工具,可直接可视化界面简单配置即可使用,若

    2024年02月10日
    浏览(53)
  • 【工具】SSH端口转发管理器,专门管理SSH Port Forwarding

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 开源代码看这里: http://xfxuezhang.cn/index.php/archives/1151/         有时候需要用到ssh的端口转发功能。目前来说,要么是cmd里手敲指令,但每次敲也太麻烦了;或者打开termius、mobaxterm这种ssh软件,但对于只想使用端口转发的

    2024年02月07日
    浏览(42)
  • 远程开发之vscode端口转发

    通过端口转发,实现在本地电脑上访问远程服务器上的内网的服务。 vscode、ssh 在ports界面中的port字段,填需要转发的 IP:PORT ,即可转发远程服务器中的内网端口到本地。 如果希望 VS Code 记住已转发的任何端口,请在设置编辑器 (⌘,) 中选中“Remote: Restore Forwarded Ports”或

    2024年01月19日
    浏览(36)
  • SSH隧道动态转发端口实现SOCKS代理 + HTTP代理(Privoxy)

    实现效果 :ssh连接远程服务器进行网络转发,本地服务连接网络代理 环境 :windows11/10 需要工具 :MobaXterm(ssh隧道端口转发),Privoxy(socks转http代理),一个云服务器 多种方法选一种即可:  命令行: ssh -C -N -D LOCAL_ADDRESS:LOCAL_PORT USER@REMOTE_ADDRESS Putty客户端 MobaXteam中的 Mo

    2023年04月09日
    浏览(42)
  • 榨干家庭宽带公网ip------IP直连NAS远程访问(端口转发)

    基本情况:联通千兆宽带有公网ip,极空间z2s,路由器TPlink xdr4288 打开路由器后台页面,进入   工具箱/虚拟服务器, 点击    新建,需要输入  外部端口:和内部端口号相同                                        内部端口:NAS后台端口转发设置,查到端

    2024年02月15日
    浏览(39)
  • 宝塔设置云服务器mysql端口转发,实现本地电脑访问云mysql

    环境 :centos系统使用宝塔面板 实现功能 :宝塔设置云服务器mysql端口转发,实现本地电脑访问mysql 软件商店==》搜索 mysql安装即可 软件商店==》搜索 PHP安装7.4.33即可( 只需要勾选快速安装 ) 软件商店==》搜索 phpMyAdmin 安装即可( 只需要勾选快速安装 ) 在宝塔面板上选择

    2024年02月15日
    浏览(39)
  • 解决问题:无法与(IP) 建立连接: 远程主机密钥已更改,端口转发已禁用

    本文将介绍当尝试通过SSH等远程连接方式连接到特定IP地址时可能遇到的一个常见问题:“无法与(IP)建立连接: 远程主机密钥已更改,端口转发已禁用”。我们将从报错问题、报错原因和解决方法三个方面来详细解释并处理这个问题。 用户尝试通过SSH等远程连接方式连接到某个

    2024年04月26日
    浏览(40)
  • 利用jmeter java sample端口转发实现对远程数据库的压力测试

    目录 1 需求背景 2 工具/包 2.1 Apache-jmeter 2.2 eclipse 2.3 Com.jcraft.jsch 3 插件开发 3.1 新建工程 3.2 配置buildpath 3.3 Constants类 3.4 openSSH类 3.5 closeSSH类 4 连接测试 4.1 Jar包导出  4.2 java sample  4.3 sql sample     对数据库进行压力测试时,需要模拟同一时间大量的sql请求发送,借助于jmete

    2024年02月10日
    浏览(57)
  • 路由器端口转发&远程桌面控制:一电脑连接不同局域网的另一电脑

    一、引言          路由器端口转发 :指在路由器上设置一定的规则,将外部的数据包转发到内部指定的设备或应用程序。这通常需要对路由器进行一些配置,以允许外部网络访问内部网络中的特定服务和设备。端口转发功能可以实现多种应用场景,例如远程桌面、FTP、

    2024年04月15日
    浏览(51)
  • 【踩坑】通过端口转发解决Jupyter远程无法连接ERR_CONNECTION_TIMED_OUT

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 方式一:SSH 方式二:Mobaxterm  如果你也试了各种方法,配置文件也改了,还是无法连接上,那你适合本教程。 本教程其实是个曲线救国的策略:通过 端口转发 来实现访问。 形式为: 比如 远程jupyter运行在8888端口,远

    2023年04月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包