记录SSH访问尝试


60

我已经用openssh配置了一个ubuntu服务器,以便连接到它并执行来自电话或笔记本电脑等远程系统的命令。问题是...我可能不是唯一的一个。

有没有办法知道对服务器进行的所有登录尝试?


您还应该考虑在非标准端口上运行sshd。同样,如果单个IP在一分钟内尝试X次新的ssh连接,则可以设置iptables拒绝新的连接尝试。
ivanivan '16

对我来说,问题不是的fail2ban但sshguard,这是我从来没有听说过
雷福斯

Answers:


55

在Ubuntu服务器上,您可以在文件中(何时何地)登录谁/var/log/auth.log。在这里,您可以找到以下条目:

May  1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)

2
出于好奇,Ubuntu是否具有lastb命令
布莱奇利2014年

1
@JoelDavis我的Ubuntu 12.04可以,但是输出是单行,根本与您的输出完全不同。也许需要进行配置。
2014年


在Ubuntu Server 14.04及更高版本上,应显示为/var/log/auth.log
Serge Stroobandt

29

在基于Red Hat的发行版(例如Fedora / CentOS / RHEL)上,您可以检查文件中是否登录了用户/var/log/secure

如果您想了解更多信息,请阅读标题为:我如何记录SSH访问尝试并跟踪SSH用户最终在服务器上执行的超级用户问答


1
/var/log/secure我的任何Ubuntu系统上都没有。
2014年

@Anthon,令人惊讶的/var/log/auth是我的系统中没有。这就是为什么在发布答案之前,我检查/var/log/secure了系统中是否装有Ubuntu服务器:)
Ramesh 2014年

我检查了14.04、12.04和8.04下的旧计算机。您正在运行哪个版本?为获取该文件做了什么特别的事情吗?
2014年

@Anthon,原来我测试的服务器是RHEL。但是,我提供的链接中的答案是针对Ubuntu的,这似乎很奇怪,因为您已经检查了ubuntu的3个变体,但没有/var/log/secure
拉梅什2014年

6
/var/log/secure是Fedora / CentOS / RHEL ism。
slm

8

在Ubuntu上,您可以通过SSH登录并使用Linux tail命令显示文件的最后x行/var/log/auth.log。通过SSH登录后,请使用以下命令查看SSH日志的最后100行:

tail /var/log/auth.log -n 100

甚至更清洁

tail -100 /var/log/auth.log | grep 'sshd'

7

请注意,Ubuntu上的默认配置是不将ssh登录记录到/var/log/auth文件中。这是INFO日志记录级别。

如果要在日志文件中包含登录尝试,则需要编辑该/etc/ssh/sshd_config文件(以root或sudo身份)并将其LogLevel从更改INFOVERBOSE

之后,使用以下命令重新启动sshd守护程序

sudo service rsyslog restart

之后,ssh登录尝试将被记录到/var/log/auth.log文件中。


4

我的建议是使用auditd。这是使用Linux内核的审核子系统进行记录的,我认为如果您是认真的人,则应该使用正确的方法进行记录。考虑到问题{security related}的性质,您也应该使用PAM。在仅审核和安装PAM的默认级别上,您应该自动将所有成功和失败的SSH尝试记录在您的audit.log文件中。因此,您实际上无需配置任何东西,只需安装审核PAM。我知道SLES的第一手资料。并且可以肯定,RHEL和任何其他企业版linux都将以类似方式运行。

http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html

通过产生的原始审计日志中的进程auditd您可以使用使用类似aureport过滤这是在描述其进程auditd手册页,写自己的文本解析器,或者只是使用VI和搜索关键词。

这是我的/var/log/audit/audit.log文件的例外,我在ssh's进入我的linux服务器。

node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
  • 从上面开始,我的服务器名称是shark
  • 像这样的许多行在audit.log中,我希望基于exe =“ / usr / sbin / sshd”的这一行
  • ssh'进入的帐户的uid是auid的值,在本示例中为23456
  • 与uid关联的用户帐户的名称由acct =“ ron”指定
  • 多数情况下,审核系统会记录尝试连接的系统的dns主机名,但始终有其IP地址
  • 这是划时代的时间,所以你必须要转换的是通过类似的条目的日期date --date @1480622612.317导致Thu Dec 1 15:03:32 EST 2016,是当我SSH方式登录我的服务器。

什么时候res=failed是您想调查那些ip地址和主机名,以查看尝试使用什么用户名尝试连接的系统。很显然,成功的ssh尝试了解您系统上发生的情况-例如,您的同事bob每天坐在同一张桌子上,主机名= bobscomputer和ip地址= 192.168.5.5;例如,如果您在昨天凌晨2点看到以IP地址10.10.5.6的用户名成功进行ssh尝试,那么与bob进行调查可能是您的最大利益。可能有人尝试入侵?不久之后,su会尝试从bob的帐户中扎根审核日志吗?

当你看到重复res=failedauid=0acct=root那么这是有人试图ssh到你的盒子到根帐户,当你修改/etc/hosts.deny与IP地址SSHD。


2

我知道这很旧,但是我写了一些东西来监视ssh连接成功/失败的尝试。以及使用sshguard时禁止的IP。该软件是用Python编写的。当某人通过ssh成功连接,某人输入ssh密码错误或由于多次尝试失败而被禁止时,它将向您发送电子邮件。希望这会对以后搜索此问题并找到我的代码的人有所帮助!

https://github.com/amboxer21/SSHMonitor

对于python脚本,我编写了一个bash脚本来监视该过程。它通过root cron任务检查它是否每分钟都在运行。如果未运行,它将启动另一个进程。root cron任务每分钟调用一次。


-2

对于SSH命令记录,我遇到过的最好的事情是rootsh,该工具允许管理员从具有广泛日志记录级别的每个会话中获取每个命令。

我写了一个脚本来在ubuntu和CentOS / RHEL中安装和配置ROOTSH

从github下载,这里是链接

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh

我认为这是提升github个人资料的一种不好的方法...基本上,您是在要求从Web下载脚本并使用root执行。投票
UserK

我不是在推广我的github个人资料,我只是想简化事情,就像上面的人所做的那样,如果您也反对我也将个人资料推广为个人。此外,在堆栈交换的规则指南中,没有任何东西像我们不能共享个人存储库中的代码文件那样编写。
曼苏尔·阿里

请原谅我不好的幽默感。首先,谢谢您对曼苏尔的回答。降低投票率的事实是您要求以root用户身份执行一堆未知命令。上次我这样做的时候,里面有一个“ rm -R斜线”。
UserK

1
好的,顺便说一下,堆栈交换将不允许我使用如此长的代码,这就是为什么我将脚本放入答案中。Linux非常简单。
曼苏尔·阿里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.