如何创建 SSH 隧道

如何创建 SSH 隧道

使用 SSH 隧道是否可以实现以下场景?

  1. 我的工作站-->跳转服务器-->应用服务器-->最终资源(端口 443)

  2. 我的工作站 --> 应用服务器 --> 最终资源(端口 443)

应用服务器能够访问最终资源,但我无法访问它们。我想使用本地工作站进行一些测试。我正在使用 PuTTY 创建 SSH 连接。

我读过一些有关 SSH 隧道的文章,但我仍然不明白它是如何工作的以及如何实现这样的事情。

答案1

首先,请记住,端口转发仅在服务器允许的情况下才有效 - 因为这是一个安全相关的设置,因此可以根据服务器管理员的判断禁用它。

此外,请在 OpenSSH 的手册页中查找有关这些选项的详细信息:

这将通过 jump-server 连接到 app-server,使用源箱的 ssh-agent 密钥登录到 app-server,并建立从 127.0.0.1:8443 到 app-server:443 的隧道(app-server 在本例中为“localhost”)。访问 127.0.0.1:8443 将产生访问 app-server:443 时返回的任何结果。

ssh -A -L 8443:localhost:443 -J user@jump-server user@app-server

这做了同样的事情,但是省去了跳转服务器,适合您列出的第二种情况:

ssh -L 8443:localhost:443 user@app-server

如果这看起来有点笨拙,必须明确指定要转发的端口,请尝试以下操作:

ssh -D 5050 -J user@jump-server,user@second-jump-server user@app-server
ssh -D 5050 -J user@jump-server user@app-server
ssh -D 5050 user@app-server

-D 5050启动ssh一个 SOCKS5 代理,该代理侦听 localhost:5050 并将所有流量转发到最终目标主机 app-server(如示例中所示)。流量被转发,就好像它是从 app-server 发送的一样,DNS 查找也可以传递。要使其正常工作,您需要设置浏览器以使用 SOCKS5 代理。

添加-N将阻止ssh在登录后生成 shell,并且将保持打开连接(和阻止),直到CTRL+C按下或连接以其他方式终止。

更新:所有命令都应该从您的工作站运行。

如果您无法通过 SSH 访问应用服务器,请尝试以下操作:

(1) ssh -L 8443:app-server:443 user@jump-server
(2) ssh -D 5050 user@jump-server

对于(1),您需要访问https://本地主机:8443,使用(2)和正确配置的浏览器浏览https://应用程序服务器/

答案2

尝试

ssh -A -t users@jump-server -A -t user@app-server

更新:抱歉,说得有点模糊。这适用于您的第一个场景。

-A转发代理身份验证连接,使您可以使用经过身份验证的会话进行下一跳。如果您使用相同的密钥连接到每个系统,但不想将私钥留在中间主机上,这将特别有用。上述任一情况都可以删除,您将默认进行身份验证,这意味着从每一跳到下一跳。

-t强制伪终端模拟,使得远端发生的事情在中间会话中来回流动。

这样做的好处是,您只需获得一个命令,即可进入远端的会话。

至于您的第二种情况,Daywalker 链接的解决方案提供了几个很好的选择,用于-L将本地端口映射到中介和远程系统或交换机,-D以创建一个从中介流出的开放式隧道。

相关内容