SSH隧道及其使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH隧道及其使用相关的知识,希望对你有一定的参考价值。

参考技术A SSH隧道是一种通过加密的SSH连接传输任意网络数据的方法。它可以用来为任何应用程序添加加密通道;也可以用它来实现VPN和跨防火墙访问局域网的服务。

SSH是一个通过不受信任的网络进行安全远程登录和文件传输的标准。通过SSH隧道传输TCP/IP数据,它还提供了一种使用端口转发保护任何给定应用程序数据流量的方法。采用了这种方法后,应用程序的数据流量都会走SSH的加密连接,从而不会被窃听或拦截。对于本身不支持加密的应用程序来说,使用SSH隧道可以很方便地添加网络安全性。

上图简要介绍了SSH隧道。不可信网络的安全连接建立在SSH客户端和SSH服务器之间。这个连接是加密的,可用于保护机密性和完整性,并且可以对通信方进行身份验证。

客户端应用使用SSH来连接到服务端应用。隧道启用后

通过上面的转发,无需修改应用程序,就能保证应用程序客户端和服务端通信的安全。

这个方式的缺点是,任何能登陆服务器的用户都可以启用端口转发。内部IT人员经常在他们的家里的机器或云上的服务器上启用转发,从而能在企业内网中,从工作机器上访问家里的机器或云上的服务器。黑客或恶意软件会利用类似的方式在局域网中留一个后门。还可以在多个设备上开启隧道,攻击者通过在这些隧道中跳来跳去来隐藏踪迹。

本地代理用于将端口从客户端计算机转发到服务端计算机。SSH客户端监听来自某个端口的连接,当它收到连接时,将请求通过隧道转发到SSH服务器;然后SSH服务器将请求转到目标端口。

本地转发比较常见的场景有:

在OpenSSH中,使用 -L 参数开启本地转发

这个命令工作的过程如下图

默认情况下,其他的机器都能够连接到本地的SSH客户端指定的端口;为了安全起见,一般绑定地址,将连接来源限制在同一主机的程序

也可以在 OpenSSH客户端的配置中 配置本地转发,这样就不用单独输入命令行了

比如在~/.ssh/config中这样写

这样在开启转发的时候只需要输入 ssh serverfw 而不用再输入完整的命令了

如果希望通过本地计算机,让远程服务器 remote 可以连接到 server 上的服务,可以使用SSH远程转发。

使用SSH远程转发一个典型的用途是,在企业内部开一个后门,让公网的计算机可以访问到企业的某个内部服务,这个是有一定风险的,使用的时候需要特别小心。

在OpenSSH中,远程转发通过 -R 参数开启,在本地计算机上输入命令

上面命令的工作过程如下

默认情况下,OpenSSH仅允许从服务器主机(上图的 remote )连接到远程转发端口 server:p2 ,如果想要其他的主机也能连上 server:p2 ,需要在 sshd_config 文件中设置

如果需要指定来源IP,可以将配置改为

比如

将只允许52.192.1.73到端口8080的连接

OpenSSH的远程转发支持多个规则,比如

同样的,可以在 ~/.ssh/config 配置host,比如

使用 PgAdmin 4 设置 SSH 隧道

【中文标题】使用 PgAdmin 4 设置 SSH 隧道【英文标题】:Set up SSH tunnel with PgAdmin 4 【发布时间】:2021-04-13 06:49:53 【问题描述】:

我是 pgAdmin 和 SSH 隧道的新手。我正在尝试使用 SSH 隧道建立与 postgres 数据库的连接。我在 Windows 10 上。我收到以下说明(我更改了下面的所有名称和端口)

将以下内容添加到您的 SSH 配置 (~/.ssh/config):

Host prod
  Hostname myorg.org.uk
  User sshusername
  IdentityFile idef.pem
  LocalForward 9999 localforward.amazonaws.com:8888

现在您可以通过隧道进入 PostgreSQL:

ssh -N prod

现在 psql et al 可以连接了(您必须在 SSH 隧道运行时打开一个新的终端窗口):

psql -h localhost -p 9999 -U connectionusername -d dproduction

我还获得了我尝试连接的数据库的 dproduction 数据库密码:dproduction_pwd

我不明白 pgAdmin 中的一切。我做了以下事情:

创建服务器: 名称 = 测试

连接: 主机名/地址:本地主机 保护:9999 维护数据库:postgres 用户名:连接用户名

SSH 隧道: 隧道主机:myorg.org.uk 隧道站:9999 用户名:sshusername 身份文件:C:\idef.pem 密码:dproduction_pwd

我一定是做错了什么,因为我没有从上面的 ssh 配置中使用 LocalForward,这是怎么回事?将其放入 Tunnel 主机不起作用。

【问题讨论】:

【参考方案1】:

我设法使用 SSH 隧道通过 Windows 10 SSH 和 PGAdmin SSH 隧道访问我的数据库。确实需要一段时间。 pgAdmin 的文档对此不是很清楚。这是我发现的不同之处:

使用 Windows 10 SSH 设置 SSH 隧道时,您需要将本地端口(在您的情况下为 9999)转发到远程端口(8888)。

在 pgAdmin 中,不再需要该本地端口。我的猜测是因为它已经知道你想通过哪个隧道访问哪个服务,它会在后台处理本地端口。在最常见的情况下,该隧道端口应该是 SSH 端口 22。

我建议对您当前设置的更改是:

    SSH Tunnel选项卡中,将隧道端口设置为22 在Connection选项卡中,将端口设置为8888

这应该可行。

【讨论】:

以上是关于SSH隧道及其使用的主要内容,如果未能解决你的问题,请参考以下文章

使用 PgAdmin 4 设置 SSH 隧道

如何检查是不是正在使用 ssh 隧道?

ssh隧道理解

如何使用 python 打开 SSH 隧道?

如何使用 Python 和 Paramiko 创建 SSH 隧道?

PyCharm SSH 隧道通过本地 ssh 配置 (~/.ssh/config)