我已经设置了一个带有 Raspberry-Pi 的反向 ssh 设备,用于在客户站点使用,以连接到我必须通过 USB 转 RS232 适配器支持的设备。我已经与客户的 IT 人员解决了这个问题,并且该设备已经配置、测试并且工作正常。
但为了强化本地网络访问,我想将登录限制为仅允许通过反向 SSH 隧道登录,并且不允许本地客户网络上的任何人登录。
传出的反向 ssh 连接使用没有密码的 4096 位密钥文件来连接到服务器,但当我通过反向 ssh 连接从服务器连接回 Pi 时,我仍然看到用户/密码提示。这对我来说不是问题,但我只是担心限制本地任何人使用本地 telnet 或 ssh 登录的能力。我已经在唯一的活动帐户上设置了良好的密码,因此我怀疑是否有人能够成功登录。
如果出于维护目的仍允许使用连接的 USB 键盘登录本地计算机,那就太好了,但这不是强制性的。该设备位于上锁房间的上锁金属外壳内,因此未经授权的物理访问并不是一个大问题。我只想锁定本地网络对 telnet 和 ssh 登录的访问,同时仍然允许通过反向 ssh 隧道进行 ssh 登录。
答案1
对于您的 RPissh
守护程序,请查看sshd_config
和AllowUsers
选项。您可以在其中指定主机名。
由于您是反向隧道,因此连接可能来自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 的连接。无论您想要这样还是希望它接受连接并仅拒绝授权,都是一个偏好问题(或蜜罐设计:))