我们有一个 Windows 桌面应用程序,它通过套接字连接连接到第三方服务器。第三方服务器要求我们从固定的公共 IP 地址进行连接。我们需要从各种 IP 地址进行连接,因此我设置了一个 (Linux) 服务器来隧道连接,以便第三方服务器始终认为所有连接都来自同一个 IP 地址:
ssh -N -L 端口:127.0.0.1:端口账号@ip -p 端口2
隧道似乎运行良好;作为测试,我可以从创建隧道的帐户通过 telnet 连接到该隧道。
为了允许 Windows 计算机(运行应用程序的计算机)通过隧道,我在 ssh 命令行中添加了 -g。现在其他计算机也可以通过隧道进行 telnet。到目前为止一切正常。但是,我希望能够限制谁可以使用隧道。当我 telnet 到 Linux 服务器时,我期望系统提示输入创建隧道的帐户的用户名/登录名;相反,连接只是在没有限制的情况下创建的。我不想使用 IP 地址过滤,因为这是我首先设置 Linux 服务器的原因(允许任何 IP 地址)。如何让 Linux 服务器在从另一台计算机连接到隧道时提示输入用户名/密码?这是否可以通过 ssh 的一些额外或不同的命令行选项来实现,还是我需要使用其他东西?
我原本希望运行类似bitvise 隧道在 Windows 桌面计算机上。因此,我会告诉 Windows 桌面应用程序连接到它运行的 Windows 计算机上的本地端口。该本地端口将由隧道传输到 Linux 服务器。Linux 服务器又将隧道传输到第三方服务器。
答案1
如果您需要身份验证,那么您可能应该放弃-g
使隧道对网络可用的选项。然后要求每个需要访问远程系统的隧道的人都使用隧道与您的 SSH 服务器建立连接。
当从另一台机器连接到隧道时,如何让 Linux 服务器提示输入用户名/密码?
SSH 中没有内置任何功能,可以自动在 telnet 会话之上添加身份验证步骤。如我上面建议的简单解决方案是,只有当用户可以向 ssh 服务器进行身份验证时,才允许访问隧道。使用客户端和 SSH 服务器之间的 VPN 可以获得类似的结果。
我不确定这个隧道提供的确切性质,但你可以在 SSH 服务器上设置一个帐户。然后配置此帐户以自动运行 telnet 来连接到此隧道连接。
因此,您可以创建一个帐户 tunnelaccess,然后将类似这样的内容添加到您的 sshd_config。这样,每当用户以tunnelaccess
命令身份登录时,连接到远程隧道就会立即发生。
Match User username
AllowTCPForwarding no
X11Forwarding no
ForceCommand connect tunnel # replace with tool to connect to tunnel