Automated credential guessing against exposed SSH.
What gives it awayHigh volume from one source across common usernames. This is the default state of any internet-facing SSH service.
ATT&CK T1110.001Nothing matches that yet. Tell us what you were looking for and it goes on the list.
OpenSSH · Event Failed password
Someone tried to sign in over SSH with the wrong password. On any server reachable from the internet these arrive constantly — automated scanning, not a targeted attack. What matters is whether one ever succeeded.
Also written as Failed password forsshd failed passwordssh failed password rootFailed password for invalid user
If you have opened SSH to the internet — for a home server, a Raspberry Pi, or a NAS — you will see thousands of these. It is automated scanning that finds every public address within hours. The real fix is to turn off password authentication entirely and use keys.
The message distinguishes an existing account from a non-existent one by inserting 'invalid user', which is the equivalent of the Windows sub-status distinction. Rate-limiting tools reduce log volume but do not address the underlying exposure. The question worth alerting on is a success from a source that produced failures, not the failures themselves.
Sanitised. Addresses come from the RFC 5737 documentation ranges.
Aug 28 09:41:17 web-01 sshd[24817]: Failed password for invalid user admin from 198.51.100.77 port 49820 ssh2
Aug 28 09:41:19 web-01 sshd[24817]: Failed password for root from 198.51.100.77 port 49822 ssh2
Aug 28 09:41:21 web-01 sshd[24819]: Failed password for jbrooks from 198.51.100.77 port 49824 ssh2 Everything else in the log line is context.
rootThe most-targeted account by a wide margin. Should not accept password authentication at all. admin, test, oracle, ubuntu, piStandard entries in scanning wordlists. Their presence tells you nothing except that you are exposed. A real account name from your organisationMore concerning than a generic one — it suggests the attacker knows something. PresentThe account does not exist. Untargeted scanning. AbsentThe account exists and only the password was wrong. Most of the time it is one of these.
What gives it awayHigh volume from one source across common usernames. This is the default state of any internet-facing SSH service.
ATT&CK T1110.001What gives it awayAttempts against real usernames without the 'invalid user' marker, at low volume per account to avoid rate limits.
ATT&CK T1110.003What gives it awayFailures against real organisational usernames rather than generic wordlist entries.
ATT&CK T1110What gives it awayAn Accepted password entry from a source address that produced failures shortly before. This is the sequence that actually matters.
ATT&CK T1078grep 'Failed password' /var/log/auth.log | grep -oP 'from \K[\d.]+' | sort | uniq -c | sort -rn | head -20 grep 'Accepted' /var/log/auth.log | grep -oP 'from \K[\d.]+' | sort -u > /tmp/ok.txt; grep 'Failed password' /var/log/auth.log | grep -oP 'from \K[\d.]+' | sort -u | grep -Ff /tmp/ok.txt journalctl -u ssh -u sshd --since '24 hours ago' | grep -c 'Failed password' event.dataset:"system.auth" and process.name:"sshd" and system.auth.ssh.event:"Failed" | stats count by source.ip, user.name index=linux sourcetype=linux_secure "Failed password" | stats count dc(user) as users by src_ip | where users > 5 | sort -count You are being scanned, which is not the same thing. Every publicly reachable address receives continuous automated login attempts within hours of coming online, and the volume says nothing about whether anyone is targeting you specifically. The right response is to remove password authentication rather than to chase the sources.
Disable password authentication entirely and use key-based authentication — set `PasswordAuthentication no` in sshd_config. That makes the guessing pointless regardless of volume. Rate-limiting tools like fail2ban reduce the log noise and are worth running, but they address the symptom rather than the exposure.
The 'invalid user' wording means no such account exists on the system. Without it, the account is real and only the password was wrong. That distinction matters: failures against real usernames suggest the attacker has some knowledge of your environment, while failures against non-existent ones are generic scanning.
Search the same log for 'Accepted' entries, and cross-reference the source addresses against those that produced failures. An address that failed repeatedly and then succeeded is the case to investigate. `last` and `lastb` also give you a quick summary of successful and failed logins respectively.
Last reviewed 28 August 2026