Ubuntu를 처음 설치하면 SSH 서버가 자동으로 설치되어 있지 않습니다. 이 글에서는 그 이유와 함께, OpenSSH 서버 설치 및 구성, 설정 파일 백업 방법, 그리고 과거의 SSH 키 재사용 해킹 이슈를 방지하기 위한 안전한 키 관리 방법까지 단계별로 안내합니다.

 

1. Ubuntu에서 SSH 서버가 기본 설치되지 않는 이유
 - 보안 강화
  > SSH 서버는 원격 접속을 허용하는 서비스입니다. 설치 직후 자동으로 활성화되어 있으면, 네트워크에 연결된 모든 장치에서 접속 시도가 가능해져 불필요한 보안 위협(예: 무차별 대입 공격)에 노출될 수 있습니다. 이를 방지하기 위해 Ubuntu는 SSH 서버를 기본으로 설치하지 않습니다.
 - 필요한 사용자만 설치
  > 모든 사용자가 원격 접속 기능을 필요로 하는 것은 아니기 때문에, 필요할 때만 사용자가 직접 설치하도록 설계되어 있습니다.

 

2. OpenSSH 서버 설치 및 활성화
 - Step 1. 터미널 열기
  > 단축키: Ctrl + Alt + T
  > 또는 앱 메뉴에서 "Terminal" 검색 후 실행
 - Step 2. 패키지 목록 업데이트

$ sudo apt update

 

 - Step 3. OpenSSH 서버 설치

$ sudo apt install openssh-server

또는

$ sudo apt install ssh

 

 - Step 4. SSH 서비스 시작 및 자동 실행 설정

$ sudo systemctl start ssh
$ sudo systemctl enable ssh

 

  > 서비스 상태 확인:

$ sudo systemctl status ssh

 

  > Active: active (running)이 표시되면 정상 실행 중입니다.

 - Step 5. 방화벽(ufw) 설정 (선택 사항)

  > 방화벽을 사용 중이라면 SSH 포트(기본 22번)를 허용해야 합니다.

$ sudo ufw allow ssh
$ sudo ufw enable
$ sudo ufw status

 

  > 직접 포트를 변경했다면, 해당 포트 번호로 허용해야 합니다.

 

3. OpenSSH 설정 파일 백업 방법
 - 설정 변경 전에는 항상 백업을 권장합니다.
 - 설정 파일 백업

$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
$ sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

 

  > /etc/ssh/sshd_config.factory-defaults 파일은 읽기 전용으로 만들어 두면, 언제든지 원본 설정을 복원할 수 있습니다.

 - 복원 방법

$ sudo cp /etc/ssh/sshd_config.factory-defaults /etc/ssh/sshd_config
$ sudo systemctl restart ssh

 

4. OpenSSH 주요 보안 설정 및 구성 방법
 - 설정 파일을 편집하여 보안을 강화할 수 있습니다.
 - 설정 파일 열기

$ sudo vi /etc/ssh/sshd_config

 

 - 주요 설정 항목
  > 포트 변경 (예: 2222)

Port 2222

 

  > 루트 로그인 금지

PermitRootLogin no

 

  > 비밀번호 인증 비활성화 (키 인증만 허용)

PasswordAuthentication no

 

  > 인증 실패 횟수 제한

MaxAuthTries 3

 

  > 특정 사용자만 허용

AllowUsers username

 

  > 강력한 암호화 알고리즘 지정

Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512,hmac-sha2-256

 

 - 설정 적용

$ sudo systemctl restart ssh

 

5. SSH 키 관리 및 과거 해킹 이슈 방지 방법
 - 과거에 동일한 SSH 키 쌍이 여러 시스템에서 재사용되어 해킹되는 사례가 있었습니다. 이를 방지하려면 다음과 같은 방법을 적용해야 합니다.
 - 각 시스템마다 고유한 SSH 키 쌍 생성

$ ssh-keygen -t ed25519 -C "your_email@example.com"

(각 서버/사용자별로 별도의 키 쌍을 생성하고, 동일한 키를 여러 곳에 재사용하지 않습니다).

 

 - 키 주기적 교체(로테이션) 및 관리
  > 일정 주기로 SSH 키를 변경하고, 더 이상 사용하지 않는 키는 authorized_keys에서 삭제합니다.
  > 조직에서는 중앙 집중식 SSH 키 관리 솔루션을 사용하는 것이 좋습니다.
 - 키 백업 및 보안 저장
  > SSH 키(특히 private key)는 안전한 위치에 암호화하여 백업합니다.
  > 백업 파일 접근 권한을 제한하고, 필요시만 복원합니다.
 - 비밀번호 인증 비활성화
  > 키 인증만 허용하여 무차별 대입 공격 위험을 줄입니다.
 - 2단계 인증(2FA) 적용
  > Google Authenticator, Duo Security 등과 연동하여 추가 인증 절차를 적용합니다.

 

6. 자동화된 백업에 OpenSSH 활용
 - OpenSSH 키 인증을 활용하면 rsync, tar, dump 등과 연동해 안전하게 자동 백업을 할 수 있습니다. 예시:
 - 원격 서버에서 로컬로 백업:

$ ssh -t user@source.example.org 'sudo dump -0an -f - /var/www/ | gzip -c9' > backup.dump.gz

 

 - 로컬에서 원격으로 백업:

$ sudo dump -0an -f - /var/www/ | gzip -c9 | ssh user@target.example.org 'cat > backup.dump.gz'

(sudo 비밀번호 프롬프트가 보이지 않을 수 있으니 주의).

 

정리
Ubuntu는 보안을 위해 SSH 서버를 기본 설치하지 않습니다. OpenSSH 서버 설치 후에는 반드시 설정 파일을 백업하고, 포트 변경, 루트 로그인 금지, 키 인증 사용, 2FA 적용 등 다양한 보안 설정을 적용해야 합니다. 과거의 SSH 키 재사용 해킹 이슈를 방지하려면 각 시스템별로 고유한 키를 사용하고, 주기적으로 키를 교체하며, 키를 안전하게 백업·관리해야 합니다. OpenSSH의 키 인증 기능을 활용하면 안전하고 효율적으로 자동화된 백업도 구현할 수 있습니다

<순서>

[Debian 계열의 리눅스]

◎ 업그레이드 순서

◎ 커널업데이트 없이 업그레이드

◎ 특정버전 커널업그레이드(자동)

◎ 특정버전 커널업그레이드(수동)

◎ 구커널이미지 삭제



<내용>

[Debian 계열의 리눅스]

OS종류 : Debian, Ubuntu, Kali 등

패키지 설치, 업데이트, 삭제 명령어 : dpkg(package manager for Debian), apt-get(Advanced Packaging Tool package handling utility)


업그레이드 순서

1. 패키지 정보 업데이트

 # apt-get update

실제 패키지를 설치하지 않고 신규버전 패키지의 정보를 다운받아 이용 가능한 패키지의 정보를 /etc/apt/sources.list 파일에 업데이트 패키지 목록을 갱신하며 update 는 항상 upgrade 전에 실행되어야 합니다.


2.1. 패키지 업그레이드

 # apt-get upgrade -y

update 로부터 패키지 목록과 보유한 목록을 비교하여 장비내에 존재하는 실제 패키지 업그레이드를 수행합니다.

가장최신버전으로 설치하기 위해 사용되며 설치된 패키지가 제거되거나 설치되어 있지 않은 패키지가 설치되는 작업은 하지 않습니다.

-y : 프롬프트에 자동으로 yes라는 메시지가 표시됩니다. 모든 프롬프트에 대한 응답을 "예"라고 가정하고 비대화식으로 실행합니다.


2.2. 패키지 업그레이드 및 추가 패키지 설치

 # apt-get dist-upgrade

의존성 검사를 수행하면서 새로운 버전으로 업그레이드를 수행합니다.

컴퓨터에 설치된 꾸러미는 아니지만 사용에 필요한 추가 꾸러미를 설치하는 작업도 수행하기 때문에 이미 설치된 꾸러미를 최신 판으로 바꿔주는 upgrade 와는 차이가 있습니다.


◎ 커널업데이트 없이 업그레이드

1. 커널업데이트 금지 설정

 # apt-mark hold linux-image-generic linux-headers-generic

커널업데이트를 금지합니다.


2. 패키지 정보 업데이트

 # apt-get update


3. 패키지 업그레이드

 # apt-get upgrade -y


종합

 # apt-mark hold linux-image-generic linux-headers-generic && apt-get update && sleep 1 && apt-get upgrade -y

위의 1~3 단계를 한번에 실행합니다.


특정버전 커널업그레이드(자동)

1. 커널 정보 확인

 # uname -r

또는

 # cat /proc/version 

현재 부팅되어있는 커널 정보를 확인합니다.


2. 패키지 정보 업데이트

 # apt-get update


3. 리눅스 커널 이미지 버전 검색

 # apt-cache search linux-image

패키지 관리자의 리스트에서 리눅스 커널 이미지 버전을 검색합니다


4. 리눅스 커널 이미지 설치

 # apt-get install linux-image-버전

검색한 여러 버전중 가장 최신 버전을 위 명령어를 통해 입력하면 해당 커널 버전에 관련된 커널 패키지가 같이 설치됩니다.


5. 재부팅

 # reboot


◎ 특정버전 커널업그레이드(수동)

1. 커널 정보 확인

 # uname -r

또는

 # cat /proc/version 

현재 부팅되어있는 커널 정보를 확인합니다.


2. 패키지 다운로드

 # wget http://kernel.ubuntu.com/~kernel-ppa/mainline/해당내용

먼저 http://kernel.ubuntu.com/~kernel-ppa/mainline 에 접속해서 확인 후 필요 버전을 다운로드 합니다.


3. 패키지 설치

 # dpkg -i linux-headers-버전*.deb linux-image-버전*.deb

또는

 # dpkg -i *.deb 


4. grub2 업데이트

 # update-grub2

커널 이미지 정보가 반영되도록 grub2를 업데이트합니다.


5. 재부팅

 # reboot 


구커널이미지 삭제

리눅스는 커널 업데이트가 빈번합니다. 그리고 매번 업그레이드할 때마다, 이전의 커널 이미지는 삭제되지 않고 남아 있습니다. 때문에 커널 이미지를 삭제해주는 작업이 필요합니다.


1. 커널 정보 확인

 # uname -r

또는

 # cat /proc/version 

현재 부팅되어있는 커널 정보를 확인합니다.


2. 커널 리스트 확인

 # dpkg --list | grep linux-image

현재 설치되어있는 커널 리스트를 확인합니다.


3.1. 커널 이미지 삭제

 # apt-get remove linux-image-버전-generic

불필요한 커널 이미지를 삭제합니다.


3.2. 커널 이미지 삭제(설정파일 포함)

 # apt-get --purge remove linux-image-버전-generic

불필요한 커널 이미지와 함께 설정파일까지 모두 삭제합니다.


종합

 # purge-old-kernels --keep 1

purge-old-kernels 를 이용해서 위의 1~3 단계를 한번에 실행합니다. keep 는 구버전의 커널을 몇개까지 남겨 놓을지 설정하는 옵션입니다. 기본 값은 2입니다.


4. grub2 업데이트

 # update-grub2

삭제된 커널 이미지 정보가 반영되도록 grub2를 업데이트합니다.


5. 재부팅

 # reboot 


+ Recent posts