ssh端口转发的三种方式

更新日期: 2019-09-17阅读: 2.5k标签: ssh

ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。

这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自然而然的想到了ssh的端口转发也能实现内网穿透。再细想一下,发现 ssh隧道 、或者说 端口转发 ,竟然实现了正向代理 、 反向代理 和 内网穿透 三种常用的网络功能,更佩服其功能的强大和使用中的便利。

ssh有三种端口转发模式,本文一一对其做简要介绍。


本地转发

本地端口转发( Local Port Forwarding ),是将本地主机某个端口流量转发到远程主机的指定端口。其命令行语法是: -L [bind_address]:localport:[remote_host]:remote_port 。”-L”即“local”的首字母,类似的远程转发的”-R”是“remote”的首字母,动态转发的“-D”是“dynamic”的首字母,很好记。

举一个例子说明本地转发的使用场景。

CentOS 7安装GUI界面及远程连接一文中介绍了安装vnc服务并开启端口访问。在实际中,暴露出来的59xx端口每天都会源源不断的受到自动化脚本的爆破攻击。如果你的vnc和登录用户使用弱密码或字典密码,主机安全将受到极大威胁。这种情形下该如何防护?

一种简单安全的防护方法是:使用iptables/firewalld关闭端口的外网访问,有连接需求时用 ssh隧道转发端口:

ssh -L5901:5901 username@host

该命令中将本地的5901端口通过 ssh隧道 转发到远程主机的5901端口,远程连接时输入localhost或者127.0.0.1和5901端口便连到了远程主机的5901端口。通过iptables和ssh的本地转发,实现了他人无法连接,只有自己才能访问的目的。

需要注意的是“-L”选项中的“远程主机”并不特指连接过去的机器(默认是连接上的机器),可以是任何一主机。例如可以将本机的8080端口流量转发到facebook.com的80端口:

ssh -L8080:facebook.com:80 username@host


远程转发

远程端口转发( Remote Port Forwarding ),是将远程主机某个端口转发到远程主机的指定端口。其命令行语法是: -R [bind_address]:port:[local_host]:local_port 。

远程转发最常用的功能是 内网穿透 。有一个公网ip的主机,便可以借助ssh隧道的远程转发实现内网渗透,达到外网访问内网资源的目的。需要注意的是ssh远程转发 默认只能绑定远程主机的本地地址 ,即127.0.0.1。如果想要监听来自其他主机的连接,需要修改远程主机ssh的配置,将”GatewayPorts”改成“yes”,重启ssh后生效。

一个将远程的8080端口流量转发到本地80web端口的示例:

ssh -R0.0.0.0:8080:80 username@host

通过远程转发,访问公网ip主机的8080端口便是访问内网web主机的80端口,这样就实现了内网穿透。


动态转发

无论本地转发还是远程转发,都需要指定本地和远程主机的端口。动态转发( Dynamic Port Forwarding )则摆脱这种限制,只绑定本地端口,远程主机和端口由发起的请求决定。动态转发的语法是:”-D bind_address:port”,一个转发示例:

ssh -D 8080 username@host

该命令让ssh监听本地8080端口,经过8080端口的流量都通过ssh隧道由远程服务器代为请求,从而达到获取被屏蔽资源、隐藏真实身份的目的。

动态转发实际上实现了正向代理功能,因此可以用来科学上网。本地转发也可以做正向代理,但要对每一个请求的主机和端口做转发,比较繁琐,实践中不会这么用。


其它

  1. 从用户端角度看,本地转发是正向代理;从资源提供方角度看,本地转发是反向代理;
  2. ssh连接断开远程转发/内网渗透便失效。如果希望远程转发一直有效,需要ssh保活技术,建议用frp等专注于内网渗透的解决方案;
  3. 虽然ssh隧道中的流量都经过了加密,但防火墙对ssh隧道中承载的流量能比较智能的识别,因此用作科学上网很容易受到干扰;
  4. 如果仅做端口转发,实践中上述命令经常与”-NT -f”选项结合使用。其中”-f”选项将命令放入后台执行,断开连接需要用kill命令;
  5. 从代理角度看,ssh隧道是低效的,建议用专用软件;
  6. ssh隧道的流量都经过了加密,从安全角度是十分可靠的。

原文链接:https://www.tlanyan.me/ssh-tunnel-port-forward-ways/


链接: https://fly63.com/article/detial/5994

ssh key类型这么多,要如何选择呢?

用过ssh的朋友都知道,ssh key的类型有很多种,比如dsa、rsa、 ecdsa、ed25519等,那这么多种类型,我们要如何选择呢?今天看到一篇相关文章,写的挺好的,在这里分享下。

ssh/scp 自动连接使用技巧

我们经常通过 ssh/scp 免密登录的方式来自动化的批量执行一些操作, 不过在实际的使用中可能经常碰到下面几种中断自动连接的问题,在连接新的机器的时候, 通常需要将新机器的加密指纹信息添加到自身的 ~/.ssh/known_hosts 中

git 生成ssh

SSH key 可以让你在你的电脑和Code服务器之间建立安全的加密连接。 先执行以下语句来判断是否已经存在本地公钥:如果你看到一长串以 ssh-rsa或 ssh-dsa开头的字符串, 你可以跳过 ssh-keygen的步骤。

Windows/MacOS/Linux系统下SSH 客户端工具

想来占有量最大的操作系统,得非莫属了吧,相信 Windows 系统肯定是陪伴了很多小伙伴学习工作很长时间的系统了,不过笔者之所以会写这篇文章,也是由于 xshell这个软件破解的有限以及收费限制

SSH 配置端口转发

SSH 隧道或 SSH 端口转发可以用来在客户端和服务器之间建立一个加密的 SSH 连接,通过它来把本地流量转发到服务器端,或者把服务器端流量转发到本地。

14个优秀的SSH连接客户端软件工具推荐

如果你是一名站长或者需要进行管理远程服务器的话,相信你肯定需要用到SSH连接软件。SSH客户端就是可以使用SSH进行远程连接服务器的应用程序。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!