锁定反向 ssh 设备上的本地登录

锁定反向 ssh 设备上的本地登录

我已经设置了一个带有 Raspberry-Pi 的反向 ssh 设备,用于在客户站点使用,以连接到我必须通过 USB 转 RS232 适配器支持的设备。我已经与客户的 IT 人员解决了这个问题,并且该设备已经配置、测试并且工作正常。

但为了强化本地网络访问,我想将登录限制为仅允许通过反向 SSH 隧道登录,并且不允许本地客户网络上的任何人登录。

传出的反向 ssh 连接使用没有密码的 4096 位密钥文件来连接到服务器,但当我通过反向 ssh 连接从服务器连接回 Pi 时,我仍然看到用户/密码提示。这对我来说不是问题,但我只是担心限制本地任何人使用本地 telnet 或 ssh 登录的能力。我已经在唯一的活动帐户上设置了良好的密码,因此我怀疑是否有人能够成功登录。

如果出于维护目的仍允许使用连接的 USB 键盘登录本地计算机,那就太好了,但这不是强制性的。该设备位于上锁房间的上锁金属外壳内,因此未经授权的物理访问并不是一个大问题。我只想锁定本地网络对 telnet 和 ssh 登录的访问,同时仍然允许通过反向 ssh 隧道进行 ssh 登录。

答案1

对于您的 RPissh守护程序,请查看sshd_configAllowUsers选项。您可以在其中指定主机名。

由于您是反向隧道,因此连接可能来自localhost等等

AllowUsers yourusername@localhost

位于/etc/ssh/sshd_config(或您的操作系统放置的任何地方)可能就足够了。更改后请记住重新启动sshd(或只是 SIGHUP)sshd_config

由于您只是触摸,sshd因此串行控制台登录不会受到影响。

答案2

由于 RPi 连接到服务器,然后创建反向 SSH 隧道,因此您可以sshd在 RPi 上的本地主机上运行。

首先添加一条bind_address反向隧道命令,即执行ssh从 RPi 到服务器的调用,如下所示:

ssh -R localhost:6060:localhost:22 -i path/to/key me@server

是的,这是localhost两次:

  • localhost:22是 RPi 上流量重定向的位置。
  • localhost:6060是将在服务器上侦听的端口(您可能希望也可能不希望它在本地主机上,因为服务器可以从互联网上获得,您可能认为这是本地主机)。

现在,在 RPi 上您可以添加/etc/ssh/sshd_config以下内容:

ListenAddress 127.0.0.1

并重新启动sshd

现在,RPi 将拒绝本地网络上到端口 22 的连接,因为套接字已绑定到localhost(在环回时,与具有本地 IP 的接口不同的接口),但它会应答反向 SSH 隧道,因为该套接字显式绑定localhost到隧道的 RPi 一侧。

ssh -p 6060 user@rpi

将正常从服务器连接到 RPi。

注意:这可能很危险,因为没有简单的方法可以让 RPi 再次应答来自本地网络的连接。如果出现严重故障,解决问题的唯一方法就是去那里连接屏幕和键盘。说真的,先测试一下,如果你在某个地方犯了错字,你将需要物理访问。

注 2:此解决方案与 Stephen Harris 的解决方案之间的唯一真正区别是 RPi 现在将拒绝与端口 22 的连接。无论您想要这样还是希望它接受连接并仅拒绝授权,都是一个偏好问题(或蜜罐设计:))

相关内容