我有一台位于 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_keys
beta
alpha
beta
我的解决方案:将beta
B 上的 登录 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_config
,GatewayPorts
选项)。
另外检查MaxSessions
和PermitOpen
选项man 5 sshd_config
。我认为,如果您正确使用它们,那么使用私钥的潜在攻击者alpha
将无法“捕获” B 上的太多端口。
* 例外:SFTP 将起作用没有功能性的外壳如果服务器配置为使用Subsystem sftp internal-sftp
。