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