1. 소개
Ubuntu에서 SSH를 사용하면 서버나 PC에 원격으로 안전하게 접속하고 조작할 수 있습니다. 이 문서는 SSH의 기본 개념부터 Ubuntu에 SSH 서버를 설치하는 방법, 보안 모범 사례 및 문제 해결까지 초보자도 이해하기 쉬운 설명으로 자세히 안내합니다.
SSH란 무엇인가?
SSH(Secure Shell)는 네트워크를 통해 컴퓨터에 안전하게 원격 연결을 할 수 있게 해 주는 프로토콜입니다. Telnet이나 FTP와 같은 전통적인 프로토콜과 달리 SSH는 통신 데이터를 암호화하여 도청 및 변조 위험을 크게 줄여 줍니다.
Ubuntu에서 SSH의 주요 사용 사례
Ubuntu에서 SSH가 사용되는 주요 시나리오는 다음과 같습니다.
- 원격 서버 관리 : 원격지에서 Ubuntu 서버를 운영
- 파일 전송 : SCP 또는 SFTP를 이용해 파일을 안전하게 교환
- 포트 포워딩 : 안전한 원격 연결을 설정
이 문서에서 배우게 될 내용
- SSH의 기본 개념 및 메커니즘
- Ubuntu에 SSH 서버를 설치하는 방법
- SSH 연결을 설정하고 오류를 해결하는 방법
- SSH 보안 모범 사례
2. SSH의 기본 개념
SSH를 효과적으로 사용하려면 핵심 개념을 이해하는 것이 중요합니다. 이 장에서는 SSH가 어떻게 동작하는지와 인증 방식의 차이점을 설명합니다.
SSH 작동 원리
SSH는 클라이언트와 서버 간에 보안 연결을 설정하는 프로토콜입니다. 기본적으로 암호화된 통신을 위해 TCP 포트 22를 사용합니다.
주요 기능
- 원격 로그인 : 서버에서 명령을 실행
- 파일 전송 : SCP 또는 SFTP를 통해 데이터를 안전하게 전송
- 포트 포워딩 : SSH를 통해 다른 서비스에 연결
SSH 인증 방법
SSH는 주로 두 가지 인증 방법을 제공합니다.
비밀번호 인증
- 사용자 이름과 비밀번호로 로그인
- 간단하지만 무차별 대입 공격에 취약
공개키 인증
- 공개키와 개인키 쌍을 이용한 인증
- 더 안전하며 기본적으로 권장됨
SSH의 장점
- 암호화된 통신 : 전송되는 데이터를 보호
- 쉬운 원격 관리 : 어디서든 접근 가능
- 보안 강화 : 무단 접근 방지에 도움
3. Ubuntu에 SSH 서버 설치하기
Ubuntu에서 SSH를 사용하려면 OpenSSH 서버 패키지를 설치해야 합니다. 이 장에서는 설치 및 설정 방법을 설명합니다.
OpenSSH 서버 설치
Ubuntu에 OpenSSH 서버를 설치하려면 다음 명령을 실행합니다:
sudo apt update
sudo apt install openssh-server
설치가 완료되면 SSH 서비스가 실행 중인지 확인합니다:
sudo systemctl status ssh
SSH 서비스 시작 및 관리
SSH 서비스를 수동으로 시작하거나 중지하려면 다음 명령을 사용합니다:
# Start SSH
sudo systemctl start ssh
# Enable SSH to start automatically after reboot
sudo systemctl enable ssh
# Stop SSH
sudo systemctl stop ssh
UFW(간편 방화벽) 설정
UFW가 활성화된 경우 SSH 연결이 차단될 수 있습니다. 아래 명령으로 SSH 포트(22)를 허용합니다:
sudo ufw allow ssh
sudo ufw enable
4. SSH 연결 설정
SSH를 안전하게 사용하려면 올바른 설정이 필수입니다. 이 장에서는 공개키 인증을 설정하는 방법을 설명합니다.
키 쌍 생성
클라이언트 머신에서 다음 명령을 실행해 공개/비공개 키 쌍을 생성합니다:
ssh-keygen -t rsa -b 4096
기본적으로 비공개 키는 ~/.ssh/id_rsa에, 공개 키는 ~/.ssh/id_rsa.pub에 저장됩니다.
공개키를 서버에 업로드
생성된 공개키를 SSH 서버로 전송합니다:
ssh-copy-id username@server-ip-address
또는 수동으로 전송합니다:
scp ~/.ssh/id_rsa.pub username@server-ip-address:~/
서버에서 다음 명령을 실행해 공개키를 올바른 디렉터리에 배치합니다:
mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub
sshd_config 편집
보안 설정을 강화하기 위해 SSH 구성 파일을 엽니다:
sudo nano /etc/ssh/sshd_config
다음 구성 항목을 확인하고 편집합니다:
# Disable password authentication (use public key only)
PasswordAuthentication no
# Disable root login
PermitRootLogin no
# Change the SSH port (example: 2222)
Port 2222
변경을 마친 후 SSH 서비스를 재시작합니다:
sudo systemctl restart ssh
5. SSH 연결 실행
Ubuntu에 SSH 서버를 설정한 후 클라이언트 머신에서 연결할 수 있습니다. 이 장에서는 포트를 변경했을 때의 기본 SSH 사용법과 연결 방법을 설명합니다.
기본 SSH 연결 명령
SSH 클라이언트에서 서버로 연결하려면 다음 명령을 사용합니다:
ssh username@server-ip-address
예를 들어 서버 IP가 192.168.1.10이고 사용자 이름이 ubuntu인 경우 다음과 같이 입력합니다:
ssh ubuntu@192.168.1.10
첫 번째 연결 시 서버의 지문이 표시됩니다. yes를 입력하여 수락하고 진행합니다.
포트 번호를 변경한 후 연결
SSH 포트를 예를 들어 2222로 변경한 경우 -p 옵션을 사용합니다:
ssh -p 2222 ubuntu@192.168.1.10
개인 키를 사용한 연결
공개 키 인증이 설정되어 있다면 -i 옵션으로 개인 키를 지정합니다:
ssh -i ~/.ssh/id_rsa ubuntu@192.168.1.10
SSH를 통한 원격 명령 실행
인터랙티브하게 로그인하지 않고 원격 서버에서 직접 명령을 실행할 수 있습니다:
ssh ubuntu@192.168.1.10 "ls -lah /home/ubuntu"
이 방법은 스크립트를 이용한 효율적인 자동화와 원격 작업에 유용합니다.
SCP로 파일 전송
SSH를 이용해 로컬 PC와 원격 서버 간에 파일을 전송할 수 있습니다.
Local → Remote (로컬 → 원격)
scp filename username@server-ip-address:/remote/directory
예시:
scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/
Remote → Local (원격 → 로컬)
scp username@server-ip-address:/remote/filename /local/directory
예시:
scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./
SFTP로 파일 관리
SFTP를 사용해 파일을 관리할 수도 있습니다:
sftp ubuntu@192.168.1.10
연결 후 다음 명령들을 실행할 수 있습니다:
ls # List files
cd # Change directory
put filename # Upload a local file to the remote server
get filename # Download a remote file to the local machine
exit # Exit the connection
6. SSH 연결 문제 해결
SSH 연결 시 문제가 발생하는 경우가 흔합니다. 이 장에서는 일반적인 문제와 해결 방법을 설명합니다.
SSH 연결 오류의 일반적인 원인 및 해결책
SSH 연결이 실패할 때 원인은 보통 다음 중 하나입니다:
1. SSH 서버가 실행 중이 아님
먼저 SSH 서버가 정상적으로 실행되고 있는지 확인합니다:
sudo systemctl status ssh
해결책:
- SSH 서버가 중지된 경우 다음 명령으로 시작합니다:
sudo systemctl start ssh
- 재부팅 후 자동으로 SSH가 시작되도록 하려면 다음을 실행합니다:
sudo systemctl enable ssh
2. 방화벽(UFW)이 SSH를 차단함
UFW(간편 방화벽)가 활성화되어 있으면 SSH 접근이 차단될 수 있습니다:
해결책:
- 현재 UFW 설정을 확인합니다:
sudo ufw status
- SSH 접근을 허용합니다:
sudo ufw allow ssh
(사용자 정의 포트를 사용하는 경우 sudo ufw allow <port-number>를 실행하십시오)
- UFW를 재시작합니다:
sudo ufw reload
3. 포트 번호가 변경됨
SSH 서버가 기본 포트 22가 아닌 경우, 연결 시 올바른 포트를 지정해야 합니다:
해결책:
- 서버에서 사용 중인 포트 번호를 확인합니다:
sudo grep Port /etc/ssh/sshd_config
- 클라이언트에서 올바른 포트를 지정합니다:
ssh -p 2222 username@server-ip-address
4. 잘못된 SSH 키 권한
공개 키 인증을 사용하는 경우, 키 권한이 올바르지 않으면 연결이 차단될 수 있습니다.
해결책:
- 개인 키 권한 설정:
chmod 600 ~/.ssh/id_rsa
- 공개 키 권한 설정:
chmod 644 ~/.ssh/authorized_keys
5. 호스트 키 불일치
서버의 SSH 호스트 키가 변경된 경우, 클라이언트는 다음과 같은 오류를 표시할 수 있습니다: “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”
해결책:
- 이전 호스트 키 삭제:
ssh-keygen -R <server-ip-address>
- 다시 연결 시도:
ssh username@server-ip-address
6. SSH 로그 확인
자세한 SSH 오류 메시지를 확인하려면 서버 로그 파일을 확인하십시오:
sudo journalctl -u ssh --no-pager | tail -n 20
실시간으로 로그를 모니터링하려면 다음을 실행하십시오:
sudo tail -f /var/log/auth.log
7. SSH 연결 시간 초과 문제
SSH 연결이 느리거나 예기치 않게 끊어지는 경우, 다음 항목을 검토하십시오:
해결책:
- KeepAlive 활성화 클라이언트의
~/.ssh/config에 다음을 추가하십시오:Host * ServerAliveInterval 60
- 서버의 시간 초과 설정 조정
/etc/ssh/sshd_config에 다음을 추가하고 서비스를 재시작하십시오:ClientAliveInterval 60 ClientAliveCountMax 3sudo systemctl restart ssh
요약
SSH 연결 문제는 일반적으로 다음 원인에서 발생합니다. 대부분의 경우, 아래 항목들을 확인하면 문제가 해결됩니다:
✅ SSH 서비스가 실행 중인지 확인
✅ 방화벽이 연결을 차단하고 있는지 확인
✅ 올바른 SSH 포트를 사용하고 있는지 확인
✅ SSH 키 권한이 올바르게 설정되어 있는지 확인
✅ SSH 로그를 검토하여 자세한 오류를 파악

7. SSH 보안 강화
SSH는 강력한 원격 접근 도구이지만, 적절한 보안 조치가 없으면 무단 접근이나 무차별 공격의 대상이 될 수 있습니다. 이 장에서는 SSH 보안을 강화하기 위한 권장 설정을 설명합니다.
1. 비밀번호 인증 비활성화 및 공개 키 인증 사용
기본적으로 SSH는 비밀번호 로그인을 허용하며, 이는 무차별 공격 위험을 높입니다. 공개 키 인증을 활성화하고 비밀번호 인증을 비활성화하여 보안을 향상시킵니다.
단계
sshd_config편집sudo nano /etc/ssh/sshd_config
- 다음 설정을 편집하거나 추가
PasswordAuthentication no PubkeyAuthentication yes
- SSH 서비스 재시작
sudo systemctl restart ssh
이 구성을 적용하면 SSH는 공개 키 인증만 허용합니다. 사전에 SSH 키가 올바르게 설정되어 있는지 확인하십시오.
2. SSH 포트 번호 변경
기본 SSH 포트(22)를 사용하면 서버가 공격자에게 더 쉽게 노출됩니다. 포트 번호를 변경하면 무단 접근 시도를 줄이는 데 도움이 됩니다.
단계
sshd_config열기sudo nano /etc/ssh/sshd_config
- 다음 줄을 수정 (예: 포트를 2222로 변경)
Port 2222
- 방화벽에서 새 포트를 허용
sudo ufw allow 2222/tcp
- SSH 서비스 재시작
sudo systemctl restart ssh
- 새 포트로 연결 테스트
ssh -p 2222 username@server-ip-address
3. 루트 로그인 비활성화
기본적으로 SSH는 루트 로그인을 허용하며, 이는 심각한 보안 위험을 초래합니다. 일반 사용자 계정을 통해 SSH 접근만 허용하고, 관리 권한이 필요할 때는 sudo를 사용하는 것이 권장됩니다.
단계
sshd_config열기sudo nano /etc/ssh/sshd_config
- 다음 줄을 편집
PermitRootLogin no
- SSH 서비스 재시작
sudo systemctl restart ssh
4. Fail2Ban으로 무차별 공격 방지
Fail2Ban은 무단 로그인 시도를 감지하고, 일정 횟수 이상 실패한 IP 주소를 자동으로 차단합니다.
설치 및 구성
- Fail2Ban 설치
sudo apt install fail2ban -y
- 기본 구성 파일 복사
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
jail.local편집sudo nano /etc/fail2ban/jail.local
[sshd]섹션 수정[sshd] enabled = true maxretry = 5 bantime = 600 findtime = 600
maxretry: 허용되는 실패 로그인 시도 횟수bantime: IP 차단 기간(초)findtime: 실패 시도 횟수를 계산하는 시간 창(초)
- Fail2Ban 재시작
sudo systemctl restart fail2ban
- 현재 Fail2Ban 상태 확인
sudo fail2ban-client status sshd
요약
SSH 보안을 강화하려면 다음 조치를 적용하십시오:
✅ 비밀번호 인증을 비활성화하고 공개 키 인증을 사용
✅ 공격 노출을 줄이기 위해 SSH 포트를 변경
✅ 위험을 최소화하기 위해 root 로그인 비활성화
✅ 무차별 공격 방지를 위해 Fail2Ban 사용
8. 자주 묻는 질문 (FAQ)
이 섹션은 SSH를 구성하고 사용할 때 발생하는 일반적인 질문과 문제를 다룹니다.
Q1: SSH에서 “Connection refused”(연결 거부) 메시지가 표시되는 이유는?
SSH 연결이 거부되는 데는 여러 가능한 원인이 있습니다.
주요 원인 및 해결책:
- SSH 서비스가 실행 중이 아님
sudo systemctl status ssh
해결책: 서비스가 중지된 경우 시작하십시오.
sudo systemctl start ssh
- 방화벽(UFW)이 SSH를 차단하고 있음
sudo ufw allow ssh sudo ufw enable
- SSH 포트 번호가 변경됨 SSH가 사용자 지정 포트를 사용하는 경우 연결 시 해당 포트를 지정하십시오.
ssh -p 2222 username@server-ip-address
Q2: 기본 SSH 포트를 어떻게 변경합니까?
포트 22는 일반적인 공격 대상이므로 변경하면 보안이 향상됩니다.
단계:
- SSH 구성 파일 편집
sudo nano /etc/ssh/sshd_config
Port지시문 수정Port 2222
- 방화벽을 통해 새 포트 허용
sudo ufw allow 2222/tcp
- SSH 서비스 재시작
sudo systemctl restart ssh
이러한 변경을 적용한 후 새 포트를 사용하여 연결하십시오:
ssh -p 2222 username@server-ip-address
Q3: 공개 키 인증이 작동하지 않을 때 확인해야 할 사항은?
SSH 키 인증이 실패할 경우 다음을 확인하십시오:
- 공개 키가 올바르게 설치되었는지 확인
ls -l ~/.ssh/authorized_keys
authorized_keys 파일이 존재하고 올바른 키가 포함되어 있는지 확인하십시오.
- 파일 권한 확인
chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
- SSH가 공개 키 인증을 허용하는지 확인
sudo nano /etc/ssh/sshd_config
다음 항목이 존재하는지 확인하십시오:
PubkeyAuthentication yes
PasswordAuthentication no
- SSH 서비스 재시작
sudo systemctl restart ssh
Q4: 특정 IP 주소에서만 SSH 접근을 허용하려면 어떻게 합니까?
특정 IP 주소에만 SSH 접근을 제한하면 보안이 크게 향상됩니다.
방법 1: sshd_config 편집
- 구성 파일 열기
sudo nano /etc/ssh/sshd_config
AllowUsers항목 추가AllowUsers username@192.168.1.100
- SSH 서비스 재시작
sudo systemctl restart ssh
방법 2: 방화벽(UFW) 구성
- 특정 IP에서 접근 허용
sudo ufw allow from 192.168.1.100 to any port 22
- 다른 IP는 차단
sudo ufw deny 22
Q5: SSH 세션 타임아웃을 어떻게 변경합니까?
SSH 세션이 유휴 상태 후 연결이 끊어지는 경우 다음 설정을 수정하십시오.
클라이언트 측 설정
~/.ssh/config에 다음을 추가:Host * ServerAliveInterval 60
서버 측 설정
sshd_config편집sudo nano /etc/ssh/sshd_config
- 추가하거나 수정:
ClientAliveInterval 60 ClientAliveCountMax 3
- SSH 서비스 재시작
sudo systemctl restart ssh
요약
This FAQ는 가장 흔한 SSH 문제와 해결책을 다루었습니다. 문제가 발생하면 항상 로그와 설정을 검토하여 원인을 파악하세요.
✅ “Connection refused” 문제 해결 방법
✅ 기본 SSH 포트를 변경하고 올바르게 연결하는 방법
✅ 공개 키 인증 실패를 해결하는 방법
✅ 특정 IP 주소에 대한 SSH 접근을 제한하는 방법
✅ SSH 세션 타임아웃을 방지하는 방법
9. 결론
이 문서는 기본 개념부터 고급 보안 실천까지 Ubuntu에서 SSH를 설정하고 사용하는 방법을 설명했습니다. 주요 내용을 정리해 보겠습니다.
핵심 요점
1. SSH 기본
- SSH는 암호화된 통신을 통해 안전한 원격 접근을 가능하게 합니다.
- Telnet이나 FTP보다 더 안전합니다.
- 인증 방법으로는 비밀번호 인증과 공개 키 인증이 있습니다.
2. SSH 서버 설치
sudo apt install openssh-server명령으로 OpenSSH를 설치합니다.systemctl status ssh로 서비스 상태를 확인합니다.sudo ufw allow ssh로 UFW를 통해 SSH 접근을 허용합니다.
3. SSH 접근 설정
ssh username@server-ip-address로 연결합니다.- 보안을 강화하려면 공개 키 인증을 사용합니다.
- 원한다면
sshd_config에서 비밀번호 인증을 비활성화합니다.
4. 문제 해결
- SSH가 실행 중인지 확인합니다 (
systemctl status ssh). - 포트를 변경했으면 올바른 포트를 지정합니다 (
ssh -p 2222 username@IP). ~/.ssh/authorized_keys의 키 권한을 확인합니다.
5. 보안 강화
- 비밀번호 인증을 비활성화하고 공개 키에 의존합니다.
- SSH 포트를 변경하여 스캔 공격을 줄입니다.
- Fail2Ban을 사용하여 반복적인 로그인 실패를 차단합니다.
- 가능하면 특정 IP 주소에 SSH 접근을 제한합니다.
추가 학습 자료
SSH에 대한 이해를 깊게 하려면 다음 자료를 살펴보세요:
📚 공식 문서
🛠 관련 도구
- Windows에서 SSH 접근을 위한 PuTTY
- Download PuTTY
- 고급 SSH 기능을 위한 MobaXterm
- MobaXterm Official Site
🎥 추천 동영상
- YouTube에서 “Ubuntu SSH setup”을 검색하면 초보자 친화적인 튜토리얼을 찾을 수 있습니다.
作成した動画を友だち、家族、世界中の人たちと共有…
다음 단계
SSH 작동 방식을 이해했다면 더 고급 사용법을 탐색해 보세요:
✅ Ansible을 이용해 SSH로 서버 관리 자동화
- 다수의 서버를 효율적으로 관리하는 데 이상적입니다.
✅ SSH 터널링 및 포트 포워딩
- SSH를 사용해 원격 데스크톱 연결을 보호하거나 VPN과 유사한 터널을 만들 수 있습니다.
✅ SSH 로그를 모니터링하고 보안을 강화
fail2ban및logwatch같은 도구를 사용해 의심스러운 활동을 감시합니다.
마무리 생각
이 가이드를 끝까지 읽어 주셔서 감사합니다! 🎉
Ubuntu에서 SSH를 올바르게 설정하면 원격 관리 효율성과 보안이 크게 향상됩니다.
학습을 계속하면서 보안 터널링 및 사전 모니터링과 같은 고급 기술을 탐구해 더욱 견고한 시스템을 구축하세요.
안전하고 생산적인 SSH 경험을 즐기세요! 🖥️🔐
