使用 PuTTY 且无 shell 的受限用户的 SSH 隧道

使用 PuTTY 且无 shell 的受限用户的 SSH 隧道

因此,一段时间以来,我一直在使用 SSH 隧道来限制对内部站点或部分公共站点的访问,而且由于只有管理员才有 SSH 访问权限,因此我一直在使用标准的非 root/sudo 用户帐户。现在,我正在扩展并试图让我当地大学的学生参与扩展他们的项目,他们将需要开始访问其中一些内部页面。

代理服务器是 CentOS 6.4 机箱,启用了 SELinux,除了代理之外不会运行任何其他服务。我希望最终设置一个完整的 VPN,但在这种情况下,它只是允许使用 IP 白名单访问某些机器,而不是完全的内部网络访问。

我已经研究过所有设置 SOCKS 代理的方法,用户账户中有 /bin/false 等内容,但

A)他们假设只有一个端口或主机被转发(而在这种情况下,我有一组 VPS 实例,它们将根据网络配置的需求而改变),或者

B) 使用常规 SSH 客户端而不是 PuTTY 之类的客户端(尽管我很想强迫所有学生使用 VM 或直接安装 Linux,但这不是一个选择,因为学校在其工程硬件上使用 PuTTY 供学生使用)。

这是我目前发现的:如果使用常规 ssh 客户端,我可以将用户 shell 设置为 /bin/false,并且用户可以在设置 SOCKS 代理时指定 -N 命令,但不幸的是对于 PuTTY 用户来说,这似乎不起作用(至少我无法让它工作)。

当 PuTTY 通过默认隧道选项打开隧道时,它必须打开一个 shell,该 shell 在登录时会立即断开连接,因为用户有一个 /bin/false shell。如果我在 SSH 设置中指定“无 shell 或命令”参数,代理选项似乎无法设置。如果我尝试在远程命令的 SSH 选项中设置代理,除非我在选项中允许使用 shell 或其他命令,否则它仍然无法运行。

我找到了相关问题但不太合适:

使用 PuTTY 和 nologin 创建 SOCKS 隧道 (这个在技术上是可行的,但是 shell 只是一个运行很长时间的睡眠命令,我担心它会被逃脱。我宁愿有一个真正的 noshell,而不是一个出于安全原因挂起的 shell)

https://askubuntu.com/questions/48129/how-to-create-a-restricted-ssh-user-for-port-forwarding (这不起作用,因为它要求用户使用真正的 ssh 安装,而像 PuTTY 这样的程序将不起作用)。我还需要他们能够访问网页,尽管我认为我可以简单地为帐户指定 PermitTunnel,而不是仅允许特定端口。

ssh 代理用户的“noshell” (由于我上面提到的原因,这个方法不适用于 PuTTY,因为 PuTTY 需要启用命令来设置 SOCKS 代理)

有什么建议吗?我可能很容易遗漏了一些东西,但我不确定。

-吉姆

答案1

我找到了一个解决方案(在一篇这样的帖子下,没有使用像 nologin 或 noshell 这样的标签,而是使用了一个针对 Windows 用户的非常简单的技巧,但我让它在没有 shell 的情况下为我工作)。

我使用此帖子的答案创建了一个批处理脚本,该脚本可以运行 PuTTY 的默认安装并设置隧道,而无需执行会导致 shell 断开连接的命令:

对于我的 Windows 用户来说,SSH 隧道非常简单

"C:\Program Files (x86)\PuTTY\plink.exe" -v -N -D localhost:8080 proxy@remote_host

由于这使得使用 PuTTY 的 Windows 用户现在可以访问隧道,因此我可以继续使用帐户 shell 作为 /bin/false

发在这里是为了任何可能遇到类似情况的人解决这个帖子。如果有其他解决方案,我很乐意听听!

现在我只需要尝试使用我在所有系统上实施的基于 SSH 推送的双因素系统来实现这一点,但这是在其他一切正常后才需要进行的工作。

-吉姆

答案2

刚刚看到PuTTY有以​​下选项,它可能就是您正在寻找的: 连接->SSH->不启动 shell 或命令

如果启用,则建立连接,控制台上不再显示,但它保持活动状态并且隧道工作正常。希望有帮助。

相关内容