Ubuntu 22.04 LTS에서 SSH 활성화 방법 3가지 및 주요 문제 해결

SSH 서비스 설정의 핵심: 안정적인 원격 서버 관리를 위한 실전 가이드

서버 운영자라면 누구나 원격으로 시스템에 안전하게 접근할 수 있어야 한다. 특히 Ubuntu 22.04 LTS와 같은 장기 지원 배포판은 신뢰성과 보안이 중요한 환경에서 널리 사용되므로, SSH(Service Secure Shell) 구성은 필수 기술이다. 이 문서에서는 단순히 패키지를 설치하는 것을 넘어서, 다양한 설치 방식의 장단점, 시스템 통합 여부, 그리고 접속 실패 시 진단 방법까지 심층적으로 다룬다.

1. SSH 서버 활성화를 위한 세 가지 접근 방식

Ubuntu에서 SSH 서버를 구동하는 방법은 여러 가지이며, 각각 시스템 통합도, 유지보수 전략, 보안 모델에 차이가 있다. 목적에 맞는 방식을 선택하는 것이 중요하다.

1.1 기본 추천: APT를 통한 설치 (권장)

가장 일반적이고 안정적인 방법은 apt 명령어를 사용해 공식 저장소에서 openssh-server를 설치하는 것이다. 이 방식은 시스템과 긴밀하게 통합되며, 정기 업데이트와 보안 패치를 자동으로 수신한다.

sudo apt update
sudo apt install openssh-server

설치 후 시스템은 다음 작업을 자동으로 수행한다:

  • 필요한 종속성 패키지를 함께 설치한다.
  • sshd 데몬을 위한 systemd 서비스를 생성하고 시작한다.
  • 서버용 호스트 키 쌍을 /etc/ssh/ 디렉터리에 자동 생성한다.

서비스 상태 확인은 다음과 같다:

sudo systemctl status ssh

출력에서 active (running) 상태를 확인하면 성공적으로 실행 중임을 의미한다.

왜 APT를 권장하는가?
  • 자동 보안 업데이트: 시스템 전체 업데이트 과정에서 SSH 관련 취약점 패치도 포함된다.
  • 종속성 자동 해결: 필요한 라이브러리가 누락되지 않도록 관리된다.
  • 표준 경로 준수: 설정 파일 위치(/etc/ssh/sshd_config)와 방화벽(UFW 등)과의 호환성이 보장된다.

참고로 일부 최소 설치형 서버 이미지는 SSH 서버가 미리 설치되어 있을 수 있으므로, 다음 명령어로 확인 가능하다:

dpkg -l | grep openssh-server

1.2 격리된 실행: Snap 패키지 설치

Snap은 캐노니컬이 주도하는 컨테이너화된 패키징 시스템으로, 모든 의존성을 하나의 번들로 묶어 시스템 외부에서 실행한다. 이를 통해 높은 격리성을 제공하지만, 설정 방식이 다르다.

sudo snap install openssh-server

Snap 기반 OpenSSH의 주요 특징:

  • 구성 파일 위치 변경: 설정은 /var/snap/openssh-server/current/ 또는 snap set 명령어를 통해 관리된다.
  • 서비스 제어: snap services openssh-server로 상태를 확인하거나 재시작할 수 있다.
  • 자동 업데이트: 기본적으로 백그라운드에서 자동 갱신되며, 예기치 않은 동작 변화 가능성 있음.

이 방식은 실험 환경이나 특정 애플리케이션 격리 목적으로 유용하나, 프로덕션 서버의 주요 원격 접속 수단으로는 권장하지 않는다. 관리 복잡도와 전통적인 스크립트와의 호환성 문제가 존재하기 때문이다.

1.3 고급 사용: 소스 코드 컴파일 설치

특정 알고리즘 비활성화, 최신 기능 테스트, 또는 커스텀 패치 적용이 필요한 경우 소스에서 직접 빌드할 수 있다. 이 방법은 최대한의 제어력을 제공하지만, 유지보수 부담이 크다.

기본적인 컴파일 절차는 다음과 같다:

  1. 빌드 도구 설치:
sudo apt update
sudo apt install build-essential zlib1g-dev libssl-dev
  1. 소스 다운로드 및 압축 해제:
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1
  1. 설정 및 컴파일:
./configure --prefix=/opt/openssh --sysconfdir=/opt/openssh/etc --with-ssl-dir=/usr/lib/ssl
make
sudo make install
  1. 서비스 등록: 수동으로 systemd unit 파일을 작성하거나 init 스크립트를 배치해야 함.

이 방식은 특정 보안 요구사항이 있는 환경이나 연구 목적에 적합하지만, 보안 업데이트를 수동으로 관리해야 하므로 실무에서는 제한적으로 사용된다.

2. 주요 설정 항목 조정

기본 설정은 대부분의 경우 작동하지만, 보안 강화를 위해 다음 항목을 검토할 필요가 있다 (/etc/ssh/sshd_config):

  • PasswordAuthentication no: 비밀번호 대신 SSH 키페어 기반 인증을 강제하여 보안 향상.
  • PermitRootLogin prohibit-password: 루트 로그인은 허용하되, 비밀번호 방식은 차단.
  • Port 2222: 기본 포트 변경으로 간단한 보안 강화 (보안을 위한 보안 아님).
  • AllowUsers user1 user2: 특정 사용자만 접속 허용.

변경 후 반드시 SSH 데몬 재시작:

sudo systemctl restart ssh

3. 흔히 발생하는 문제와 해결 방법

3.1 연결 거부 (Connection refused)

  • SSH 서비스가 실행 중인지 확인: systemctl status ssh
  • 방화벽(UFW)이 22번 포트(또는 사용자 지정 포트)를 차단하지 않는지 확인:
sudo ufw allow 22/tcp
sudo ufw enable

3.2 인증 실패 (Permission denied, publickey)

  • 클라이언트 측 개인키 권한이 600인지 확인: chmod 600 ~/.ssh/id_rsa
  • 서버의 ~/.ssh/authorized_keys 파일 소유주와 권한이 올바른지 확인 (소유주: 사용자, 권한: 600).
  • sshd_config에서 PubkeyAuthentication yes로 설정되었는지 확인.

3.3 SSH 데몬 시작 실패

  • 구성 파일 문법 오류 여부 확인:
sudo sshd -t

오류 메시지가 출력되면 해당 줄을 수정해야 한다.

태그: ubuntu SSH OpenSSH systemd ufw

7월 15일 05:44에 게시됨