Ubuntu에서 SSH 활용! 연결·포트 변경·공개키 인증 설정 가이드

目次

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의 공개키 인증을 활성화하고 비밀번호 인증을 비활성화함으로써 보안을 강화할 수 있습니다.

절차

  1. sshd_config 를 편집한다
   sudo nano /etc/ssh/sshd_config
  1. 다음 설정을 변경한다(또는 추가한다)
   PasswordAuthentication no
   PubkeyAuthentication yes
  1. SSH 서비스를 재시작한다
   sudo systemctl restart ssh
이 설정으로 SSH는 공개키 인증만을 허용하게 됩니다. 사전에 공개키 설정을 완료한 후 적용하십시오.

2. SSH 포트 번호 변경

SSH 기본 포트(22번)를 그대로 사용하면 공격자에게 노출되기 쉽습니다. 보안을 향상시키기 위해 포트 번호를 변경하는 것을 권장합니다.

절차

  1. sshd_config 를 연다
   sudo nano /etc/ssh/sshd_config
  1. 다음과 같이 변경한다(예: 2222로 변경)
   Port 2222
  1. 새 포트를 방화벽에서 허용
   sudo ufw allow 2222/tcp
  1. SSH 서비스를 재시작
   sudo systemctl restart ssh
  1. 새 포트로 연결 테스트
   ssh -p 2222 사용자명@서버의 IP 주소

3. Root 사용자의 SSH 로그인 금지

기본적으로 root 사용자는 SSH 로그인 가능하지만, 이는 보안 위험이 됩니다. 일반 사용자만 SSH 접근을 허용하고, 필요에 따라 sudo 를 사용하는 것이 권장됩니다.

절차

  1. sshd_config 를 연다
   sudo nano /etc/ssh/sshd_config
  1. 다음 행을 변경한다
   PermitRootLogin no
  1. SSH 서비스를 재시작
   sudo systemctl restart ssh

4. Fail2Ban을 도입하여 무차별 대입 공격 방지

Fail2Ban은 부정 로그인 시도를 감지하고, 일정 횟수 이상 실패가 있으면 IP 주소를 자동으로 차단하는 도구입니다.

설치 및 설정

  1. Fail2Ban을 설치
   sudo apt install fail2ban -y
  1. 설정 파일을 복사
   sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. jail.local 을 편집
   sudo nano /etc/fail2ban/jail.local
  1. [sshd] 항목을 변경
   [sshd]
   enabled = true
   maxretry = 5
   bantime = 600
   findtime = 600
  • maxretry: 허용되는 로그인 실패 횟수
  • bantime: 차단 시간(초)
  • findtime: 실패 횟수 판단 기간(초)
  1. Fail2Ban을 재시작
   sudo systemctl restart fail2ban
  1. 현재 Fail2Ban 상태 확인
   sudo fail2ban-client status sshd

요약

SSH 보안을 강화하기 위해 다음 대책을 실행합시다. ✅ 비밀번호 인증을 비활성화하고, 공개키 인증을 사용SSH 포트 번호를 변경하고, 공격 위험을 감소Root 로그인 금지하고, 특정 사용자만 접근 허용Fail2Ban을 도입하고, 무차별 대입 공격을 방지

8. 자주 묻는 질문(FAQ)

SSH를 설정·운용할 때 자주 발생하는 의문점과 문제에 대해 자세히 설명합니다.

Q1: SSH 연결 시 “연결이 거부되었습니다” 라는 메시지가 표시되는 원인은?

SSH 서버에 대한 연결이 거부되는 원인은 여러 가지가 있을 수 있습니다. 주요 원인 및 대책
  1. SSH 서비스가 실행되지 않음
   sudo systemctl status ssh
대책: 서비스가 중지된 경우 시작합니다.
   sudo systemctl start ssh
  1. 방화벽(UFW)이 차단하고 있음
   sudo ufw allow ssh
   sudo ufw enable
  1. 포트 번호 변경 SSH의 포트 번호를 기본(22) 이외로 변경한 경우, 올바른 포트를 지정합니다.
   ssh -p 2222 사용자명@서버의IP주소

Q2: SSH 기본 포트를 변경하는 방법은?

기본 22번 포트는 공격 대상이 되기 쉬우므로, 변경하면 보안이 향상됩니다. 절차
  1. 설정 파일을 편집
   sudo nano /etc/ssh/sshd_config
  1. Port 값을 변경 (예: 2222)
   Port 2222
  1. 새 포트를 방화벽에서 허용
   sudo ufw allow 2222/tcp
  1. SSH 서비스를 재시작
   sudo systemctl restart ssh
변경 후에는 새 포트로 연결을 시도해 주세요.
ssh -p 2222 사용자명@서버의IP주소

Q3: 공개키 인증이 작동하지 않을 때 확인해야 할 체크 포인트는?

SSH 공개키 인증이 동작하지 않을 경우, 아래를 확인해 주세요.
  1. 공개키가 적절히 배치되어 있는지
   ls -l ~/.ssh/authorized_keys
authorized_keys 가 존재하고, 적절한 키가 포함되어 있는지 확인합니다.
  1. 파일 권한이 적절한지
   chmod 600 ~/.ssh/authorized_keys
   chmod 700 ~/.ssh
  1. SSH 서버 설정이 공개키 인증을 허용하고 있는지
   sudo nano /etc/ssh/sshd_config
다음 설정을 확인:
   PubkeyAuthentication yes
   PasswordAuthentication no
  1. SSH 서비스를 재시작
   sudo systemctl restart ssh

Q4: 특정 IP 주소에서만 SSH 연결을 허용하려면?

SSH를 특정 IP 주소에서만 허용함으로써 보안을 강화할 수 있습니다. 방법1: sshd_config 편집
  1. 설정 파일을 엽니다
   sudo nano /etc/ssh/sshd_config
  1. AllowUsers에 허용할 IP 주소를 추가
   AllowUsers 사용자명@192.168.1.100
  1. SSH 서비스를 재시작
   sudo systemctl restart ssh
방법2: 방화벽(UFW) 설정
  1. SSH 연결을 허용할 IP 주소 지정
   sudo ufw allow from 192.168.1.100 to any port 22
  1. 그 외의 SSH 연결을 차단
   sudo ufw deny 22

Q5: SSH 연결의 타임아웃 시간을 변경하는 방법은?

SSH 세션이 일정 시간 후에 끊어지는 경우, 설정을 변경하여 대응할 수 있습니다. 클라이언트 측 설정
  1. ~/.ssh/config에 아래를 추가
   Host *
       ServerAliveInterval 60
서버 측 설정
  1. sshd_config를 편집
   sudo nano /etc/ssh/sshd_config
  1. 아래를 추가·수정
   ClientAliveInterval 60
   ClientAliveCountMax 3
  1. 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 설정을 더욱 깊이 이해하기 위해 아래 리소스를 활용하세요. 📚 공식 문서 🛠 관련 도구 🎥 추천 동영상
  • YouTube에서 “Ubuntu SSH 설정” 등을 검색하면 초보자를 위한 해설 동영상이 많이 있습니다.

作成した動画を友だち、家族、世界中の人たちと共有…

다음 단계

이 기사를 읽고 SSH 기본을 이해했다면, 아래와 같은 응용 기술을 습득하는 것을 추천합니다. ✅ Ansible을 사용한 SSH 자동 관리
  • 서버가 여러 대 있는 경우, SSH를 이용해 Ansible으로 원격 관리를 자동화할 수 있습니다.
SSH 터널링 및 포트 포워딩
  • SSH를 사용해 안전하게 원격 데스크톱 연결을 설정하거나 VPN처럼 사용할 수도 있습니다.
SSH 로그 감시 및 보안 강화
  • fail2banlogwatch 를 활용해 불법 접근을 실시간으로 감시하는 방법을 배웁니다.

요약

이 기사를 끝까지 읽어 주셔서 감사합니다! 🎉 Ubuntu에서 SSH를 적절히 설정하면 원격 관리 효율과 보안을 크게 향상시킬 수 있습니다. “SSH를 활용한 편리한 응용 기술”이나 “서버 보안의 추가 강화” 등 더 깊은 주제도 앞으로의 학습에 꼭 활용해 주세요! 그럼, 편안한 SSH 생활을! 🖥️🔐

관련 기사

侍エンジニア塾