리눅스 서버 SSH 접속하는 방법 3단계
목차
리눅스 서버에 SSH로 접속하려면 ①서버에 openssh-server 설치 및 실행 → ②방화벽에서 22번 포트 개방 → ③클라이언트에서 ssh 사용자명@서버IP 명령 입력, 이 3단계만 거치면 됩니다. 다만 외부 인터넷을 통해 접속을 열어둘 계획이라면 비밀번호 인증 대신 SSH 키 인증으로 바꾸는 보안 설정이 사실상 필수입니다. 아래에서 단계별 명령어와 함께, 접속이 안 될 때 흔히 겪는 오류의 원인까지 순서대로 짚어보겠습니다.
SSH란 무엇이고 왜 안전한가

SSH의 정의와 기존 방식과의 차이
SSH(Secure Shell)는 원격 서버에 로그인해 명령을 실행할 수 있게 해주는 프로토콜입니다. 과거 널리 쓰이던 telnet·rsh·rlogin은 아이디와 비밀번호를 포함한 모든 통신 내용을 평문(암호화되지 않은 텍스트)으로 전송했기 때문에, 같은 네트워크 구간에서 패킷을 가로채면 계정 정보가 그대로 노출됐습니다. SSH는 연결이 시작되는 순간부터 데이터를 암호화하고, 서버와 클라이언트가 서로의 신원을 확인하는 인증 절차를 거치기 때문에 중간에서 패킷을 가로채도 원본 내용을 알아낼 수 없습니다.
기본 포트와 호스트 키의 역할
SSH는 기본적으로 TCP 22번 포트를 사용합니다. 서버는 최초 실행 시 RSA·ECDSA·Ed25519 방식의 호스트 키를 자동 생성해 /etc/ssh/ 아래에 보관하며, 클라이언트가 처음 접속할 때 이 키의 지문(fingerprint)을 보여주고 신뢰 여부를 묻습니다. 한 번 신뢰한 서버의 키 값이 이후 접속에서 갑자기 바뀌면 SSH 클라이언트가 강하게 경고를 띄우는데, 이는 서버가 재설치된 경우일 수도 있지만 중간자 공격(통신을 가로채 위장하는 공격) 가능성을 알리는 신호이기도 하므로 원인을 확인하기 전에는 접속을 강행하지 않는 것이 안전합니다.
리눅스 서버 SSH 접속 3단계
가장 기본적인 흐름은 서버 쪽 준비 두 단계와 클라이언트 쪽 접속 한 단계로 나뉩니다. 배포판마다 패키지 관리자 명령어가 다르므로 각 단계에서 Ubuntu/Debian 계열과 CentOS/RockyLinux/Fedora 계열을 함께 표기했습니다.
1단계: 서버에 SSH 데몬 설치 및 실행
대부분의 리눅스 배포판은 서버용 이미지에 OpenSSH 서버가 기본 설치되어 있지만, 최소 설치(minimal install) 이미지라면 직접 설치해야 합니다.
- 설치 여부 확인:(또는 Ubuntu는
systemctl status sshdssh) - 미설치 시 설치 — Ubuntu/Debian:CentOS·Rocky·Fedora:
sudo apt update && sudo apt install openssh-serversudo dnf install openssh-server - 서비스 시작 및 부팅 시 자동 실행 등록:(Ubuntu는 서비스명이
sudo systemctl enable --now sshdssh인 경우도 있음)
참고로 CentOS Linux(비-Stream)는 7 버전이 2024년 6월, 8 버전이 2021년 12월에 각각 지원 종료(EOL)돼 더 이상 보안 패치를 받지 못합니다. 신규 서버를 구축한다면 같은 dnf 계열이면서 지원이 살아있는 RockyLinux·AlmaLinux나 CentOS Stream을 쓰는 것이 안전합니다.
2단계: 방화벽에서 22번 포트 열기
서비스가 켜져 있어도 방화벽이 22번 포트를 막고 있으면 외부에서 접속할 수 없습니다. 사용 중인 방화벽 도구에 맞게 규칙을 추가합니다.
- firewalld(CentOS 계열):
sudo firewall-cmd --permanent --add-port=22/tcp && sudo firewall-cmd --reload - ufw(Ubuntu 계열):
sudo ufw allow 22/tcp && sudo ufw enable - 클라우드 서버(AWS·네이버클라우드 등)라면 OS 방화벽뿐 아니라 보안 그룹(Security Group)에서도 22번 포트 인바운드 규칙을 별도로 열어야 접속이 가능합니다.
3단계: 클라이언트에서 접속 명령 입력
서버 준비가 끝났다면 클라이언트에서 아래 형식으로 접속합니다.
ssh 사용자명@서버IP주소
# 포트를 기본값(22)에서 변경한 경우
ssh -p 변경한포트번호 사용자명@서버IP주소처음 접속하면 호스트 키 지문을 신뢰할지 묻는 문구(Are you sure you want to continue connecting?)가 나오는데, yes를 입력하면 ~/.ssh/known_hosts에 저장되어 다음 접속부터는 다시 묻지 않습니다.
같은 네트워크(같은 와이파이) 안에서만 테스트할 계획이라면 방화벽·포트포워딩 설정 없이 사설 IP만으로 바로 접속이 가능합니다. 외부 인터넷에서 접속해야 할 때만 공유기 포트포워딩이나 클라우드 보안 그룹 설정이 추가로 필요합니다.
운영체제별 SSH 클라이언트 준비

리눅스·macOS
리눅스와 macOS는 OpenSSH 클라이언트가 기본 탑재되어 있어 터미널에서 곧바로 ssh 명령을 쓸 수 있습니다. 간혹 최소 설치 환경에서 명령어가 없다면 Ubuntu/Debian은 sudo apt install openssh-client, RockyLinux/Fedora는 sudo dnf install openssh-clients로 설치합니다. ssh -V로 버전을 확인할 수 있습니다.
Windows
Windows 10/11은 설정 > 앱 > 선택적 기능에서 OpenSSH 클라이언트를 추가 설치할 수 있으며, 설치 후에는 별도 프로그램 없이 Windows Terminal이나 PowerShell에서 바로 ssh 명령을 사용할 수 있습니다. 과거에는 Putty 같은 별도 클라이언트를 많이 썼지만, OpenSSH 클라이언트가 기본 제공된 이후로는 필수는 아닙니다.
SSH 키 인증으로 비밀번호 없이 안전하게 접속하기
키 쌍 생성과 서버 등록
비밀번호 인증은 무차별 대입 공격(가능한 비밀번호를 자동으로 계속 시도하는 공격)에 노출되기 쉽습니다. SSH 키 인증은 개인키(private key)는 내 컴퓨터에만 두고 공개키(public key)만 서버에 등록해, 개인키를 가진 사람만 로그인할 수 있게 합니다.
- 클라이언트에서 키 쌍 생성:
ssh-keygen -t ed25519 -C "사용메모" - 생성된 공개키를 서버에 등록:
ssh-copy-id 사용자명@서버IP주소 - 키 인증으로 접속 확인:(비밀번호 없이 로그인되면 성공)
ssh 사용자명@서버IP주소
비밀번호 인증 차단
키 인증이 정상 동작하는 것을 확인한 뒤, 서버의 /etc/ssh/sshd_config 파일에서 PasswordAuthentication no로 설정합니다. 아래 명령으로 서비스를 재시작하면 비밀번호 로그인 시도 자체가 차단됩니다.
sudo systemctl restart sshd개인키 파일(예:~/.ssh/id_ed25519)의 권한은 반드시chmod 600으로 본인만 읽을 수 있게 제한해야 합니다. 권한이 너무 열려 있으면 SSH가 보안상 해당 키 사용을 스스로 거부합니다.
흔한 접속 오류와 해결 방법

SSH 접속이 실패했을 때 나오는 메시지만 봐도 원인을 상당 부분 좁힐 수 있습니다.
| 오류 메시지 | 주요 원인 | 확인/조치 |
|---|---|---|
| Connection refused | SSH 서비스가 꺼져 있음 또는 포트 불일치 | systemctl status sshd로 서비스 확인, 포트 번호 재확인 |
| Connection timed out | 방화벽·보안 그룹이 포트를 막음, IP 오류 | ufw/firewalld 및 클라우드 보안 그룹 22번 포트 개방 여부 확인 |
| Permission denied (publickey) | 키 미등록, 잘못된 키 지정, 권한 오류 | ssh -i 키파일경로로 명시 접속, 키 파일 권한 600 확인 |
| Host key verification failed | 서버 재설치 등으로 호스트 키 변경 | 원인 확인 후 known_hosts에서 해당 줄 삭제 |
외부 접속 시 추가로 챙길 보안 설정
기본 포트 변경과 root 로그인 차단
22번 포트는 인터넷을 스캔하는 자동화 봇의 1순위 표적입니다. 필수는 아니지만 포트 번호를 변경하면 무작위 스캔으로 인한 로그 노이즈와 시도 횟수를 상당히 줄일 수 있습니다. sshd_config에서 Port 값을 바꾸고, PermitRootLogin no로 설정해 root 계정으로의 직접 로그인을 막는 것도 기본적인 보안 관행입니다.
OpenSSH 자체도 최신 버전으로 유지하기
접속 설정을 잘 갖췄더라도 SSH 서버 소프트웨어(OpenSSH) 자체에 취약점이 발견되면 무력화될 수 있습니다. 2024년에는 인증 전 원격 코드 실행이 가능한 레이스 컨디션 취약점(CVE-2024-6387, 이른바 regreSSHion) - 한국인터넷진흥원(KISA)이, 2026년에는 인증서 기반 접속에서 접근 제어를 우회해 루트 권한을 얻을 수 있는 CVE-2026-35414(OpenSSH 10.3 미만 버전) - NVD가 발견돼 패치됐습니다. apt·dnf 같은 배포판 패키지 관리자로 정기적으로 보안 업데이트를 적용해 OpenSSH를 최신 패치 버전으로 유지하는 것이, 키 인증 전환만큼 중요한 보안 습관입니다.
fail2ban과 VPN 활용
fail2ban 같은 도구는 짧은 시간 동안 로그인에 반복 실패한 IP를 자동으로 차단해 무차별 대입 공격을 완화합니다. 여기서 한 단계 더 나아가, SSH 포트를 인터넷에 전혀 노출하지 않고 Tailscale·WireGuard 같은 VPN으로 서버와 클라이언트를 사설 네트워크처럼 연결한 뒤 그 안에서만 SSH를 쓰는 방식도 개인 서버 운영자들 사이에서 널리 쓰입니다. 포트를 열지 않으므로 공격 표면 자체가 줄어드는 장점이 있습니다.
- SSH 키 인증 전환 + 비밀번호 인증 차단
- root 로그인 차단, 필요한 계정만 접속 허용(
AllowUsers설정) - fail2ban 등으로 반복 로그인 실패 IP 자동 차단
- OpenSSH 자체 보안 업데이트를 배포판 패키지 관리자로 정기 적용
- 외부 노출이 부담스럽다면 VPN 뒤에서만 SSH 운용
비밀번호 기반 인증에서 벗어나는 김에, 서버 접속 계정이나 클라우드 콘솔 로그인에 쓰는 비밀번호 자체도 안전하게 관리할 필요가 있습니다. 비밀번호 관리앱을 함께 정리한 비밀번호 관리앱 추천 글도 참고하면 도움이 됩니다.
자주 묻는 질문
Q. SSH 접속 시 포트를 꼭 22번이 아닌 다른 번호로 바꿔야 하나요?
필수는 아닙니다. 포트를 바꿔도 서비스 자체의 보안 수준이 근본적으로 달라지진 않지만, 자동화 스캐너의 접근 시도를 줄여 로그가 깨끗해지고 무차별 대입 시도 횟수가 줄어드는 실질적인 효과가 있습니다. 변경 시 방화벽에서도 새 포트 번호를 함께 열어줘야 합니다.
Q. 비밀번호 인증과 SSH 키 인증 중 어느 것이 더 안전한가요?
SSH 키 인증이 더 안전합니다. 비밀번호는 추측이나 무차별 대입 공격에 노출될 수 있지만, 키 인증은 개인키 파일을 가진 사람만 접속할 수 있어 유출 경로가 비밀번호보다 훨씬 제한적입니다. 외부 인터넷에 서버를 노출한다면 키 인증 전환을 권장합니다.
Q. root 계정으로 SSH 접속하면 안 되나요?
가능은 하지만 권장하지 않습니다. root는 시스템의 모든 권한을 가진 계정이라, 이 계정이 뚫리면 서버 전체가 위험해집니다. 일반 계정으로 접속한 뒤 필요할 때만 sudo로 권한을 올려 쓰는 방식이 더 안전합니다.
Q. 클라우드(AWS 등) 서버인데 방화벽을 다 열었는데도 접속이 안 됩니다. 왜 그런가요?
클라우드 서버는 OS 자체 방화벽(ufw·firewalld)과 별개로 클라우드 플랫폼의 보안 그룹·네트워크 ACL이 한 겹 더 있습니다. OS 방화벽만 열고 보안 그룹의 인바운드 규칙에서 22번 포트(또는 변경한 포트)를 열지 않으면 여전히 접속이 막힙니다. 두 곳 모두 확인해야 합니다.
Q. Windows에서 Putty 없이도 SSH 접속이 가능한가요?
가능합니다. Windows 10 이후 버전은 선택적 기능으로 OpenSSH 클라이언트를 설치할 수 있고, 설치 후에는 Windows Terminal이나 PowerShell에서 별도 프로그램 없이 ssh 사용자명@서버IP 명령으로 바로 접속할 수 있습니다.