发明人Tatu Ylonen因创建SSH安全协议而闻名,该协议广泛用于远程管理系统和应用程序。看一下如何利用反向SSH隧道,它用于在本地机器和位于NAT之后的远程机器之间建立连接。
时间阅读:
7
分钟
随着对机器的访问在业务中变得越来越重要,特别是随着云应用程序的兴起,用户已经习惯于拥有完全或有限的远程访问,这使得远程访问机器成为绝对必要的。
Covid-19大流行的发生凸显了远程访问的必要性,因为企业不得不分散业务,适应远程工作环境。由于这个原因,公司和个人都利用了他们可以使用的各种本地化技术。
本文提供了在基于linux的环境中设置和使用反向SSH隧道的逐步指南。具体地说,本文介绍了SSH隧道的概念,包括它的定义、使用和在过渡到反向SSH隧道之前的缺点。
SSH是运行在端口22上的加密网络协议,它允许您连接到远程计算机的外壳。另一方面,SSH隧道/端口转发是一种在本地和远程计算机之间创建安全SSH连接的机制。由于它的加密特性,您可以使用SHH隧道来传输使用IMAP、VNC或IRC等非加密协议的消息。
端口转发有三种类型:
此连接使您能够从本地计算机访问另一个服务器。但是,您需要知道两个端口号和您的目标服务器。例如,如果您想远程访问www.HackerOne.com,您的SSH隧道将是:
ssh -L 8080:www.HackerOne.com:80 <主机>
其中,用笔记本电脑的名称替换
与本地端口转发不同,远程端口转发允许您从远程SSH服务器连接到位于隧道客户端的远程网络服务。为此,在终端中输入以下命令:
SSH -R 5900:localhost:5900 guest@janes-pc
r选项决定远程端口转发,允许Jane通过连接VNC客户端到端口5900来访问您的笔记本电脑(本地主机)。
当组织外部的人需要访问内部web服务器或需要利用内部web应用程序访问公共互联网时,远程转发是有用的。
这种SSH隧道使客户机成为SOCKS代理服务器。因此,所有代理服务器的程序都需要在使用完之后进行配置和重新配置。
如下所示,使用-D选项指定动态端口转发。
SSH -C -D 1080笔记本电脑。
您也可以使用任何号码进行连接。但是,标准的SOCKS端口是1080,如果使用了其他端口,则有些程序可能无法工作。
SSH协议容易受到各种恶意软件的攻击,以隐藏数据泄露和攻击源通道。恶意获取的SSH密钥也被用于网络攻击。例如,与非托管的SSH密钥一起,SSH隧道使攻击者能够使用从公共通道窃取的私有网络的SSH密钥。
根据SSH Academy的说法,当黑客从系统和设备重定向攻击时,这些攻击可以作为攻击源的藏身之处,反过来,攻击者可以在不被发现的情况下搜索和利用漏洞。
在经常进行的恶意活动中,尝试各种登录凭证和运行针对电子邮件和web协议的攻击工具。因此,隧道技术既要提供安全的远程访问,又要提供对被访问网络的控制和安全。
路由器上的防火墙会拒绝所有没有外发请求的连接请求或传输请求到达远程计算机。因此,只允许由远程计算机请求的连接,这就产生了一个问题:防火墙拒绝客户机发起的SSH连接,并在远程计算机位于NAT之后时取消对它的访问。
反向SSH通过模拟到远程服务器的SSH来解决这个问题。在这种情况下,远程计算机监听本地计算机的网络端口。它将到该端口的SSH连接请求转发给它自己,从而在本地计算机和远程计算机之间建立一个新的连接。换句话说,您使用隧道中的隧道来连接服务器、远程计算机和您的计算机(参见图1)。
要创建反向SSH隧道,相关计算机首先需要在防火墙之外打开一个SSH连接,然后在远程计算机的连接端口上包含一个-R隧道。SSH -R的描述为:-R [bind_address:]port:host:hostport。
这指定远程(服务器)主机上的给定端口需要转发到本地端的给定主机和端口。这是通过分配一个套接字来监听远端端口来实现的。当连接到此端口时,该链接通过安全通道进行,并且从本地计算机通过该主机端口进行连接。
在建立连接之前,确保您已经在Linux/Ubuntu机器上安装了SSH。如果不是,请执行以下步骤使能SSH。
$ sudo apt安装OpenSSH-server
在出现提示时输入密码,然后输入Y继续安装。
$ sudo systemctl status SSH
如果安装成功且服务正在运行,将显示Active: Active (running)。按q返回命令行提示符。
$ sudo UWF允许SSH。
基于linux和macOS的系统都预装了SSH客户端。但是,如果您想从Windows计算机连接,则需要使用环境的SSH客户机,例如,腻子.
如果本地计算机以前从未接受SSH连接,在终端上运行以下命令启动SSH守护进程(sshd)
$ sudo systemctl start SSHD
要在每次引导计算机时启动守护进程,请运行以下命令
$ sudo systemctl启用SSHD
使用ssh命令连接到远程服务器
$ ssh [your-account-login] @(服务器ip)
建立连接后,远程服务器端的一个人,比如系统管理员,应该在其机器上运行以下命令:
ssh -fN -R 7010:localhost:23 username@yourMachine-ipaddress。
这个连接请求将确保您机器上的端口7010的SSH连接请求移动到远程服务器的端口23。
在这一步中,您将在端口7000上建立连接。
SSH username@localhost -p 7000
然后,您的请求将找到发送到远程主机的方式。因此,在提示输入这些详细信息时,使用远程服务器上的帐户用户名和密码。
您还可以设置SSH密钥,以使从远程计算机连接到本地计算机更加安全。在远程计算机上,键入以下命令:
ssh - keygen美元
它会提示你输入密码。
建议使用四个用符号分隔的单词来创建一个健壮的密码短语,并确保只有那些带有该短语的人才可以创建到您的计算机的SSH连接,而不会被要求输入密码。另外,还需要使用ssh-copy-id username@localhost命令将生成的密钥传输到本地。
网络地址转换(NAT)通过使用不可检测的秘密IP网络来隐藏合法的IP地址,这些秘密IP网络依赖于internet上可用的未注册IP地址。因此,结合两个网络的NAT位于路由器上,可以配置为全局发布整个网络的一个地址。
反向SSH隧道使您能够访问NAT后的远程计算机。例如,您可以从家里访问您的办公室。因此,反向SSH隧道是一种技术,它使您能够对没有公共IP地址的基于linux的系统进行SSH。
今天联系JFrog连接通过安全可靠的连接,在几秒钟内轻松访问所有远程设备。
支持所有基于linux的操作系统,以及所有可用的SBC,如:树莓派,Beaglebone, Jetson Nano等。