我有 linux (Ubuntu) 服务器,我只能通过 ssh (端口 22)进行 root 访问。在该服务器上有一个 MySQL 数据库侦听端口 3306。是否可以使用 putty(在我的机器上)和隧道(在 linux 机器上)创建从我机器上的本地端口(例如 4000)到Linux 服务器在端口 22 上,然后从服务器到其自身在端口 3306 上?
答案1
我画了一些草图
键入 ssh 隧道命令的机器(或者在您的情况下:启动带有隧道的 Putty)称为»你的主人«。
介绍
当地的:
-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
ssh -L sourcePort:forwardToHost:onPort connectToHost
表示:使用 ssh 连接到connectToHost
,并将所有连接尝试转发到当地的sourcePort
onPort
到名为 的计算机上的端口forwardToHost
,可以从该connectToHost
计算机访问该端口。偏僻的:
-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.
ssh -R sourcePort:forwardToHost:onPort connectToHost
表示:使用 ssh 连接到connectToHost
,并将所有连接尝试转发到偏僻的sourcePort
onPort
到名为 的计算机上的端口forwardToHost
,可以从本地计算机访问该计算机。
你的例子
第一张图片代表您的情况。名为的蓝色框your host
是您的 Windows 计算机,您可以从其中启动 Putty 到 Ubuntu 服务器(remotehost
在我的图像中称为该服务器)。到绿色端口(在您的例子中为端口号)的连接将被转发到您的 Ubuntu 服务器计算机(即 Ubuntu 服务器本身)的4000
粉红色 MySQL 端口。3306
localhost
使用 Putty 进行设置
启动 Putty 并输入您常用的连接设置(主机名或 IP 地址) 在左侧的树中,导航到
连接 → SSH → 隧道
并创建一个新的当地的与源端口4000
(图像中的 123)和目标端口localhost:3306
(图像中的 localhost:456)的隧道。
不要忘记点击添加。
然后导航回会议然后单击节省以保留您的设置以供下次使用。现在您可以使用保存的连接登录到您的服务器,成功登录后,每次连接到主机上的端口 4000 时,您实际上都会连接到 Ubuntu 服务器上的端口 3306。
答案2
简单的答案是肯定的,但请注意,隧道实际上是在您的计算机上启动的。它的工作方式是,您创建一个到服务器的 SSH 连接(这是安全的),然后指示 SSH 侦听您这边的端口并将传入的任何连接转发到服务器上特定主机地址上的特定端口。服务器端。隧道的目标不必是同一台服务器 - 它可以是任何其他有效地址,如果它不是运行 SSH 服务器本身的服务器 - 将看到传入连接,就好像它来自 SSH 服务器而不是来自您的客户。
要进行设置,请打开 Putty 配置对话框,选择通常用于访问服务器的连接设置,然后单击“加载”(而不是“打开”)。然后在左侧的树中,导航到 Connection->SSH->Tunnels 并创建一个新的“本地”隧道,源端口为 4000,目标为“localhost:3306”(因为目标地址是在服务器上解析的,从服务器的角度来看,MySQL 端口位于本地主机上)。然后导航回“会话”并单击“保存”以保留您的设置以供下次使用。现在您可以使用保存的连接登录服务器,成功登录后,每次连接到计算机上的端口 4000 时,您实际上都会连接到服务器上的端口 3306。
如果您认真研究隧道并运行 MS-Windows 客户端,那么我建议您查看腻子隧道管理器它使用 Putty 轻松设置和运行隧道,无需打开 Putty 控制台。