允许反向 SSH 隧道但不允许简单 SSH

允许反向 SSH 隧道但不允许简单 SSH

我有一台位于 NAT 后面的计算机(我们将其命名为 A),我需要从另一台计算机(我们将其命名为 B)与它建立 SSH 连接。

我发现我需要一个 SSH 反向隧道,我尝试了一下,并且它有效。

authorized_keys为了使反向隧道工作,我必须在B 的文件中添加 A 的公钥。

问题是(出于安全考虑)我不希望计算机 A 能够ssh进入计算机 B 并查看/修改其中的文件(A 是 B 的从属)。

有可能避免这种情况吗?

答案1

authorized_keys一台计算机(我们称之为 A)[…] 另一台计算机(我们称之为 B)。[…] 我必须在B 的文件中添加 A 的公钥。

一种常见的情况是添加特定用户A 在auhorized_keys特定文件中用户密钥并不代表整个计算机A;同样,该authorized_keys文件也不属于整个B。

您可能在 B 的某个用户的文件alpha中添加了 A 的某个用户的公钥(这两个用户可能使用相同的登录名,但他们仍在不同的机器上,因此让我们保留不同的名称和)。authorized_keysbetaalphabeta

我的解决方案:将betaB 上的 登录 shell 设置为/bin/false。您可以使用 (在 B 上)执行此操作sudo usermod -s /bin/false beta

这将导致以下限制:

  • beta根本无法正常登录到 B;特别是ssh beta@B从 A 登录不会给任何人 shell,尽管 SSH 身份验证成功;
  • 像这样的命令ssh beta@B whatever不会成功;
  • SCP 和 SFTP 都无法访问beta账户(参见此评论)。

看起来 A 无法alpha查看或修改 B 中的文件。然而同时:

  • 任何有权限的人都beta可以用来建立到 B 的 SSH 连接,而无需在那里运行任何命令;这是在 A 上调用的ssh -N示例命令:alpha

      ssh -N -R 1234:127.0.0.1:22 beta@B
    
  • 你不必beta使用隧道(尽管-R如果不指定绑定地址,则只会绑定到 B 的环回接口,所以你必须在B使用隧道;另请参阅man 5 sshd_configGatewayPorts选项)。

另外检查MaxSessionsPermitOpen选项man 5 sshd_config。我认为,如果您正确使用它们,那么使用私钥的潜在攻击者alpha将无法“捕获” B 上的太多端口。


* 例外:SFTP 将起作用没有功能性的外壳如果服务器配置为使用Subsystem sftp internal-sftp

相关内容