Ubuntu SSH监控与日志管理指南
systemctl是Ubuntu管理systemd服务的核心工具,可全面监控SSH服务(ssh)的状态:
sudo systemctl status ssh,输出会显示服务是否运行(Active: active)、最近日志片段及进程ID(Main PID)。sudo systemctl start ssh(启动)、sudo systemctl stop ssh(停止)、sudo systemctl restart ssh(重启,中断现有连接)。sudo systemctl reload ssh(不中断现有连接,应用/etc/ssh/sshd_config的修改)。sudo systemctl enable ssh(启用)、sudo systemctl disable ssh(禁用)。通过netstat或ss命令可确认SSH服务是否在默认端口(22)监听:
sudo netstat -tuln | grep 22:显示TCP端口22的监听状态(LISTEN)及进程信息。sudo ss -tuln | grep 22:更现代的工具,输出更简洁,包含进程PID和名称(如sshd)。Ubuntu系统默认将SSH认证及连接日志记录在/var/log/auth.log(Debian/Ubuntu系),包含登录成功/失败、会话开启/关闭等信息。
sudo grep "sshd" /var/log/auth.log,筛选出所有包含sshd的日志条目。sudo tail -f /var/log/auth.log | grep sshd,持续显示新增的SSH日志(按Ctrl+C退出)。sudo journalctl -u ssh,通过systemd查看sshd服务的日志,支持时间过滤(如--since "2025-09-01")。sudo grep "Accepted" /var/log/auth.log,输出包含用户、IP、端口及认证方式(如publickey、password)的信息。sudo grep "Failed password" /var/log/auth.log(密码认证失败)、sudo grep "Invalid user" /var/log/auth.log(无效用户名尝试),用于检测暴力破解。sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr,按IP统计失败次数(从高到低排序)。fail2ban通过监控日志识别多次失败尝试,自动封禁恶意IP:
sudo apt install fail2ban。sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,编辑jail.local启用SSH监狱:[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3 # 允许的最大失败次数
bantime = 600 # 封禁时间(秒,如10分钟)
sudo systemctl restart fail2ban,生效后会自动封禁触发规则的IP。auditd可记录系统调用(如文件访问、进程执行),适合需要详细追踪SFTP活动的场景:
sudo apt install auditd audispd-plugins。/etc/audit/rules.d/sftp.rules,添加以下规则(监控/path/to/sftp/directory目录的读写操作):-a exit,always -F arch=b64 -S openat,open,close,close_write -F auid!=unset -F auid>=1000 -F key=sftp
-a exit,always -F arch=b32 -S openat,open,close,close_write -F auid!=unset -F auid>=1000 -F key=sftp
sudo systemctl restart auditd,查看审计日志用sudo ausearch -k sftp。使用iftop、nload或tcpdump监控SSH流量,识别异常连接:
sudo apt install iftop,运行sudo iftop -i eth0(eth0为网络接口)。sudo apt install nload,运行nload。sudo apt install tcpdump,运行sudo tcpdump -i eth0 port 22。