共273行

linux 查看ssh日志

2026-06-12 10:21:24

⚠️注意

一定要关闭ssh,密码登录,否则容易被暴力破解

  # 修改 /etc/ssh/sshd_config
  # 禁止root用户密码登录
  PermitRootLogin prohibit-password

  # 全局关闭密码认证,默认PasswordAuthentication 为yes,即允许密码登录,改为no后,禁止密码登录
  PasswordAuthentication no

  # 开启密钥登录    
  RSAAuthentication yes
  PubkeyAuthentication yes
  AuthorizedKeysFile      .ssh/authorized_keys

  AllowUsersj your_user              # 仅允许指定用户登录
  Port 22                           # 修改默认SSH端口
  PermitEmptyPasswords no           # 禁止空密码


  重启服务 service sshd restart

在 Linux 系统中,查看 SSH 日志主要涉及服务端(sshd)和客户端(ssh)两个部分。以下是详细的查看方法:

1. 查看 SSH 服务端日志(sshd)

SSH 服务端的日志通常记录在系统日志文件中,具体路径取决于你的 Linux 发行版。

方法一:通过 journalctl(Systemd 系统,如 Ubuntu 18.04+、CentOS 7+)

这是最常用和推荐的方法,可以实时查看日志。

# 查看 sshd 服务的实时日志
sudo journalctl -u sshd -f

# 查看最近 100 行日志
sudo journalctl -u sshd -n 100

# 查看指定时间段的日志(例如今天)
sudo journalctl -u sshd --since today

方法二:查看系统日志文件

如果系统使用 rsyslogsyslog,日志通常位于 /var/log 目录下。

2. 查看 SSH 客户端日志

SSH 客户端本身不默认写入日志文件,但你可以通过以下方式获取详细的连接信息:

方法一:使用 -v 参数(推荐)

在连接命令中加入 -v(verbose)参数,可以输出详细的调试信息到终端。

# 查看连接过程的详细信息
ssh -v username@hostname

# 更详细的输出(最多三个 v)
ssh -vvv username@hostname

方法二:重定向输出到文件

如果你需要将客户端的连接过程保存下来分析,可以将输出重定向到文件。

# 将详细日志保存到文件
ssh -vvv username@hostname > ssh_connection.log 2>&1

3. 日志内容解读

查看日志时,重点关注以下关键词,它们能帮助你快速定位问题:

关键词 含义 说明
Accepted 登录成功 表示有用户成功通过认证登录。
Failed 登录失败 通常指密码错误或公钥认证失败。
Connection closed 连接关闭 连接被主动或被动关闭。
Connection reset 连接重置 通常表示网络问题或防火墙拦截。
Permission denied 权限被拒绝 认证失败,可能是密钥不匹配或用户被拒绝。
Disconnected 断开连接 连接已断开。

4. 针对你之前问题的排查建议

结合你之前遇到的 Connection reset by peer 问题,建议你查看服务端(192.168.34.90)的日志,因为这是服务器主动拒绝了你的连接。

在服务器 192.168.34.90 上执行:

# 查看服务器上是否有拒绝连接的记录
sudo journalctl -u sshd --since "60 minutes ago" | grep -i "reset\|refused\|Disconnected"

一些常用方法

Ubuntu 查看 SSH 登录历史,主要有三类:last/lastb(登录记录)、auth.log(认证日志)、journalctl(系统日志)


一、last / lastb(最常用)

1. 成功登录历史(含 SSH)

last
# 最近20条
last -n 20
# 只看某个用户
last username

内容包括:用户、终端、来源IP、登录/登出时间

2. 失败登录尝试(暴力破解)

sudo lastb
# 只看root失败
sudo lastb | grep root

读取 /var/log/btmp,记录密码错误、无效用户等。

3. 所有用户最近一次登录

lastlog

二、/var/log/auth.log(详细SSH日志)

Ubuntu SSH 认证日志默认在 /var/log/auth.log

1. 查看所有 SSH 相关

sudo grep sshd /var/log/auth.log

2. 只看成功登录

sudo grep "Accepted" /var/log/auth.log

3. 只看失败密码

sudo grep "Failed password" /var/log/auth.log

4. 实时监控 SSH 登录

sudo tail -f /var/log/auth.log | grep sshd

5. 统计暴力破解 IP(高频)

sudo grep "Failed password" /var/log/auth.log \
| awk '{print $11}' | sort | uniq -c | sort -nr

三、journalctl(systemd 日志)

现代 Ubuntu 可用 journalctl 过滤 SSH 服务。

1. 查看 SSH 服务所有日志

sudo journalctl -u sshd
# 今天
sudo journalctl -u sshd --since today
# 最近1小时
sudo journalctl -u sshd --since "1 hour ago"

2. 实时监控 SSH

sudo journalctl -u sshd -f

四、常用组合(快速排查)

# 1. 最近10条成功登录
last -n 10

# 2. 最近10条失败登录
sudo lastb -n 10

# 3. 今天 SSH 成功+失败
sudo journalctl -u sshd --since today | grep -E "Accepted|Failed"

## 一键排查脚本

这里整理了一键排查脚本,分快速查看、详细统计、实时监控三类,直接复制到终端执行即可。

一、综合查看脚本(一次性输出:登录记录+失败尝试+今日SSH日志)

新建文件 ssh_check.sh

#!/bin/bash
echo "==================== 成功登录历史(最近20条) ===================="
last -n 20

echo -e "\n==================== 登录失败记录(最近20条) ===================="
sudo lastb -n 20

echo -e "\n==================== 今日SSH认证日志 ===================="
sudo journalctl -u sshd --since today | grep -E "Accepted|Failed"

赋予执行权限并运行:

chmod +x ssh_check.sh
./ssh_check.sh

二、暴力破解IP统计脚本(统计高频攻击IP)

新建 ssh_attack_stat.sh

#!/bin/bash
echo "==================== 失败登录IP 次数统计(从高到低) ===================="
sudo grep "Failed password" /var/log/auth.log \
| awk '{print $11}' | sort | uniq -c | sort -nr

执行:

chmod +x ssh_attack_stat.sh
./ssh_attack_stat.sh

三、实时监控脚本(实时查看新的SSH连接/失败)

新建 ssh_monitor.sh

#!/bin/bash
echo "===== 实时监控SSH登录日志,按 Ctrl+C 退出 ====="
sudo journalctl -u sshd -f | grep -E "Accepted|Failed"

执行:

chmod +x ssh_monitor.sh
./ssh_monitor.sh

快捷用法(无需建文件,直接终端粘贴运行)

  1. 综合速查
echo "=== 成功登录 ===";last -n 20;echo -e "\n=== 失败登录 ===";sudo lastb -n 20;echo -e "\n=== 今日SSH日志 ===";sudo journalctl -u sshd --since today|grep -E "Accepted|Failed"
  1. 攻击IP统计
sudo grep "Failed password" /var/log/auth.log|awk '{print $11}'|sort|uniq -c|sort -nr
  1. 实时监控
sudo journalctl -u sshd -f|grep -E "Accepted|Failed"