所以我一直在使用 SSH 隧道来限制对内部站点或部分公共站点的访问,因为只有管理员才有 SSH 访问权限,所以我一直在使用标准的非 root/sudo 用户帐户。现在我正在扩展并试图让我当地大学的学生参与扩展他们的项目,他们将需要开始访问其中一些内部页面。
代理服务器是一个 CentOS 6.4 的机器,启用了 SELinux,除了代理之外不会运行任何其他服务。我希望最终设置一个完整的 VPN,但在这种情况下,它只是允许访问具有 IP 白名单的某些机器,而不是完整的内部网络访问。
我已经查看了使用具有 /bin/false 等内容的用户帐户设置 SOCKS 代理的所有方法,但是
A)他们假设只有一个端口或主机被转发(而在这种情况下,我有一组 VPS 实例,这些实例将在网络配置中按需更改),或
B) 正在使用常规 SSH 客户端而不是 PuTTY 之类的东西(尽管我很想强迫所有学生使用 VM 或直接安装 linux,但这不是一个选项,因为学校在他们的工程中使用 PuTTY供学生使用的硬件)。
这是我目前发现的:如果使用常规 ssh 客户端,我可以将用户 shell 设置为 /bin/false 并且用户可以在设置 SOCKS 代理时指定 -N 命令,但不幸的是对于 PuTTY 用户来说似乎不起作用(至少我无法让它工作)。
当 PuTTY 通过默认隧道选项打开隧道时,它必须打开一个外壳,该外壳在登录时立即断开连接,因为用户具有 /bin/false 外壳。如果我在 SSH 设置中指定“无外壳或命令”参数,代理选项似乎没有设置。如果我尝试在远程命令的 SSH 选项中设置代理,它仍然不会运行,除非我允许选项中的 shell 或其他命令。
我发现但不太合适的相关问题:
使用 PuTTY 和 nologin 创建 SOCKS 隧道 (这在技术上是可行的,但 shell 只是一个运行很长时间的睡眠命令,我担心它会被转义。我宁愿有一个真正的 noshell,然后是一个出于安全原因只是挂起的外壳)
https://askubuntu.com/questions/48129/how-to-create-a-restricted-ssh-user-for-port-forwarding (这不起作用,因为它需要用户使用真正安装的 ssh ,而像 PuTTY 这样的程序将无法运行)。我还需要它们能够访问网页,但我假设我可以简单地为帐户指定 PermitTunnel 而不是只允许特定端口。
ssh 代理用户的“noshell” (根据我上面提到的关于 …