
SSH(Secure Shell)는 로컬 머신에서 원격 호스트에 로그인하고 관리할 수 있는 널리 사용되는 강력한 프로토콜입니다. 이 가이드에서는 원격 서버에서 현재 활성화된 SSH 연결을 확인하는 데 활용할 수 있는 다양한 명령어를 소개합니다.
참고: 시스템 설정에 따라 일부 명령어는 root 또는 sudo 권한이 필요할 수 있습니다.
1. who 명령어 사용
활성 SSH 연결을 확인하는 첫 번째 방법은 who 명령어입니다.
who 명령어는 현재 시스템에 로그인한 사용자를 보여주며, 연결된 사용자와 접속 출처 IP 주소를 한눈에 확인할 수 있습니다.
사용법은 간단합니다. 별도의 옵션 없이 who만 입력하면 됩니다.

위 출력 결과에서 tty로 연결된 debian 사용자 1명과 원격 IP에서 접속한 SSH 세션 2개를 확인할 수 있습니다.
who 명령어에 옵션을 추가하면 더 자세한 정보를 얻을 수도 있습니다.
예를 들어, 마지막 부팅 시간과 함께 연결된 사용자 정보를 보려면 -b -u 플래그를 추가합니다:
who -b -u

who 명령어는 다양한 옵션을 통해 맞춤형 결과를 제공합니다. 자세한 내용은 매뉴얼 페이지(man page)를 참고하세요.
2. w 명령어 사용
서버에 연결된 SSH 세션과 사용자 상태를 확인하는 또 다른 방법은 w 명령어입니다. who 명령어와 달리 w 명령어는 각 사용자가 실행 중인 프로세스에 대한 더 많은 정보를 제공합니다.
또한 w 명령어는 유휴(idle) 상태의 SSH 연결 정보까지 알려주므로, 불필요한 세션을 종료해야 할 때 특히 유용합니다.
옵션 없이 실행하면 아래와 비슷한 출력을 얻을 수 있습니다.

위 예제에서 w 명령어는 사용자 이름, TTY 방식, 접속 IP 주소, 로그인 시간, 유휴 시간 등 상세한 정보를 보여줍니다.
who 명령어처럼 w 명령어도 다양한 파라미터와 함께 사용할 수 있습니다. 아래 표는 w 명령어에서 사용할 수 있는 주요 파라미터입니다.
| 파라미터 | 설명 |
|---|---|
| -h, --no-header | 헤더를 출력하지 않음 |
| -u, --no-current | 현재 사용자 이름을 무시하고 연결된 사용자들의 프로세스 및 CPU 시간 표시 |
| -s, --short | 로그인 시간, JCPU, PCPU를 제외한 축약된 출력 |
| -f, --from | 출력 결과의 FROM 항목 표시 여부 전환 |
| --help | w 명령어의 다양한 옵션/파라미터를 표시 후 종료 |
| -v, --version | 버전 정보를 표시 후 종료 |
| user | 지정된 사용자로 결과 범위 축소 |
아래 예제는 -s와 -f 파라미터를 함께 사용하여 FROM 부분이 생략된 축약형 출력으로 현재 SSH 세션을 확인하는 모습입니다.

자주 사용되지는 않지만, 환경 변수나 파일 파라미터와 함께 w 명령어를 사용할 수도 있습니다. 이러한 파라미터에 대해 더 알아보려면 man 페이지를 참고하세요.
3. last 명령어 사용
last 명령어로도 연결된 모든 SSH 세션을 확인할 수 있습니다. last 명령어는 최근 로그인한 사용자 목록을 보여줍니다.
이 명령어는 지정된 파일을 검사하는 방식으로 작동합니다. 예를 들어 "/var/log/wtmp" 파일에는 파일 생성 이후 로그인/로그아웃한 모든 사용자 기록이 저장되어 있습니다. 이 명령어는 클라이언트와 서버 간에 생성된 SSH 세션 정보도 함께 제공합니다.
last 명령어의 기본 문법은 다음과 같습니다:
last
실행 예시입니다.

last 명령어의 출력량이 방대하기 때문에, grep 명령어를 조합하면 활성 세션만 깔끔하게 표시할 수 있습니다.
예를 들면 다음과 같습니다:
last | grep still

last 명령어의 출력을 수정하여 더 자세한 정보를 표시할 수도 있습니다.
예를 들어, 전체 사용자 이름과 도메인을 표시하려면 -w 플래그를 사용합니다.
last -w
last 명령어는 수많은 옵션을 지원합니다. 가장 많이 사용되는 옵션은 다음과 같습니다.
| 파라미터 | 설명 |
|---|---|
| -a, --hostlast | 호스트명을 마지막 열에 표시 |
| -d, --dns | 리눅스는 모든 원격 호스트의 호스트명과 IP 주소를 저장합니다. 이 파라미터는 IP를 호스트명으로 변환하여 표시 |
| -file, --file | /var/log/wtmp 대신 지정된 파일을 사용하도록 지정 |
| -F, --fulltimes | 모든 로그인/로그아웃 날짜와 시간을 전체 형식으로 출력 |
| -i, --ip | --dns와 비슷하지만, 호스트명 대신 IP 주소를 표시 |
4. netstat 명령어 사용
netstat 명령어도 빼놓을 수 없습니다. netstat는 모든 네트워크 연결, 네트워크 인터페이스, 라우팅 테이블 등을 표시하는 데 사용됩니다.
netstat 명령어를 사용하면 리눅스 서버에서 연결된(ESTABLISHED) SSH 세션만 필터링할 수도 있습니다:
netstat | grep ssh

위 명령어는 현재 연결된 SSH 연결만 표시합니다.
수신 대기 중인 연결을 포함한 모든 연결을 보려면 -a 플래그를 사용합니다:
netstat -a | grep ssh

5. ss 명령어 사용
연결된 SSH 세션에 대한 더 많은 정보가 필요하다면 ss 명령어를 사용해 보세요. 소켓 데이터를 표시한다는 점에서 netstat와 유사한 역할을 합니다.
예를 들어, ss 명령어에 -a(all) 옵션을 붙여 grep 하면 연결된 모든 SSH 세션을 표시할 수 있습니다. 문법은 다음과 같습니다:
ss -a | grep ssh

위 출력은 원격 호스트의 모든 SSH 연결을 표시하며, 여기에는 SSHD 데몬도 포함됩니다.
연결된(ESTABLISHED) SSH 연결만 필터링하려면 출력을 다시 grep으로 파이프하면 됩니다.
ss -a | grep ssh | grep ESTAB

위 명령어들은 활성 SSH 연결만 반환합니다.
ss 명령어에는 활성 서버 연결에 대한 다양한 정보를 확인할 수 있는 옵션이 풍부합니다. 예를 들어 -e 플래그를 사용하면 더 자세한 소켓 정보를 볼 수 있습니다.
마무리
원격 호스트에서 무단 SSH 로그인이 발생하지 않았는지 지속적으로 모니터링하고, 필요에 따라 서버 보안 강화나 비밀번호 인증 비활성화 같은 조치를 취하는 것이 좋은 습관입니다. 한편, 역방향 SSH 터널링(reverse SSH tunneling)을 활용하면 외부에서 PC에 접속할 수도 있습니다.