想查哪个IP登录了服务器,核心思路就两条:查登录记录和查当前连接,前者用last、lastlog和认证日志,后者用ss或netstat,所有命令都能在Linux和Windows上找到对应版本。下面把实操方法按场景拆开,每一步都给你能直接照抄的命令。
查登录记录:last命令和wtmp日志
服务器上每一次SSH登录、终端登录,系统都会默默记进日志文件。大部分Linux发行版用的是/var/log/wtmp,这个文件二进制格式,不能直接cat,需要用last命令解析。
last命令的常规用法
直接敲last,屏幕会列出完整的登录历史,包括登录用户、来源IP、登录时间、退出状态,输出格式长这样:
root pts/0 203.0.113.5 Thu Mar 14 09:22 still logged in
admin pts/1 198.51.100.23 Thu Mar 14 08:15 - 09:01 (00:46)
reboot system boot 5.15.0-91-generic Thu Mar 14 07:30 still running
- 第一列是用户名,第二列是终端类型(pts/0表示远程SSH终端),第三列就是来源IP。
- 看到
still logged in说明这个会话还活着,在排查当前入侵时尤其值得注意。 - 想只看某个用户的登录历史,加参数:
last root。 - 想查某个IP到底登录过几次,用
last | grep 203.0.113.5。
常用参数:-a和-n
last -a可以把IP显示在最后一行,方便人眼快速扫。last -n 20只显示最近20条记录,日常巡检时够用,不用翻几百行。
关键点来了:如果日志文件被轮转或清空,last输出会不完整,这时可以查看历史轮转文件/var/log/wtmp.1,用last -f /var/log/wtmp.1读取,多数服务器会保留一到两周的轮转记录,这往往是追溯攻击者的重要线索。
lastlog:查看所有用户上次登录
lastlog命令展示的是每个用户最近一次登录的IP和时间,比last更简洁,输出包括系统用户(如daemon、bin),这些通常显示Never logged in,忽略即可,重点看root和真实业务账号的最近登录IP是否符合预期。
对比表格:last与lastlog
| 命令 | 查看范围 | 典型用途 |
|---|---|---|
| last | 全部登录历史,含多次记录 | 追溯某时间段内所有IP,排查异常登录 |
| lastlog | 每个用户最近一次登录 | 快速判断某个账号是否被异地登录 |
| last -f 文件 | 指定轮转日志文件 | 日志被清理后查历史记录 |
查SSH认证日志:auth.log还是secure
登录记录能告诉你“有哪些IP登过”,但

查SSH认证日志才能回答“这个IP登录成功没有”,攻击者反复尝试密码的痕迹,全在认证日志里。
Linux下认证日志位置
- Debian/Ubuntu系:
/var/log/auth.log - CentOS/RHEL系:
/var/log/secure
查看最近SSH登录成功和失败的IP,用下面这条:
grep "sshd" /var/log/auth.log | grep "Accepted" | awk '{print $11}'
这条命令把所有SSH登录成功的IP列出来,$11字段是auth.log中来源IP的位置,如果想看失败尝试,把Accepted换成Failed。
一条日志看懂登录结果
真实的auth.log记录长这样:
Mar 14 09:22:01 web01 sshd[29384]: Accepted publickey for root from 203.0.113.5 port 52341 ssh2: RSA SHA256:xxxx
Mar 14 08:10:33 web01 sshd[29102]: Failed password for invalid user admin from 198.51.100.23 port 22101 ssh2
Accepted表示登录成功,后面跟着用户名和来源IP。Failed password表示密码错误,如果某IP短时间内大量触发Failed记录,基本可以断定是暴力破解。- 注意
invalid user字样,说明攻击者尝试了一个系统里不存在的用户名,这类记录恶意特征明显。
统计暴力破解来源IP
一条命令拉出尝试次数最多的前10个IP:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10
输出里最左边的数字是失败次数。如果某个IP失败几十次甚至几百次,直接封掉,封禁方法下文细说。
查当前活跃连接:ss命令实时排查
有时候你要的不是历史记录,而是此时此刻谁正连着你的服务器,这种情况用ss命令,它是netstat的现代替代品,输出更快信息更全。
查看所有SSH连接
ss -tunap | grep :22
输出示例:
ESTAB 0 0 203.0.113.5:22 198.51.100.23:52341 users:(("sshd",pid=29384,fd=3))
ESTAB是已建立的连接,来源IP是第二列结尾的51.100.23。- 如果看到大量
SYN-SENT或SYN-RECV状态,说明服务器可能正在被扫描或洪水攻击。 - 把所有连接按IP统计,用
ss -tunap | grep :22 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c,一眼看出哪个IP建立的连接数异常。
Windows服务器怎么看
Windows用netstat -ano | findstr :3389,查看RDP远程桌面连接,最后一列是PID,配合任务管理器能定位到具体进程,Windows的登录日志在事件查看器里,

安全日志事件ID 4624代表登录成功,4625代表失败,筛选来源IP在“常规”选项卡的“源网络地址”字段。
日志被清空后还能查什么
行业共识认为,多数攻击者在取得权限后会清理日志,last输出可能变成空白,但这不代表无迹可寻:
- bash历史记录:
history或/root/.bash_history,看攻击者执行过什么命令。 - 进程列表:
ps aux,排查异常进程如挖矿程序。 - 临时文件目录:
ls -la /tmp,很多攻击脚本落地在/tmp。 - 登录成功的IP如果走SSH,密钥文件
~/.ssh/authorized_keys里可能被追加了攻击者的公钥。
查Web层访问:access.log与IP溯源
如果服务器是Web服务器,查访问日志能定位到具体请求来源IP,这在排查CC攻击、恶意爬虫时最常用。
Nginx和Apache的访问日志
- Nginx:
/var/log/nginx/access.log - Apache:
/var/log/apache2/access.log或/var/log/httpd/access_log
查看访问量最大的前10个IP:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
- 输出第一列是请求次数,第二列是IP。
- 正常业务IP请求量分布均匀,某一IP请求量占全部请求的相当比例时,大概率是爬虫或攻击。
- 查看某IP具体请求了什么URL:
grep "203.0.113.5" /var/log/nginx/access.log | tail -50,看它是在访问正常页面还是扫描后台路径。
实时跟踪新IP访问
tail -f /var/log/nginx/access.log
每有新请求实时打印一行,配合浏览器访问测试,能立刻验证自己的出口IP是否被正常记录。
服务器被异地登录怎么查:一个完整排查场景
假设你收到服务器异地登录的告警,或者发现某个账号在陌生IP上登录过,按下面顺序排查,不遗漏关键证据。
第一步:确认登录来源和时间
last -n 20
找到异地IP对应的登录记录,记录下精确到秒的登录时间,如果记录显示登录时间在深夜、且你本人没有操作,基本可以判定异常。
第二步:检查SSH密钥是否被植入
cat ~/.ssh/authorized_keys
逐行检查公钥内容,和你在本地电脑上的公钥对比。陌生的公钥意味着攻击者拿到了永久的免密登录权限,比单纯盗密码更严重。
第三步:封禁可疑IP
Linux下用iptables封禁:
iptables -I INPUT -s 203.0.113.5 -j DROP
把

0.113.5换成实际IP,立即生效,不需要重启服务,更持久的方案是配置fail2ban,它会自动检测多次登录失败的IP并临时封禁,配置文件在/etc/fail2ban/jail.local。
第四步:修改密码和密钥
这个异常IP登录过的账号,密码必须改,用passwd 用户名修改,同时检查该账号是否有sudo权限:
sudo -l -U 用户名
如果显示能执行所有命令,说明该账号权限过大,需要收紧。
第五步:检查定时任务和启动项
攻击者常通过crontab维持持久化:
crontab -l cat /etc/crontab ls -la /etc/cron.d/
发现不认识的定时任务,先注释或删除,再排查对应脚本文件内容。
日志文件的轮转与保留策略
服务器日志不是无限增长的,系统会按天或按大小自动轮转,Linux的logrotate默认每天或每周切割一次,保留4周左右,这意味着一台跑了半年的服务器,用last默认只能看到最近几周的记录,更早的得查轮转压缩文件。
查看轮转配置:
cat /etc/logrotate.d/rsyslog
实际运维中,建议把wtmp和auth.log的保留周期调长到90天,便于事后退责和追踪,修改方法是在/etc/logrotate.d/rsyslog中把rotate 4改成rotate 13,对应约13周,对于安全要求高的服务器,应该把日志实时同步到远端日志服务器,防止本地日志被篡改。
常见问题解答
last查看不到登录记录,原因是什么?
多数情况下是日志文件被轮转或清理了,先检查/var/log/wtmp是否存在且非空,用ls -lh /var/log/wtmp查看,文件被清空后last只显示reboot记录,另一个可能是系统没有启用wtmp日志记录功能,检查/etc/rsyslog.conf中是否包含authpriv.相关配置。
如何查看linux服务器最近登录的IP地址?
用last -n 10查看最近10条登录记录,来源IP就在第三列,想只看登录成功记录,用last -n 10 | grep -v reboot过滤掉系统重启记录,如果需要更精确的时间线和登录用户,配合grep Accepted /var/log/auth.log查看SSH成功认证记录。
多个IP同时登录同一账号是否属于异常?
判断标准在于账号类型和业务场景,运维人员共用root账号时,不同IP同时登录是常态,但如果单账号对应单人员,却出现两个不同地理位置的IP同时在线,异常可能性较大,先通过last确认两个IP是否真的在同一时间窗口内建立连接,再结合登录时间是否在业务低谷期一起判断。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/667565.html

