拒绝 SSH 连接并显示消息

拒绝 SSH 连接并显示消息

我想仅允许某些主机通过 SSH 连接到我的服务器,并拒绝其余主机并显示友好的错误消息。系统的授权用户通常不是技术人员,他们通过 Filezilla 访问此系统。

我以为我可以使用 TCP Wrappers 来做到这一点,但是当我将下面的内容输入到我的客户端时hosts.deny,客户端只会收到错误消息“ssh_exchange_identification:远程主机关闭连接”

sshd : ALL \
  : twist /bin/echo "Sorry, but your host is not allowed to connect to this server." \
  : deny

我偶然发现一个脚本,SSH 扭曲,这似乎解决了这个问题,但我在客户端上看到同样的错误。

不管怎样,我在 RHEL 6.1 上用 OpenSSH 5.3p1 进行测试。

答案1

SSH Twist 看起来有点像黑客,而且我无法保证它适用于所有sshd版本——它对于在会话建立期间可以发送什么做出了不一定正确的假设。

这有点丑陋,但你可以做这样的事情sshd_config

Match Host allowedhost1
Match Host allowedhost2
# one for each host (or hostname pattern or address range) permitted
# no commands in them, just the match entries
# this just makes sure they don't fall into the following catch-all

Match Host *
    Banner /etc/ssh/refuse_msg
    DenyUsers *

答案2

类似于geekosaur的回答,我最终想到了以下解决方案:(我需要的消息不是针对不同的主机,而是针对不同的用户,但原理应该是相同的。)

Match User *,!user1,!user2,!root
    Banner /etc/ssh/refuse_msg
    ForceCommand echo

我没有让 ForceCommand 与多个“Match”行一起工作(就像 geekosaur 的回答一样),因为它总是使用 ForceCommand,可能是因为没有选项“ForceCommand off”。

手册页说,Match-Section 中的第一个语句“获胜”,但由于之前的 Match-Statements 不包含 Banner 或 ForceCommand,因此使用了末尾的语句。对于 Banner,我可以使用“Banner /dev/null”,但 ForceCommand 中没有任何内容可以输入...

相关内容