기술 가이드

Linux에서 활성 SSH 연결 확인하는 방법

• 5 min read • 리눅스 시스템 • 업데이트됨 10 Oct 2025
Linux에서 활성 SSH 연결 확인하는 7가지 방법
Linux에서 활성 SSH 연결 확인하는 7가지 방법

요약

서버에서 누가 SSH로 접속해 있는지 빠르게 확인하려면 여러 표준 유틸리티를 사용할 수 있습니다. 이 문서에서는 who, w, ps, netstat, ss, last 등 여러 방법의 사용법, 장단점, 운영자용 체크리스트와 보안 권장사항을 정리합니다.

SSH 연결을 보여주는 리눅스 터미널 화면

만약 당신이 리눅스 시스템 관리자이고 서버 관리를 담당한다면, 활성 SSH 연결 수와 접속 출처를 알아야 할 때가 자주 있습니다. 리눅스에는 서버의 활성 SSH 연결을 찾을 수 있는 여러 명령과 도구가 있습니다.

이 튜토리얼에서는 리눅스에서 다양한 방법으로 활성 SSH 연결을 찾는 방법을 설명합니다.

전제 조건

  • 리눅스 운영체제가 실행 중인 서버
  • 해당 서버에 대한 루트(root) 또는 동등한 권한

who 명령으로 활성 SSH 연결 찾기

who는 현재 서버에 로그인한 사용자의 목록을 출력하는 기본 명령입니다. 터미널에서 다음을 실행하세요:

who

예시 출력:

root     pts/0        2020-05-01 02:37 (27.61.161.61)
root     pts/1        2020-05-01 02:39 (45.58.38.21)

이 출력에서 두 개의 활성 SSH 연결이 있고, 각각 클라이언트 IP는 27.61.161.61과 45.58.38.21임을 알 수 있습니다.

중요: who는 로그인 세션 정보만 보여주므로 짧게 접속했다 끊긴 세션이나 비표준 포트를 사용하는 일부 연결은 보이지 않을 수 있습니다.

w 명령으로 활성 SSH 연결 찾기

w는 who보다 더 많은 정보를 제공하는 도구로, 로그인한 사용자들의 현재 활동과 실행 중인 프로세스 정보를 보여줍니다. 실행:

w

예시 출력:

 02:40:07 up 1 day, 18:35,  2 users,  load average: 0.02, 0.02, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    27.61.161.61     02:37    1.00s  0.04s  0.01s ssh [email protected]
root     pts/1    45.58.38.21      02:39    1.00s  0.02s  0.00s w

w는 idle 시간, 접속한 호스트, 로그인 시간, 시스템 부하와 각 세션에서 실행 중인 프로세스를 보여주므로 세션 활동을 빠르게 파악할 때 유용합니다.

ps 명령으로 활성 SSH 연결 찾기

ps 명령은 활성 SSH 세션 관련 프로세스를 보여주며, 각 연결의 PID(프로세스 ID)를 확인할 수 있습니다. 다음을 실행하세요:

ps auxwww | grep sshd: | grep -v grep

예시 출력:

root         609  0.0  0.1  12160  7268 ?        Ss   Apr29   0:01 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root       35532  0.0  0.2  13864  8796 ?        Ss   02:37   0:00 sshd: root@pts/0
root       35669  0.0  0.2  13860  8916 ?        Ss   02:38   0:00 sshd: root@pts/1

ps를 사용하면 연결과 연관된 프로세스를 직접 확인하고 필요 시 특정 PID를 종료하거나 조사할 수 있습니다.

netstat 명령으로 활성 SSH 연결 찾기

netstat은 원격 호스트에서 서버로 들어오는 활성(ESTABLISHED) SSH 연결을 보여줄 수 있습니다. 실행:

netstat -tnpa | grep 'ESTABLISHED.*sshd'

예시 출력:

tcp        0     88 45.58.38.21:22          27.61.161.61:8363       ESTABLISHED 35532/sshd: root@pt 
tcp        0      0 45.58.38.21:22          45.58.38.21:51166       ESTABLISHED 35669/sshd: root@pt 

netstat은 소스/목적지 IP와 포트, 상태, 프로세스 ID를 함께 보여주므로 네트워크 관점의 조사를 할 때 유용합니다. 참고: 최신 배포판에서는 netstat이 비활성화되어 있을 수 있으며 ss를 권장합니다.

last 명령으로 활성 SSH 연결 찾기

last는 /var/log/wtmp 파일에 기록된 로그인/로그아웃 기록을 표시합니다. 현재 “still logged in” 상태인 세션을 필터링하면 활성 연결을 찾을 수 있습니다. 실행:

last -a | grep -i still

예시 출력:

root     pts/1        Fri May  1 02:39   still logged in    45.58.38.21
root     pts/0        Fri May  1 02:37   still logged in    27.61.161.61
reboot   system boot  Wed Apr 29 08:04   still running      5.4.0-26-generic

last는 로그인 기록을 기반으로 하므로 과거 추적과 현재 상태를 함께 확인할 때 유용합니다.

ss 명령으로 활성 SSH 연결 찾기

ss는 netstat의 현대적 대안으로 더 많은 정보를 빠르게 제공합니다. grep과 함께 사용하여 ssh 관련 연결만 필터링할 수 있습니다. 실행:

ss | grep -i ssh

예시 출력:

tcp   ESTAB  0      0                      45.58.38.21:51166        45.58.38.21:ssh                                                                             
tcp   ESTAB  0      56                     45.58.38.21:ssh         27.61.161.61:8363                                                                            
tcp   ESTAB  0      0                      45.58.38.21:ssh          45.58.38.21:51166                                                                           

ss는 대규모 연결을 빠르게 검사할 때 적합하며 netstat보다 기본적으로 설치되어 있는 경우가 많습니다.

빠른 요약(체크리스트 및 치트시트)

  • 누가 로그인했나 빠르게 확인: who
  • 활동/프로세스 확인: w
  • SSH 관련 프로세스 PID 확인: ps (예: ps auxwww | grep sshd:)
  • 네트워크 레벨 연결 확인: ss 또는 netstat
  • 로그인 기록 확인: last

치트시트(자주 쓰는 명령):

목적명령 예시
현재 로그인 사용자who
활동/프로세스 확인w

| sshd 관련 프로세스 | ps auxwww | grep sshd: | grep -v grep | | 네트워크 연결(빠름) | ss | grep -i ssh | | 네트워크 연결(netstat 방식) | netstat -tnpa | grep ‘ESTABLISHED.*sshd’ | | 로그인 기록에서 활성 세션 | last -a | grep -i still |

운영자용 점검 체크리스트

  • IP가 낯선가? 방화벽/로그를 확인하고 필요 시 차단
  • 동일한 계정에서 다수의 동시 접속이 있는가? 정책 검토
  • 의심스러운 프로세스(PID)가 연결과 연관되어 있는가? ps로 PID 확인 후 lsof/journalctl 조사
  • 인증 실패 기록은? /var/log/auth.log 또는 journalctl -u sshd 확인
  • SSH 버전과 설정(포트, PermitRootLogin, PasswordAuthentication)을 점검

문제 발생 시: 언제 이 방법들이 실패하는가

  • who/w는 로컬 로그인 기록을 기반으로 하므로 어떤 세션은 보이지 않을 수 있음(예: 비표준 세션 관리).
  • netstat가 설치되어 있지 않거나 권한 부족으로 프로세스 식별을 못 할 수 있음.
  • ps로는 이미 종료된 세션 또는 스레드 정보를 놓칠 수 있음.
  • 로그 파일이 순환(logrotate)되어 오래된 정보가 사라졌을 수 있음.

해결 힌트: 여러 툴을 조합해서 교차검증(예: ss + ps + journalctl).

대안 및 확장 방법

  • auditd 기반 감사: SSH 인증/세션 이벤트를 심층적으로 기록할 수 있음(규정 준수 필요 시 권장).
  • journalctl -u sshd: systemd 기반 시스템에서 sshd 관련 로그 확인.
  • lsof -i @HOST: 특정 포트/소켓을 연 프로세스 확인.
  • 중앙 로그 수집(예: ELK, Graylog)으로 장기 추적 및 경보 설정.

보안 및 감사 권장사항

  • root 직접 로그인을 비활성화하고, 공개키 인증(Public Key)만 허용하는 것을 고려하세요.
  • 비밀번호 인증은 가능하면 비활성화하고, Fail2ban 같은 도구로 반복 로그인 시도를 차단하세요.
  • SSH 접속 기록은 중앙 로그 서버로 전송하여 장기 보존 및 상관분석을 수행하세요.
  • 정기적으로 허가된 공개키 목록을 검토하고 불필요한 계정을 삭제하세요.

간단 용어집

  • SSH: 암호화된 원격 셸 프로토콜
  • PID: 프로세스 ID
  • ESTABLISHED: TCP 연결이 성립된 상태
  • wtmp: 로그인/로그아웃 기록을 저장하는 바이너리 파일(/var/log/wtmp)

운영자용 간단 SOP: 의심스러운 SSH 세션 조사 흐름

  1. ss 또는 netstat로 현재 연결 확인(원격 IP, 포트, 프로세스 정보 수집)
  2. ps로 연관 PID 확인
  3. lsof, journalctl, /var/log/auth.log로 해당 PID/시간대 활동 확인
  4. 필요 시 해당 세션 강제 종료(예: kill ) 및 방화벽 차단
  5. 사건 기록 및 중앙 로그에 사건 알림 등록
flowchart TD
  A[의심스러운 접속 보고] --> B{접속 확인}
  B -->|활성| C[PID 및 프로세스 확인]
  B -->|미활성| D[로그 기록 수집]
  C --> E{악성 여부}
  E -->|예| F[세션 종료 및 IP 차단]
  E -->|아니오| G[모니터링 계속]
  D --> G

결론

이 가이드에서는 who, w, ps, netstat, ss, last 등의 도구로 리눅스 서버의 활성 SSH 연결을 확인하는 여러 방법을 다뤘습니다. 운영 환경에서는 단일 도구에 의존하지 말고 네트워크/프로세스/로그 관점에서 복수의 도구로 교차검증하는 것이 안전합니다.

중요: 로그를 중앙에 보관하고, 강력한 인증 정책(공개키, 비밀번호 비활성화)과 자동 차단 도구를 함께 사용하면 SSH 관련 사고를 크게 줄일 수 있습니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기