共273行
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)两个部分。以下是详细的查看方法:
SSH 服务端的日志通常记录在系统日志文件中,具体路径取决于你的 Linux 发行版。
这是最常用和推荐的方法,可以实时查看日志。
# 查看 sshd 服务的实时日志
sudo journalctl -u sshd -f
# 查看最近 100 行日志
sudo journalctl -u sshd -n 100
# 查看指定时间段的日志(例如今天)
sudo journalctl -u sshd --since today如果系统使用 rsyslog 或 syslog,日志通常位于 /var/log 目录下。
# 查看认证相关的日志(包含 SSH 登录尝试)
sudo tail -f /var/log/auth.log
# 或者查看安全日志
sudo tail -f /var/log/securesudo tail -f /var/log/messagesSSH 客户端本身不默认写入日志文件,但你可以通过以下方式获取详细的连接信息:
在连接命令中加入 -v(verbose)参数,可以输出详细的调试信息到终端。
# 查看连接过程的详细信息
ssh -v username@hostname
# 更详细的输出(最多三个 v)
ssh -vvv username@hostname如果你需要将客户端的连接过程保存下来分析,可以将输出重定向到文件。
# 将详细日志保存到文件
ssh -vvv username@hostname > ssh_connection.log 2>&1查看日志时,重点关注以下关键词,它们能帮助你快速定位问题:
| 关键词 | 含义 | 说明 |
|---|---|---|
Accepted |
登录成功 | 表示有用户成功通过认证登录。 |
Failed |
登录失败 | 通常指密码错误或公钥认证失败。 |
Connection closed |
连接关闭 | 连接被主动或被动关闭。 |
Connection reset |
连接重置 | 通常表示网络问题或防火墙拦截。 |
Permission denied |
权限被拒绝 | 认证失败,可能是密钥不匹配或用户被拒绝。 |
Disconnected |
断开连接 | 连接已断开。 |
结合你之前遇到的 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
# 最近20条
last -n 20
# 只看某个用户
last username内容包括:用户、终端、来源IP、登录/登出时间。
sudo lastb
# 只看root失败
sudo lastb | grep root读取 /var/log/btmp,记录密码错误、无效用户等。
lastlogUbuntu SSH 认证日志默认在 /var/log/auth.log。
sudo grep sshd /var/log/auth.logsudo grep "Accepted" /var/log/auth.logsudo grep "Failed password" /var/log/auth.logsudo tail -f /var/log/auth.log | grep sshdsudo grep "Failed password" /var/log/auth.log \
| awk '{print $11}' | sort | uniq -c | sort -nr现代 Ubuntu 可用 journalctl 过滤 SSH 服务。
sudo journalctl -u sshd
# 今天
sudo journalctl -u sshd --since today
# 最近1小时
sudo journalctl -u sshd --since "1 hour ago"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_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新建 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_monitor.sh:
#!/bin/bash
echo "===== 实时监控SSH登录日志,按 Ctrl+C 退出 ====="
sudo journalctl -u sshd -f | grep -E "Accepted|Failed"执行:
chmod +x ssh_monitor.sh
./ssh_monitor.shecho "=== 成功登录 ===";last -n 20;echo -e "\n=== 失败登录 ===";sudo lastb -n 20;echo -e "\n=== 今日SSH日志 ===";sudo journalctl -u sshd --since today|grep -E "Accepted|Failed"sudo grep "Failed password" /var/log/auth.log|awk '{print $11}'|sort|uniq -c|sort -nrsudo journalctl -u sshd -f|grep -E "Accepted|Failed"