如何使用SSH隧道访问受限服务器和安全浏览

SSH客户端连接到Secure Shell服务器,该服务器使您可以像坐在另一台计算机前一样运行终端命令。但是,SSH客户端还允许您“隧道”本地系统和远程SSH服务器之间的端口。

共有三种不同类型的SSH隧道,它们都用于不同的目的。每一种都涉及使用SSH服务器将流量从一个网络端口重定向到另一个网络端口。流量是通过加密的SSH连接发送的,因此在传输过程中无法对其进行监控或修改。

您可以使用 ssh 命令包括在Linux,macOS和其他类似UNIX的操作系统上。在不包含内置ssh命令的Windows上,我们建议使用免费工具PuTTY连接到SSH服务器。它也支持SSH隧道。

本地端口转发:使远程资源可在本地系统上访问

通过“本地端口转发”,您可以访问未暴露给Internet的本地网络资源。例如,假设您要在家中访问办公室中的数据库服务器。出于安全原因,该数据库服务器仅配置为接受来自本地办公室网络的连接。但是,如果您可以访问办公室中的SSH服务器,并且该SSH服务器允许来自办公室网络外部的连接,则可以在家中连接到该SSH服务器并像访问办公室一样访问数据库服务器。通常是这样,因为保护单个SSH服务器免受攻击要比保护各种不同的网络资源更容易。

为此,您需要与SSH服务器建立SSH连接,并告诉客户端将流量从本地PC的特定端口(例如端口1234)转发到数据库服务器的地址及其办公室网络上的端口。因此,当您尝试访问当前PC的端口1234上的数据库服务器“ localhost”时,该流量会通过SSH连接自动“隧道化”并发送到数据库服务器。 SSH服务器位于中间,来回转发流量。您可以使用任何命令行或图形工具来访问数据库服务器,就像它在本地PC上运行一样。

要使用本地转发,请正常连接到SSH服务器,同时还要提供 -L 争论。语法为:

ssh -L local_port:远程地址:remote_port [email protected]

例如,假设您办公室的数据库服务器位于办公室网络上的192.168.1.111。您可以在以下位置访问办公室的SSH服务器 ssh.youroffice.com ,并且您在SSH服务器上的用户帐户是 鲍勃 。在这种情况下,您的命令将如下所示:

ssh -L 8888:192.168.1.111:1234 [email protected]

运行该命令后,您将能够通过本地主机的8888端口访问数据库服务器。因此,如果数据库服务器提供了Web访问,则可以将// localhost:8888插入Web浏览器以对其进行访问。如果您有需要数据库网络地址的命令行工具,请将其指向localhost:8888。发送到PC上端口8888的所有流量都将通过隧道传输到办公室网络上的192.168.1.111:1234。

如果您想连接到与SSH服务器本身在同一系统上运行的服务器应用程序,那会更加令人困惑。例如,假设您有一台SSH服务器运行在办公计算机的端口22上,但是您也有一个数据库服务器运行在同一地址和同一系统上的端口1234上。您想在家中访问数据库服务器,但是系统仅在端口22上接受SSH连接,并且其防火墙不允许任何其他外部连接。

在这种情况下,您可以运行以下命令:

ssh -L 8888:localhost:1234 [email protected]

当您尝试访问当前PC上端口8888上的数据库服务器时,流量将通过SSH连接发送。当它到达运行SSH服务器的系统时,SSH服务器会将其发送到“ localhost”上的端口1234,该端口与运行SSH服务器本身的PC相同。因此,从远程服务器的角度来看,以上命令中的“ localhost”表示“ localhost”。

要在Windows的PuTTY应用程序中执行此操作,请选择“连接”>“ SSH”>“隧道”。选择“本地”选项。对于“源端口”,输入本地端口。对于“目标”,以remote_address:remote_port的形式输入目标地址和端口。

例如,如果您要设置与上述相同的SSH隧道,则可以输入 8888 作为源端口和 本地主机:1234 作为目的地。然后单击“添加”,然后单击“打开”以打开SSH连接。当然,您还需要在“会话”主屏幕上输入SSH服务器本身的地址和端口,然后再进行连接。

远程端口转发:使本地资源在远程系统上可访问

“远程端口转发”与本地转发相反,因此使用频率不高。它允许您使本地PC上的资源在SSH服务器上可用。例如,假设您正在前面的本地PC上运行网络服务器。但是您的PC位于防火墙之后,该防火墙不允许传入到服务器软件的流量。

假设您可以访问远程SSH服务器,则可以连接到该SSH服务器并使用远程端口转发。您的SSH客户端将告诉服务器将SSH服务器上的特定端口(例如,端口1234)转发到当前PC或本地网络上的特定地址和端口。当某人访问SSH服务器上的端口1234时,该流量将通过SSH连接自动“隧道化”。有权访问SSH服务器的任何人都可以访问您PC上运行的Web服务器。这实际上是穿越防火墙的一种方式。

要使用远程转发,请使用 ssh 命令与 -R 争论。语法与本地转发的语法基本相同:

ssh -R remote_port:本地地址:本地端口[email protected]

假设您要使一个服务器应用程序侦听本地PC上的端口1234,该应用程序在远程SSH服务器上的端口8888上可用。 SSH服务器的地址是 ssh.youroffice.com 并且您在SSH服务器上的用户名是 鲍勃。您将运行以下命令:

ssh -R 8888:localhost:1234 [email protected]

然后,某人可以通过端口8888连接到SSH服务器,并且该连接将通过隧道建立到从其建立连接的本地PC上的端口1234运行的服务器应用程序。

要在Windows的PuTTY中执行此操作,请选择“连接”>“ SSH”>“隧道”。选择“远程”选项。对于“源端口”,输入远程端口。对于“目标”,以local_address:local_port的形式输入目标地址和端口。

例如,如果您要设置上面的示例,请输入 8888 作为源端口和 本地主机:1234 作为目的地。然后单击“添加”,然后单击“打开”以打开SSH连接。当然,在连接之前,您还需要在“会话”主屏幕上输入SSH服务器本身的地址和端口。

人们随后可以连接到SSH服务器上的端口8888,他们的流量将通过隧道传输到本地系统上的端口1234。

默认情况下,远程SSH服务器将仅侦听来自同一主机的连接。换句话说,只有与SSH服务器本身位于同一系统上的人才能连接。这是出于安全原因。如果要覆盖此行为,则需要在远程SSH服务器上的sshd_config中启用“ GatewayPorts”选项。

动态端口转发:使用SSH服务器作为代理

有关的:VPN和代理之间有什么区别?

还有“动态端口转发”,其功能与代理或VPN类似。 SSH客户端将创建一个SOCKS代理,您可以配置要使用的应用程序。通过代理发送的所有流量都将通过SSH服务器发送。这类似于本地转发-它将本地流量发送到PC上的特定端口,并通过SSH连接将其发送到远程位置。

有关的:为什么即使访问加密的网站,使用公共Wi-Fi网络也可能很危险

例如,假设您使用的是公共Wi-Fi网络。您想安全浏览而不被窥探。如果您在家中可以访问SSH服务器,则可以连接到该服务器并使用动态端口转发。 SSH客户端将在您的PC上创建一个SOCKS代理。发送到该代理的所有流量都将通过SSH服务器连接发送。没有人监视公共Wi-Fi网络将能够监视您的浏览或审查您可以访问的网站。从您访问的任何网站的角度来看,就好像您坐在家里的PC前面一样。这也意味着您可以使用此技巧在美国境外访问仅美国的网站,当然,前提是您可以访问美国的SSH服务器。

作为另一个示例,您可能要访问家庭网络上的媒体服务器应用程序。出于安全原因,您可能只将SSH服务器公开给Internet。您不允许从Internet到媒体服务器应用程序的传入连接。您可以设置动态端口转发,将Web浏览器配置为使用SOCKS代理,然后通过Web浏览器访问在家庭网络上运行的服务器,就像坐在家里的SSH系统之前一样。例如,如果您的媒体服务器位于家庭网络上的端口192.168.1.123上,则可以插入该地址 192.168.1.123 使用SOCKS代理访问任何应用程序,您就可以像访问家庭网络一样访问媒体服务器。

要使用动态转发,请通过以下命令运行ssh命令: -D 参数,如下所示:

ssh -D local_port用户名@ server.com

例如,假设您可以访问SSH服务器 ssh.yourhome.com 并且您在SSH服务器上的用户名是 鲍勃 。您要使用动态转发在当前PC的端口8888上打开SOCKS代理。您将运行以下命令:

SSH -D 8888 [email protected]

然后,您可以配置Web浏览器或其他应用程序以使用您的本地IP地址(127.0.01)和端口8888。来自该应用程序的所有流量都将通过隧道重定向。

要在Windows的PuTTY中执行此操作,请选择“连接”>“ SSH”>“隧道”。选择“动态”选项。对于“源端口”,输入本地端口。

例如,如果您想在端口8888上创建SOCKS代理,则可以输入 8888 作为源端口。然后单击“添加”,然后单击“打开”以打开SSH连接。当然,在连接之前,您还需要在“会话”主屏幕上输入SSH服务器本身的地址和端口。

然后,您可以配置一个应用程序以访问本地PC上的SOCKS代理(即IP地址127.0.0.1,它指向本地PC)并指定正确的端口。

有关的:如何在Firefox中配置代理服务器

例如,您可以将Firefox配置为使用SOCKS代理。这特别有用,因为Firefox可以拥有自己的代理设置,而不必使用系统范围的代理设置。 Firefox将通过SSH隧道发送其流量,而其他应用程序将正常使用您的Internet连接。

在Firefox中执行此操作时,选择“手动代理配置”,在SOCKS主机框中输入“ 127.0.0.1”,然后在“端口”框中输入动态端口。将“ HTTP代理”,“ SSL代理”和“ FTP代理”框保留为空。

只要您打开SSH会话连接,隧道就将保持活动状态并保持打开状态。当您结束SSH会话并与服务器断开连接时,隧道也将关闭。只需使用适当的命令(或PuTTY中的适当的选项)重新连接即可重新打开隧道。


$config[zx-auto] not found$config[zx-overlay] not found