![如何实现SSH用户限制访问](https://linux22.com/image/192993/%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0SSH%E7%94%A8%E6%88%B7%E9%99%90%E5%88%B6%E8%AE%BF%E9%97%AE.png)
介绍 这是一个寻求答案扩展的问题如何限制 ssh 用户仅允许 ssh 隧道
问题陈述 我尝试实现参考中的建议,创建一个没有 shell 访问权限的用户,但无法以该用户的名义连接到隧道。
要求 我希望能够让未受保护的远程计算机(计算机 A)启动返回我的防火墙的反向隧道。机器 A 是一个无头盒子,没有用户输入。它在野外并且可能位于防火墙后面。我的防火墙 (MyFW) 是一台 Linux 机器,我有 CLI root 访问权限。
我需要机器 A 启动返回 MyFW 的反向 ssh 隧道。通常会在MyFW受保护端的用户机器C上创建本地隧道。本地 ssh 隧道将根据需要连接到 MyFW 的反向隧道。
如果有人闯入机器 A,并找到反向隧道,我不希望他们能够使用反向隧道来访问 MyFW 的隧道入口(端口)之外的内容。
我尝试过什么
我使用 ssh 和隧道已经有几年了,所以我了解它们的一般配置和操作。为了进行测试,我在办公桌上安装了两台机器,机器 A 和 B。两台机器都是 Linux 机器,都没有防火墙。目的是让最简单的设置发挥作用。
我首先在机器 A 上创建 ssh 密钥:
ssh-keygen
以通常的方式。
将用户“隧道”添加到充当 MyFW 的机器 B。以下命令由另一个用户使用 sudo 执行。
useradd tunnel -m -d /home/tunnel -s /bin/true
隧道用户没有密码。我创建了一个主目录,因为上面的命令没有。
mkdir /home/tunnel/.ssh
我为用户隧道创建了 ssh 密钥并将它们放在/home/tunnel
目录中
ssh-keygen
我手动将远程机器 A 上的公钥复制到 MyFW 机器 B 中的 /home/tunnel/.ssh/authorized_keys 文件中。
我在 ssh 配置文件中设置值:
AllowTcpForwarding Yes
GatewayPorts yes
ExitOnForwardFailure=yes
这样做的目的是在防火墙上创建用户,以创建和链接隧道,同时阻止黑客的任何访问尝试。真正的远程机器 A 上没有任何有价值的东西,因此即使黑客破坏了它也没有多大关系。
测试
为了进行测试,我在远程机器 A 上设置了本地隧道,然后尝试从机器 A ssh 到 MyFW。
这适用于普通“用户”:
$ ssh -L 9022:localhost:222 [email protected]
$ ssh localhost -p 9022
正如预期的那样,第一个命令创建隧道。第二条命令通过 ssh 隧道连接到另一端计算机的 CLI。
但这不适用于受限的“隧道”:
$ ssh -L 9222:localhost:222 [email protected]
$ ssh localhost -p 9222
CLI 报告连接已关闭。我在系统日志中看不到任何内容来显示问题所在。
鉴于隧道用户没有 shell,我是否应该期望隧道 ssh 能够工作?当我写这篇文章时,我想也许不是。我该如何测试隧道?
问题
我究竟做错了什么??
有人可以尝试一下并在我的中发布一组工作说明或错误吗?
如何测试具有受限用户的隧道?
编辑
用户隧道帐户是在没有密码的情况下创建的。这会导致使用 ssh 时出现问题,因为报告隧道帐户已锁定。
似乎创建一个没有密码的帐户来试图阻止密码黑客攻击(如果密码不存在则无法破解),这是一个坏主意,并且会削弱安全性。
答案1
用于-N
建立仅隧道连接
ssh -N -L 9222:localhost:222 [email protected] &
答案2
在不更改任何配置文件等的情况下,我尝试了以下命令序列。这些命令构建了从模拟远程计算机到模拟本地防火墙计算机的隧道。隧道入口是远程计算机上的端口 9222。
在远程计算机上的终端上:
$ ssh -L 9222:localhost:22 -N [email protected]
建立到 IP 172.30.21.157 的防火墙的隧道。请注意,如果不包含 -N 选项,连接将自动关闭。隧道用户只存在于防火墙上,没有密码。远程计算机上不存在隧道用户。 ssh 密钥已提前交换,因此防火墙接受与隧道用户的连接。用于构建隧道的 ssh 命令保留在前台(仅用于测试)。输入上述命令后,不出现提示。仅当隧道关闭且“cntl-C
这是预期行为”时,才会出现提示。
为了将远程计算机连接到防火墙 CLI,我在远程计算机上的另一个终端中运行了以下命令。
$ sudo ssh -p 9222 fwuser@localhost
远程计算机上的此命令将在本地主机(远程计算机)上的端口 9222 上与防火墙计算机上的 fwuser 帐户建立 ssh 连接。这是问题中显示的我的命令的根本原因问题。我没有在失败的命令中指定正确的用户(fwuser)。
ssh 认为它是在输入命令的同一台机器上建立连接。它实际上是在建立到端口 9222 的连接,并通过隧道到达隧道的另一端以 fwuser 身份登录。我在远程计算机上运行终端,但出现防火墙计算机的提示。
一旦隧道建成,隧道用户对于流经隧道的流量实际上是不可见的。
总之,在构建隧道时,使用没有 shell 访问权限的受限用户就像任何其他用户一样工作。交换 ssh 密钥确实需要花费更多的精力。 -N 选项在构建隧道的命令中至关重要。