大家好,关于调试工具SSH隧道很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!
一句话概括就是:将内网端口映射到外网。
先决条件
为了将内网服务映射到外网,需要以下资源:
具有外部IP的服务器;
您可以在本地开发机上通过ssh登录外网服务器。
满足上述条件很简单:
条件一:购买低配置的Linux服务器,推荐国外的DigitalOcean;
条件2:Mac和Linux开发机内置ssh客户端,Windows可以安装Cygwin。
实现原理
要将内部网络端口映射到外部网络,最简单的方法是通过SSH 隧道。
SSH隧道就像一个管道,可以将任意两台机器连接在一起,并将发送到一台机器的数据通过管道传输到另一台机器。如果本地开发机和外网服务器已经通过SSH隧道连接,并且外网服务器监听12.34.56.78:8080,那么所有发送到12.34.56.78:8080的数据都会通过SSH原封不动地传输到本地开发机隧道。 127.0.0.1:8080,如图:
换句话说,访问12.34.56.78:8080 就像在本地开发机器上访问127.0.0.1:8080 一样。本地开发计算机上的端口8080 映射到外部服务器上的端口8080。
如果您的外部服务器IP配置了域名解析,例如yourdomin.com会通过DNS解析为12.34.56.78,那么您也可以通过yourdomin.com:8080访问本地开发机上的服务。
这样,当访问外网地址时,本地服务返回的结果实际上就是结果。
当数据通过SSH隧道传输时,数据将会被加密。即使中途被劫持,黑客也无法获取数据的原始内容。
因此,SSH隧道的另一个作用就是保证数据传输的安全。
实施步骤
通过SSH隧道连接本地启动和外网服务器就像在本地开发机上通过SSH远程登录外网服务器一样简单。
我们先回顾一下下面的SSH远程登录命令。如果想本地远程登录12.34.56.78,可以在本地开发机上执行以下命令:
ssh username@12.34.56.78 要实现SSH隧道,只需要在本地开发机上执行:
ssh -R 8080:127.0.0.1:8080 username@12.34.56.78 可以看到,实现SSH隧道的命令比SSH登录-R 8080:127.0.0.1:8080 多了一些。多余部分的含义是:
在远程机器(12.34.56.78)上启动TCP 8080端口监听,然后将远程机器(12.34.56.78)的8080端口映射到本地127.0.0.1:8080。
执行上述命令后,可以通过12.34.56.78:8080访问本地127.0.0.1:8080。
事实上,它不仅限于将本地开发机器上运行的服务映射到外部网络服务器。您还可以将本地开发机器可以访问的任何服务映射到外部网络服务器。例如,您可以在本地开发机器上访问github.com:80并执行:
ssh -R 8080:github.com:80 username@12.34.56.78 可以通过12.34.56.78:8080访问github.com:80。
继续跑
为了保持SSH隧道在后台执行,有以下方法。
SSH自带的参数
SSH 还支持这些参数:
N参数:表示只连接远程主机,不打开远程shell;
T参数:表示没有为该连接分配TTY;
f参数:表示连接成功后在后台运行;
因此,要保持SSH 隧道在后台执行,您可以传递以下命令:
ssh -NTf -R 8080:127.0.0.1:8080 用户名@12.34.56.78 通过AutoSSH
SSH隧道不稳定,在网络状况不佳的情况下可能随时断开。如果断开,则需要手动到本地开发机重新发起与外网服务器的连接。
AutoSSH 使SSH 隧道保持运行。它启动一个SSH 进程并监控该进程的健康状况;当SSH进程崩溃或停止通信时,AutoSSH将重新启动SSH进程。
要使用AutoSSH,只需在本地开发计算机上安装AutoSSH,如下所示:
Mac系统:brew install autossh;
Linux系统:apt-get install autossh;
安装成功后,在本地开发机上执行:
autossh -N -R 8080:127.0.0.1:8080 username@12.34.56.78 可以达到与上面相同的效果,但此方法可以保持SSH 隧道运行。
可以看到这个命令和上面的区别是把ssh换成了autossh,并且少了-f参数。原因是autossh默认会在后台运行。
常问问题
如果通过上述方法成功启动SSH隧道后仍然无法访问12.34.56.78:8080,那么很可能是外网服务器上的SSH配置不正确。为此,您需要修改外部服务器上的/etc/ssh/sshd_config 文件,如下所示:
GatewayPorts yes选项表示SSH隧道监控的服务的IP是0.0.0.0,对外开放,而不是127.0.0.1,仅对本机开放。不打开GatewayPorts的后果是无法通过12.34.56.78:8080访问。该服务只能通过外网服务器上的127.0.0.1:8080服务到本地开发机。
修改配置文件后,需要重新启动sshd服务来加载新的配置。命令如下:
service sshd restart 如果使用上述方法后仍然无法访问12.34.56.78:8080,请检查您外部服务器的防火墙配置,确保8080端口对外开放。
替代方案
除了可以实现内网穿透的SSH隧道外,还有以下几种常见的方法。
玻璃钢
frp是一个高性能的反向代理应用程序,可用于内网穿透,支持tcp、udp、http、https协议。
玻璃钢具有以下特点:
frp比SSH隧道有更多的功能和配置项;
frp还需要外网服务器,外网服务器上需要安装frps,本地开发机上需要安装frpc;
恩格罗克
ngrok是一款商业内网渗透工具。它具有以下特点:
不需要有外部服务器,因为ngrok会为你提供;
您只需要在本地开发机器上安装ngrok客户端并注册一个ngrok帐户即可;
按服务收费;
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/122487.html
用户评论
呆檬
看了你写的 SSH 隧道搭建教程,感觉真的很棒!之前一直想弄懂这个功能,现在终于明白了。以后可以连接公司内网办公的好用了!
有7位网友表示赞同!
空巷
这篇博客讲解的很好理解,新手也能跟着做出来。我自己就经常使用 SSH 隧道来加速网站访问,简直就是宝藏文章!
有10位网友表示赞同!
忘故
调试利器? 我觉得 SSH 隧道不止是调试工具好用啊,用来远程访问网络资源,传输文件都非常方便!
有18位网友表示赞同!
追忆思域。
对于开发人员来说,SSH 隧道确实是一个很好的学习和使用目标。我之前一直用代理软件解决这个问题,现在了解到 SSH 隧道后发现更加高效安全了!
有5位网友表示赞同!
予之欢颜
这篇博客分享的技巧真是太赞了!以前经常遇到远程调试的问题,而SSH 隧道能完美解决这些难题,效率大大提升了!
有8位网友表示赞同!
此刻不是了i
虽然我理解 SSH 隧道的原理,但是这个教程写的步骤还是很清晰易懂。之前就觉得 SSH 太强大了,有了这个工具确实更方便了!
有16位网友表示赞同!
命运不堪浮华
我一直用的是虚拟专用网络来连接内网资源,现在看看SSH隧道似乎更安全可靠? 有没有哪个软件比较容易上手使用呢?
有7位网友表示赞同!
焚心劫
我对安全的应用场景不太了解,不过 SSH 隧道在远程开发、数据传输等方面确实可以提升安全性!
有15位网友表示赞同!
淡写薰衣草的香
调试利器听起来很高大上,不过我感觉这个技术对普通用户来说用处不大吧……
有20位网友表示赞同!
ˉ夨落旳尐孩。
虽然博客教程写的很详细,但是为了方便理解可以多加一些图示解释,这样更容易让人上手。
有15位网友表示赞同!
面瘫脸
我觉得文章中关于 SSH 隧道安全性的讲解不太深入,能不能多补充一些细节?比如怎么保护密码和数据传输安全等…
有8位网友表示赞同!
巷口酒肆
这个SSH隧道真是太强大了,以前远程修改代码 always 是个头痛,现在有了这个工具简直飞速完成了任务!
有19位网友表示赞同!
岁岁年年
我感觉 SSH 隧道的配置过程有点复杂,对于没有基础知识的读者来说可能比较困难。最好在文章开头添加一些免责声明,避免造成误解。
有20位网友表示赞同!