有没有一种简单的方法可以不记录特定的 sshd 事件?

有没有一种简单的方法可以不记录特定的 sshd 事件?

我的主机的监控工具正在端口 22 上与 ssh 定期连接,以查看服务是否已启动。

这使我的 /var/log/messages 中充满了此类消息:

Dec 13 22:20:17  sshd[29487]: Did not receive identification string from 80.xx.xx.xx

有没有一种简单的方法可以使该特定 IP 的“未收到来自的识别字符串”消息静音?

答案1

你有没有看过文档

有一个LogLevel QUIET|FATAL|ERROR|INFO默认为信息。

LogLevel ERROR关闭这些垃圾邮件登录消息。

答案2

如果不编写脚本来解析/var/log/messages并删除这些行(这是可能的,您甚至可以通过 运行它cron),您将禁用或重定向所有的ssh输出。这不是最好的主意,因为您可能会得到一些您想要查看的相关日志。

我会做什么是写这样的东西:

#! /bin/bash
sed "/$search/d" /var/log/messages >/var/log/tmp
mv /var/log/tmp /var/log/messages

将其保存在安全的地方并cron每天左右运行一次。我不知道您的提供商的运行频率,sshd因此您可以调整运行时间以满足您的需求。有关向 cron (cronjob) 添加规则的更多信息,请参阅这个非常好的教程

相反,如果您有权访问启动的脚本ssh(我怀疑您这样做)并且能够编辑它(我怀疑您可以),则可以使用 调用 ssh ssh -q。该q参数使ssh运行“安静”,这意味着没有任何记录。这是有风险的,应该避免。如果您能够编辑该文件,我会与您的托管提供商核实以确保它符合您的协议。

或者,您可以联系您的提供商,解释您的问题并询问他们是否可以(或让您做)修改ssh守护程序。


长话短说据我所知,不可能只阻止来自 的一条消息ssh。但是,您可以按特定的时间间隔解析消息文件以清理这些行,或者如果您可以找到提供程序启动的位置sshd,则可以向其发送安静命令。

答案3

我认为没有办法轻松地做到这一点sshd

我怀疑这是作者(通常是 OpenBSD 人员)的设计选择,因为他们几乎总是在安全方面“犯错”——在这种情况下,不为我们提供一个可以抑制重要信息的旋钮。消息。

您确实说过“容易”,所以这可能就是您需要的全部答案。

但如果您可能正在考虑不太容易的选择,我的建议是:不要这样做,这就是原因。

如果您像我一样,那么您提出这个问题的根本动机是让可操作的项目在日志中脱颖而出,并减少噪音。你不是一个人。 :-)

实际上,消息的类型有很多种:

  • 知名,
  • 很难关闭,并且
  • 永远无法付诸行动

...那是你真的想要的是 过滤它。那就这样做吧。

例如,我编写了一个脚本,可以过滤掉前一天日志中的“无趣”项目,并向我发送每日报告。你必须的非常小心你的过滤器,但如果做得正确,它会真正节省时间——而且会让真正需要你关注的东西脱颖而出

当然,我偶尔会查看我的原始日志,并且有其他方法来捕获真正紧急的东西。但是,一天中没有足够的时间每天手动仔细检查日志,尤其是当您有多个箱子要放牧,但您的商店不够大,无法保证大规模日志处理时。

话虽如此,以防万一您有真的这样做的令人信服的理由(MaxMackie 的解决方案与您的用例不匹配,因此您确实需要使这些消息消失,before它们到达系统日志),我认为您有两个选择:

.1.修改源码。

也不要这样做。太多的开销和风险——在发布漏洞和升级能力之间有太多的延迟。

.2.将sshd其输出发送到其他地方,然后自己将其发送到系统日志。

FreeBSD 允许您使用值指定sshd在启动时应传递给/etc/rc.conf或的参数。告诉使用选项(调试)和选项(记录到标准错误)运行:/etc/rc.conf.localsshd_flagssshd-d-e

sshd_flags="-d -e"

然后,您可以将输出通过管道传输到loggerPerl 或 Perl Sys::Syslog(使用包装器来清除任何奇怪的情况)。这并非易事,因为告诉守护进程非守护进程意味着您必须自己重新创建许多功能。如果需要,我可以提供更多详细信息。

但最好的选择是过滤。

相关内容