GrepBoardLog

로그 파일을 아무 데나 끌어다 놓으세요

파일 여러 개, 폴더째, .gz 압축도 됩니다. Ctrl+V 로 글을 붙여 넣어도 됩니다.

auth.log: sshd 로그인 줄 읽기

「누가 들어왔나?」라는 질문의 답은 auth.log(Debian · Ubuntu)나 /var/log/secure(RHEL 계열)의 sshd 줄에 있습니다. 줄이 짧고 규칙적이라 세기 쉽습니다. 다만 sshd 가 정확히 무엇을 쓰고 무엇을 빼는지 알아야 합니다.

파일을 이 페이지에 놓으면 보드에 IP · 계정별 로그인 실패, 없는 계정 시도, 무차별 대입 출처, 그리고 가장 중요한 「실패를 거듭한 뒤 성공한 로그인」이 나옵니다. 아래 한 줄 명령은 서버에서 같은 질문에 답합니다.

sshd 가 쓰는 것

각 줄은 syslog 머리(시각, 호스트, sshd[pid]:)와 메시지로 되어 있습니다. 인증 메시지는 OpenSSH 의 두 곳에서 나오며 모양은 다음과 같습니다.

<Accepted|Failed|Partial|Postponed> <method>[/<submethod>] for [invalid user ]<user> from <address> port <port> ssh2[: <key type and fingerprint>]
Invalid user <user> from <address> port <port>

실제 줄입니다.

Oct 18 03:12:01 web-1 sshd[3011]: Invalid user admin from 203.0.113.66 port 41022
Oct 18 03:12:03 web-1 sshd[3011]: Failed password for invalid user admin from 203.0.113.66 port 41022 ssh2
Oct 18 03:12:05 web-1 sshd[3015]: Failed password for root from 203.0.113.66 port 41030 ssh2
Oct 18 04:01:21 web-1 sshd[3190]: Accepted password for deploy from 192.0.2.50 port 60110 ssh2
Oct 18 09:15:42 web-2 sshd[1844]: Accepted publickey for deploy from 10.0.0.5 port 50122 ssh2: ED25519 SHA256:3q8b…
낱말뜻
Accepted이 방법으로 인증에 성공했습니다. 로그인입니다.
Failed이번 시도가 실패했습니다.
Partial이 방법은 성공했지만 더 필요합니다(예: 키 다음에 일회용 코드).
Postponed결정 전에 한 번 더 주고받아야 하는 방법입니다.
Invalid user이 호스트에 없는 사용자 이름입니다. 뒤따르는 Failed … for invalid user … 줄이 시도 자체입니다.
password · publickey · keyboard-interactive인증 방법입니다. publickey 면 "ssh2:" 뒤에 키 종류와 지문이 붙습니다.
ssh2프로토콜 2 입니다. 요즘 OpenSSH 에서는 늘 이 값입니다.

어떤 실패는 파일에 없는 이유

sshd 는 인증 결과를 VERBOSE 수준으로 남기고, 로그인 성공, 없는 사용자, password 방법, 또는 실패가 MaxAuthTries 의 절반에 이르렀을 때만 INFO 로 올립니다. 흔히 쓰는 LogLevel INFO 에서는 있는 사용자의 공개키 실패 한 번(클라이언트가 엉뚱한 키를 먼저 내미는 경우)이 남지 않습니다. 그러니 「Failed publickey 줄이 없다」가 「거절된 키가 없다」는 뜻은 아닙니다. 필요하면 LogLevel VERBOSE 로 두십시오.

알아볼 만한 모양

모양보이는 것대개 무엇인가
무차별 대입한 주소에서 한두 계정으로 Failed 가 많음.root 나 흔한 계정의 비밀번호를 맞혀 보는 봇.
계정 훑기한 주소에서 Invalid user 이름이 많음(admin · test · oracle · ubuntu …).기본 계정을 찾는 스캐너.
분산 추측계정 하나에 여러 주소에서 몇 번씩 Failed.주소당 한도를 피하는 봇넷.
실패 뒤 성공어떤 주소에서 Failed 가 있고 같은 주소에서 Accepted.비밀번호를 잘못 친 사람이거나, 맞힌 추측입니다. 매번 어느 쪽인지 확인하십시오.
뜻밖의 곳에서 Accepted평소 대역 밖 주소나 이상한 시각에 실제 사용자의 Accepted.훔친 비밀번호나 키, 또는 새 네트워크의 동료. 확인하십시오.

장애나 사고 때 가장 먼저 돌릴 것은 실패 뒤 성공 검사입니다. 아래 명령은 실패한 뒤 로그인한 주소를 실패 횟수와 함께 모두 보여 줍니다.

auth.log 용 한 줄 명령

전통 syslog 머리를 단 표본 auth.log 로 실행해 확인했습니다. sshd 가 저널에만 쓰는 시스템이면 파일 대신 journalctl -u ssh(Debian · Ubuntu) 나 journalctl -u sshd(RHEL 계열)를 같은 명령에 파이프로 넣으십시오.

  • 출발 주소별 비밀번호 실패

    grep 'Failed password' auth.log | grep -oE 'from [0-9a-f.:]+' | cut -d' ' -f2 | sort | uniq -c | sort -rn | head
  • 사용자 이름별 실패(없는 계정 포함)

    grep -oE 'Failed [a-z-]+ for (invalid user )?[^ ]+' auth.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head
  • 이 호스트에 없는데 시도된 사용자 이름

    grep -oE 'Invalid user [^ ]+' auth.log | cut -d' ' -f3 | sort | uniq -c | sort -rn | head
  • 모든 로그인 성공: 시각, 방법, 사용자, 주소

    grep 'Accepted ' auth.log | awk '{print $1, $2, $3, $7, $9, $11}'
  • 인증 방법별 Accepted · Failed

    grep -oE '(Accepted|Failed) [a-z-]+' auth.log | sort | uniq -c | sort -rn
  • 실패한 뒤 로그인한 주소 — 하나하나 확인할 것

    awk '/Failed /{for (i = 1; i < NF; i++) if ($i == "from") f[$(i+1)]++} /Accepted /{for (i = 1; i < NF; i++) if ($i == "from" && f[$(i+1)]) print $(i+1), "accepted after", f[$(i+1)], "failures"}' auth.log
  • 시간당 비밀번호 실패

    grep 'Failed password' auth.log | cut -c1-9 | uniq -c
  • root 비밀번호 실패 수

    grep -c 'Failed password for root ' auth.log
  • 비밀번호에 실패한 서로 다른 주소 수

    grep 'Failed password' auth.log | grep -oE 'from [0-9a-f.:]+' | sort -u | wc -l
  • 여러 서버가 한 파일에 쓸 때 호스트별 줄 수

    awk '{print $4}' auth.log | sort | uniq -c | sort -rn

자주 묻는 질문

SSH 로그인 로그는 어디에 있나요?

Debian · Ubuntu 는 /var/log/auth.log, RHEL · CentOS · Rocky · Alma 는 /var/log/secure 입니다. systemd 저널만 쓰는 호스트라면 journalctl 로 ssh 또는 sshd 유닛을 읽습니다.

"Invalid user" 와 "Failed password for invalid user" 는 무엇이 다른가요?

Invalid user 는 이름을 찾았는데 없을 때 남고, 그 이름으로 한 인증 시도마다 Failed … for invalid user 줄이 따로 남습니다. 시도 수는 Failed 줄로, 시도된 이름은 Invalid user 줄로 세십시오. 둘을 더하면 이중으로 셉니다.

"Failed publickey" 줄이 없는 이유는?

기본 로그 수준에서 sshd 는 있는 사용자의 키 실패를 실패가 MaxAuthTries 의 절반에 이를 때만 남깁니다. 클라이언트가 키를 여러 개 시도하는 것은 정상이라 조용합니다. 보려면 LogLevel VERBOSE 를 쓰십시오.

무차별 대입이 성공했는지 어떻게 아나요?

Failed 줄이 있는 주소에서 Accepted 줄이 있는지 보십시오. 「실패한 뒤 로그인한 주소」 명령이 실패 횟수와 함께 보여 줍니다.

어떤 키로 들어왔는지 로그에 나오나요?

Accepted publickey 줄에는 "ssh2:" 뒤에 키 종류와 SHA256 지문이 나옵니다. ssh-keygen -lf 로 authorized_keys 의 지문과 맞춰 보십시오.

auth.log 를 온라인 도구에 붙여도 되나요?

사용자 이름, 출발 주소, 로그인 시각이 들어 있습니다. 이 페이지에서는 아무것도 브라우저 밖으로 나가지 않습니다. 페이지의 Content-Security-Policy 가 데이터를 보내지 못하게 막습니다.

🔒 아무것도 브라우저 밖으로 나가지 않습니다.

로그는 이 브라우저 안, 내 컴퓨터에서만 해석하고 셉니다.