Overview
SSH(Secure Shell) 프로토콜은 네트워크를 통한 안전한 원격 접속 및 명령 실행을 가능하게 하는 암호화된 프로토콜이다.
Telnet과 달리 암호화된 키를 이용하여 데이터 전송을 보호하며, 원격 로그인뿐만 아니라 파일 전송(SFTP, SCP), 포트 포워딩 등의 기능도 지원한다.
이 글에서는 SSH의 개념, 동작 방식, 설정 방법 및 보안 강화 방안에 대해 살펴본다.

SSH(Secure Shell)란?
SSH는 네트워크 상에서 다른 컴퓨터의 쉘(Shell)에 접근할 수 있도록 해주는 프로토콜이다.
Telnet과 같은 원격 접속 서비스와 유사하지만, SSH는 암호화된 보안 채널을 통해 데이터를 전송하여 더욱 안전하다.
SSH의 주요 특징
- 보안 강화: 암호화된 통신을 제공하여 패킷 스니핑 및 중간자 공격 방지
- 원격 접속: Linux, Unix 서버에 원격으로 로그인하여 관리 가능
- 파일 전송: SCP, SFTP를 사용하여 보안 파일 전송 지원
- 포트 포워딩: 로컬 및 원격 포트 포워딩 기능을 통해 방화벽 우회 가능
- 다양한 인증 방식: 비밀번호, 공개 키 인증(Public Key), Kerberos 인증 등 지원
왜 SSH를 사용해야 하는가?
SSH는 일반적으로 Unix 계열(Linux, macOS)에서 사용되지만, Windows에서도 사용할 수 있다.
Windows 10 이상에서는 기본적으로 OpenSSH 클라이언트가 내장되어 있다.
SSH의 기본 포트는 TCP 22이며, 필요 시 변경할 수도 있다.
SSH 동작방식
SSH는 클라이언트-서버 모델을 기반으로 동작하며, 다음과 같은 과정을 거친다.
1️⃣ 클라이언트가 서버에 대한 연결을 시작
2️⃣ 서버가 자신의 공개 키(Public Key)로 응답
3️⃣ 클라이언트가 서버 키를 확인 (중간자 공격 방지)
4️⃣ 클라이언트가 서버의 공개 키로 암호화된 세션 키를 전송
5️⃣ 서버가 개인 키(Private Key)로 세션 키를 해독
6️⃣ 보안 채널이 설정됨
7️⃣ 클라이언트와 서버 간 암호화된 데이터 교환 가능
SSH 연결 과정 요약
- 비대칭 암호화를 사용하여 안전한 세션 키를 교환
- 이후에는 세션 키를 이용한 대칭 암호화로 데이터 전송
- 데이터는 암호화되어 안전하게 보호됨

사용법
- 환경설정을 이용한 방법(
/etc/ssh/sshd_config
) - 명령어를 이용한 방법(
ssh , scp , sftp
)
1️⃣ 기본 SSH 접속
ssh <IP 주소 또는 도메인>
- 현재 로그인한 계정과 동일한 사용자로 접속
ssh -l <사용자명> <서버 IP>
- 특정 사용자 계정으로 접속
ssh <사용자명>@<서버 IP>
- 사용자명을 포함하여 접속
2️⃣ SSH 파일 전송
scp <로컬 파일 경로> <사용자명>@<서버 IP>:<원격 경로>
- scp 명령어를 사용하여 원격 서버로 파일 전송
sftp <사용자명>@<서버 IP>
- SFTP를 사용하여 파일을 업로드/다운로드
설정(CentOS 기준)
패키지(openssh*) / 포트(22/tcp) / 서비스(ssh) / 데몬(sshd[.service])
yum -y install openssh* # SSH 패키지 설치
systemctl restart sshd.service # SSH 서비스 재시작
systemctl enable sshd.service # 부팅 시 SSH 자동 실행
firewall-cmd --permanent --add-port=22/tcp # 방화벽 포트 열기
firewall-cmd --permanent --add-service=ssh # SSH 서비스 허용
firewall-cmd --reload # 방화벽 설정 적용
firewall-cmd --list-all # 방화벽 설정 확인
SSH 보안 설정 (파일: /etc/ssh/sshd_config
)
SSH의 보안을 강화하기 위해 sshd_config 파일을 수정해야 한다.
1️⃣ SSH 기본 포트 변경 (보안 강화)
Port 2222 # 기본 포트 22 대신 2222로 변경 (1024 이상 사용 권장)
semanage port -a -t ssh_port_t -p tcp 2222 # SELinux 설정
firewall-cmd --permanent --add-port=2222/tcp # 방화벽 설정
firewall-cmd --reload
2️⃣ Root 사용자 접속 제한
PermitRootLogin no # Root 계정 직접 로그인 차단
3️⃣ SSH 프로토콜 버전 설정
Protocol 2 # SSH1은 보안상 위험하므로 SSH2만 사용
4️⃣ 암호 기반 로그인 차단 (공개 키 인증 사용)
PasswordAuthentication no # 패스워드 로그인 차단 (공개 키 인증만 허용)
5️⃣ SSH 타임아웃 설정 (유휴 접속 종료)
ClientAliveInterval 300 # 5분(300초) 동안 응답 없으면 세션 종료
ClientAliveCountMax 3 # 3회 반복 후 종료
6️⃣ 접속 실패 횟수 제한 (Brute Force 공격 방지)
MaxAuthTries 3 # 최대 3회 인증 실패 시 차단
7️⃣ 특정 사용자만 SSH 접속 허용
AllowUsers user1 user2 # 지정된 사용자만 SSH 접속 가능
DenyUsers root hacker # 특정 사용자 접속 차단
설정 적용 후 SSH 서비스 재시작
systemctl restart sshd
SSH 키 기반 인증 설정 (PasswordAuthentication no 설정 시 필수)
1️⃣ 클라이언트에서 공개 키 생성
ssh-keygen -t rsa -b 4096
- id_rsa (개인 키), id_rsa.pub (공개 키) 생성
2️⃣ 공개 키를 서버에 등록
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server-ip
또는 수동으로:
cat ~/.ssh/id_rsa.pub | ssh user@server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
마무리
SSH는 원격 접속을 안전하게 관리할 수 있는 강력한 도구이다.
보안을 강화하려면 기본 포트 변경, Root 로그인 차단, 패스워드 인증 비활성화, 키 기반 인증 설정이 필수적이다.
정리
- 기본적으로 SSH는 TCP 22 포트를 사용하며, 필요 시 변경 가능
- SSH 보안을 강화하기 위해 Root 로그인 차단, 패스워드 인증 비활성화, 공개 키 인증 사용 필요
- 타임아웃 설정, 접속 실패 횟수 제한 등을 적용하여 보안성을 높일 수 있음
이제 보안성이 강화된 SSH 설정을 직접 적용해보고, 안전한 원격 접속 환경을 구축해보자!
Reference
https://www.sectorlink.com/article/what-is-ssh-and-why-you-should-be-using-it
'Networking, Security, Protocols' 카테고리의 다른 글
RSA 공개키를 이용한 SSH 접속 (0) | 2022.01.20 |
---|---|
DNS(Domain Name System) (0) | 2022.01.19 |
NFS(Network File System) / auto fs(auto file system) (0) | 2022.01.18 |
FTP란? FTP Server란? (0) | 2022.01.18 |
SCP(Secure Copy) (0) | 2022.01.17 |