目次
1. 소개
Ubuntu에서 SSH를 이용하면 원격에서 서버나 PC에 안전하게 접근하고 조작할 수 있게 됩니다. 이 기사에서는 SSH의 개요부터 Ubuntu에 SSH 서버를 설치하는 방법, 보안 대책, 트러블슈팅까지 초보자도 이해할 수 있도록 자세히 설명합니다.SSH란?
SSH(Secure Shell)는 네트워크를 통해 안전하게 원격 컴퓨터에 연결하기 위한 프로토콜입니다. 기존의 Telnet이나 FTP와 달리 데이터가 암호화되므로 도청이나 변조 위험을 크게 줄일 수 있습니다.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 서비스를 수동으로 시작·중지하려면 다음 명령을 사용합니다.# SSH를 시작
sudo systemctl start ssh
# SSH를 활성화(재부팅 후 자동 시작)
sudo systemctl enable ssh
# SSH를 중지
sudo systemctl stop ssh
UFW (Uncomplicated Firewall) 설정
기본적으로 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 사용자명@서버의IP주소
또는 수동으로 복사하는 경우:scp ~/.ssh/id_rsa.pub 사용자명@서버의IP주소:~/
서버 측에서 다음 명령을 실행하여 공개키를 적절한 디렉터리에 배치합니다。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
다음 항목을 확인·편집합니다。# 비밀번호 인증을 비활성화(공개키 인증만)
PasswordAuthentication no
# Root 로그인 금지
PermitRootLogin no
# 사용할 포트 변경(예: 2222)
Port 2222
설정을 변경했으면 SSH 서비스를 재시작합니다。sudo systemctl restart ssh
5. SSH 연결 실행
Ubuntu에서 SSH 서버를 설정한 후에는 실제로 클라이언트에서 연결을 해야 합니다. 이 장에서는 기본적인 SSH 연결 방법과 포트 변경 시 연결 방법에 대해 설명합니다.기본적인 SSH 연결 명령
SSH 클라이언트에서 서버에 연결하려면 다음 명령을 사용합니다.ssh 사용자명@서버의 IP 주소
예를 들어, 서버의 IP 주소가 192.168.1.10
이고, 사용자명이 ubuntu
인 경우, 아래와 같이 입력합니다.ssh ubuntu@192.168.1.10
첫 번째 연결 시 서버의 지문이 표시되므로, “yes”를 입력하여 연결을 승인해 주세요.포트 번호를 변경한 경우의 연결
기본 22번 포트가 아니라 예를 들어 “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와 원격 서버 간에 파일을 전송할 수 있습니다. 로컬 → 원격scp 파일명 사용자명@서버의 IP 주소:원격 디렉터리
예:scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/
원격 → 로컬예:scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./
SFTP를 이용한 파일 관리
SFTP를 이용하여 파일을 관리할 수도 있습니다.sftp ubuntu@192.168.1.10
연결 후, 아래와 같은 명령을 사용할 수 있습니다.ls # 파일 목록
cd # 디렉터리 이동
put 파일명 # 로컬에서 원격으로 업로드
get 파일명 # 원격에서 로컬로 다운로드
exit # 연결 종료
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(Uncomplicated Firewall)가 활성화된 경우, SSH가 차단될 가능성이 있습니다。 해결책:- 현재 UFW 설정을 확인한다。
sudo ufw status
- SSH를 허용한다。
sudo ufw allow ssh
(포트를 변경한 경우 sudo ufw allow <포트번호>
를 실행합니다。)- UFW를 재시작한다。
sudo ufw reload
3. 포트 번호가 변경됨
기본22
번 포트가 아니라 커스텀 포트를 사용하는 경우, 연결 시 적절한 포트를 지정해야 합니다。 해결책:- 서버 측에서 사용 중인 포트를 확인한다。
sudo grep Port /etc/ssh/sshd_config
- 클라이언트 측에서 적절한 포트를 지정하여 연결한다。
ssh -p 2222 사용자명@서버의IP주소
4. SSH 키의 권한이 올바르지 않음
공개키 인증을 사용하는 경우, 키 파일의 권한이 적절하지 않으면 연결할 수 없습니다。 해결책:- 비밀키의 권한을 적절히 설정한다。
chmod 600 ~/.ssh/id_rsa
- 공개키의 권한을 적절히 설정한다。
chmod 644 ~/.ssh/authorized_keys
5. 호스트 키 불일치
서버의 SSH 호스트 키가 변경된 경우, 클라이언트 측에서 “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!” 라는 오류가 발생할 수 있습니다。 해결책:- 오래된 호스트 키를 삭제한다。
ssh-keygen -R <서버의IP주소>
- 다시 SSH 연결을 시도한다。
ssh 사용자명@서버의IP주소
6. SSH 로그 확인
SSH의 상세 오류 메시지를 확인하려면, 서버 측 로그를 확인합니다。sudo journalctl -u ssh --no-pager | tail -n 20
또한, 실시간으로 로그를 확인하려면 아래 명령을 실행합니다。sudo tail -f /var/log/auth.log
7. 연결이 타임아웃되는 경우
SSH 연결이 느리거나 중간에 끊어지는 경우, 다음 사항을 확인하십시오。 해결책:- KeepAlive를 활성화 클라이언트의
~/.ssh/config
에 아래를 추가。
Host *
ServerAliveInterval 60
- 서버 측에서 타임아웃 설정을 조정
/etc/ssh/sshd_config
에 아래를 추가하고, SSH 서비스를 재시작。
ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh
요약
SSH 연결 문제는 다양한 원인으로 발생하지만, 대부분은 아래 체크포인트로 해결할 수 있습니다。 ✅ SSH 서비스가 실행 중인지 확인 ✅ 방화벽이 차단하고 있지 않은지 확인 ✅ 포트 설정이 올바른지 확인 ✅ SSH 키의 권한이 적절한지 조사 ✅ 오류 메시지를 로그에서 확인
7. SSH 보안 강화
SSH는 강력한 원격 액세스 도구이지만, 적절한 보안 조치를 취하지 않으면 무단 접근이나 무차별 대입 공격의 표적이 될 가능성이 있습니다. 이 장에서는 SSH의 안전성을 높이기 위한 권장 설정을 설명합니다.1. 비밀번호 인증 비활성화 및 공개키 인증 권장
기본적으로 SSH는 비밀번호 인증을 허용하지만, 이는 무차별 대입 공격 위험을 높입니다. SSH의 공개키 인증을 활성화하고 비밀번호 인증을 비활성화함으로써 보안을 강화할 수 있습니다.절차
sshd_config
를 편집한다
sudo nano /etc/ssh/sshd_config
- 다음 설정을 변경한다(또는 추가한다)
PasswordAuthentication no
PubkeyAuthentication yes
- SSH 서비스를 재시작한다
sudo systemctl restart 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 사용자명@서버의 IP 주소
3. Root 사용자의 SSH 로그인 금지
기본적으로 root 사용자는 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
: 차단 시간(초)findtime
: 실패 횟수 판단 기간(초)
- Fail2Ban을 재시작
sudo systemctl restart fail2ban
- 현재 Fail2Ban 상태 확인
sudo fail2ban-client status sshd
요약
SSH 보안을 강화하기 위해 다음 대책을 실행합시다. ✅ 비밀번호 인증을 비활성화하고, 공개키 인증을 사용 ✅ SSH 포트 번호를 변경하고, 공격 위험을 감소 ✅ Root 로그인 금지하고, 특정 사용자만 접근 허용 ✅ Fail2Ban을 도입하고, 무차별 대입 공격을 방지8. 자주 묻는 질문(FAQ)
SSH를 설정·운용할 때 자주 발생하는 의문점과 문제에 대해 자세히 설명합니다.Q1: SSH 연결 시 “연결이 거부되었습니다” 라는 메시지가 표시되는 원인은?
SSH 서버에 대한 연결이 거부되는 원인은 여러 가지가 있을 수 있습니다. 주요 원인 및 대책- SSH 서비스가 실행되지 않음
sudo systemctl status ssh
대책: 서비스가 중지된 경우 시작합니다. sudo systemctl start ssh
- 방화벽(UFW)이 차단하고 있음
sudo ufw allow ssh
sudo ufw enable
- 포트 번호 변경 SSH의 포트 번호를 기본(22) 이외로 변경한 경우, 올바른 포트를 지정합니다.
ssh -p 2222 사용자명@서버의IP주소
Q2: SSH 기본 포트를 변경하는 방법은?
기본 22번 포트는 공격 대상이 되기 쉬우므로, 변경하면 보안이 향상됩니다. 절차- 설정 파일을 편집
sudo nano /etc/ssh/sshd_config
Port
값을 변경 (예: 2222)
Port 2222
- 새 포트를 방화벽에서 허용
sudo ufw allow 2222/tcp
- SSH 서비스를 재시작
sudo systemctl restart ssh
변경 후에는 새 포트로 연결을 시도해 주세요.ssh -p 2222 사용자명@서버의IP주소
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 연결을 허용하려면?
SSH를 특정 IP 주소에서만 허용함으로써 보안을 강화할 수 있습니다. 방법1:sshd_config
편집- 설정 파일을 엽니다
sudo nano /etc/ssh/sshd_config
AllowUsers
에 허용할 IP 주소를 추가
AllowUsers 사용자명@192.168.1.100
- SSH 서비스를 재시작
sudo systemctl restart ssh
방법2: 방화벽(UFW) 설정- SSH 연결을 허용할 IP 주소 지정
sudo ufw allow from 192.168.1.100 to any port 22
- 그 외의 SSH 연결을 차단
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
정리
본 장에서는 SSH와 관련된 자주 묻는 질문과 그 해결 방법을 소개했습니다. 문제가 발생했을 때는 로그를 확인하면서 원인을 파악하는 것이 중요합니다. ✅ SSH 연결이 거부된 경우의 대처법 ✅ 기본 포트 변경 및 적절한 연결 방법 ✅ 공개키 인증이 작동하지 않을 경우 체크리스트 ✅ 특정의9. 요약
이 기사에서는 Ubuntu에서 SSH 설정 및 사용 방법을 기본부터 응용까지 자세히 설명했습니다. 여기서 중요한 포인트를 되짚어보고, 학습을 심화하기 위한 리소스를 소개합니다.이 기사 요점 정리
1. SSH의 기본과 원리
- SSH는 안전하게 원격 연결을 수행하기 위한 프로토콜입니다.
- 데이터가 암호화되기 때문에 Telnet이나 FTP보다 안전합니다.
- 인증 방식에는 비밀번호 인증과 공개키 인증이 있습니다.
2. Ubuntu에서 SSH 서버 설치
- OpenSSH를
sudo apt install openssh-server
로 설치합니다. systemctl status ssh
로 서비스 상태를 확인합니다.- UFW(방화벽)에서
sudo ufw allow ssh
를 실행하여 접근을 허용합니다.
3. SSH 연결 설정
ssh 사용자명@서버의IP주소
로 원격 연결합니다.- 공개키 인증을 사용하면 보안이 향상됩니다.
sshd_config
설정으로 비밀번호 인증을 비활성화할 수 있습니다.
4. SSH 문제 해결
- 서비스가 실행 중인지 확인합니다 (
systemctl status ssh
). - 포트 번호를 변경할 때는
ssh -p 2222 사용자명@IP
로 연결합니다. ~/.ssh/authorized_keys
의 권한 설정을 적절히 조정합니다.
5. SSH 보안 강화
- 비밀번호 인증을 비활성화하고, 공개키 인증을 사용합니다.
- SSH 포트 번호를 변경(예:
2222
). - Fail2Ban을 도입하여 무차별 대입 공격을 방지합니다.
- 특정 IP 주소만 허용하여 불법 접근을 제한합니다.
6. FAQ에서 해결한 주요 의문
- “SSH 연결이 거부됨” → 서버의 실행 상태와 UFW 설정을 확인합니다.
- “공개키 인증이 작동하지 않음” → 키의 권한 및
sshd_config
을 확인합니다. - “SSH 타임아웃 방지” →
ClientAliveInterval
설정을 변경합니다.
추가 학습을 위한 리소스
SSH 설정을 더욱 깊이 이해하기 위해 아래 리소스를 활용하세요. 📚 공식 문서 🛠 관련 도구- PuTTY(Windows에서 SSH를 사용할 경우)
- PuTTY 다운로드
- MobaXterm(고기능 SSH 클라이언트)
- MobaXterm 공식 사이트
- YouTube에서 “Ubuntu SSH 설정” 등을 검색하면 초보자를 위한 해설 동영상이 많이 있습니다.
作成した動画を友だち、家族、世界中の人たちと共有…
다음 단계
이 기사를 읽고 SSH 기본을 이해했다면, 아래와 같은 응용 기술을 습득하는 것을 추천합니다. ✅ Ansible을 사용한 SSH 자동 관리- 서버가 여러 대 있는 경우, SSH를 이용해 Ansible으로 원격 관리를 자동화할 수 있습니다.
- SSH를 사용해 안전하게 원격 데스크톱 연결을 설정하거나 VPN처럼 사용할 수도 있습니다.
fail2ban
및logwatch
를 활용해 불법 접근을 실시간으로 감시하는 방법을 배웁니다.