Linux 보안 연결

LinuxBeginner
지금 연습하기

소개

Secure Shell (SSH) 는 보안되지 않은 네트워크를 통해 원격 서버에 안전하게 접근하기 위해 사용되는 암호화 네트워크 프로토콜입니다. IT 분야의 전문가로서, Linux 서버에 안전하게 연결하는 방법을 이해하는 것은 필수적인 기술입니다.

이 랩에서는 SSH 키 쌍을 생성하고, 키를 관리하며, 안전한 인증을 위해 SSH 를 설정하는 방법을 배우게 됩니다. 이 지식은 원격 시스템에 안전하게 접근하고 관리해야 하는 시스템 관리자, 개발자 및 사이버 보안 전문가에게 기본적입니다.

이 랩을 완료함으로써, Linux 서버의 안전한 원격 관리 및 안전한 파일 전송을 위한 업계 표준 방법인 SSH 에 대한 실질적인 경험을 얻게 될 것입니다.

SSH 기본 사항 이해

SSH (Secure Shell) 는 원격 컴퓨터에 안전하게 접근할 수 있는 프로토콜입니다. Telnet 과 같은 이전 프로토콜과 달리, SSH 는 클라이언트와 서버 간의 모든 통신을 암호화하여 데이터가 도청되는 것을 방지합니다.

SSH 는 다음과 같은 여러 가지 장점을 제공합니다.

  • 암호화된 통신
  • 강력한 인증 방법
  • 데이터 무결성 검증
  • 안전한 파일 전송

먼저 시스템에 SSH 가 설치되어 있는지 확인해 보겠습니다. 터미널을 열고 다음 명령을 실행합니다.

ssh -V

설치된 SSH 버전을 보여주는 다음과 유사한 출력을 볼 수 있습니다.

OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

이제 작업할 프로젝트 디렉토리로 이동해 보겠습니다.

cd ~/project

이 명령은 현재 디렉토리를 /home/labex/project로 변경하며, 이 랩에서 모든 작업을 수행할 위치입니다.

SSH 키 쌍 생성

SSH 는 여러 인증 방법을 지원하지만, 키 기반 인증이 가장 안전하고 편리합니다. 이 단계에서는 SSH 키 쌍을 생성합니다.

SSH 키 쌍은 다음과 같이 구성됩니다.

  • 개인 키 (private key): 이는 비밀번호와 같으며 절대 공유해서는 안 됩니다.
  • 공개 키 (public key): 연결하려는 원격 서버와 안전하게 공유할 수 있습니다.

새 SSH 키 쌍을 생성하려면 ssh-keygen 명령을 사용합니다.

ssh-keygen -t rsa -b 4096

이 명령은 다음을 지정합니다.

  • -t rsa: 키 생성에 RSA 알고리즘 사용
  • -b 4096: 강력한 보안을 제공하는 4096 비트 키 생성

이 명령을 실행하면 다음을 묻는 메시지가 표시됩니다.

  1. 키를 저장할 파일 경로 입력 (Enter 키를 눌러 기본 경로 ~/.ssh/id_rsa를 수락)
  2. 암호 입력 (이 랩에서는 Enter 키를 두 번 눌러 비워둘 수 있습니다)

다음은 표시될 내용의 예입니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 labex@hostname
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|       . .       |
|      . + .      |
|     . = + .     |
|    . = S = .    |
|   . . = = + .   |
|    . . + = + .  |
|     . . + + .   |
|      .. . .     |
+----[SHA256]-----+

이제 생성된 키를 살펴보겠습니다. 공개 키를 보려면 다음을 사용합니다.

cat ~/.ssh/id_rsa.pub

그러면 다음과 같은 공개 키가 표시됩니다.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

공개 키는 공유할 수 있지만, 개인 키 (~/.ssh/id_rsa) 는 안전하게 보관해야 하며 누구와도 공유해서는 안 됩니다.

SSH 키 권한 이해

SSH 는 보안상의 이유로 파일 권한에 매우 민감합니다. 이 단계에서는 SSH 키에 대한 올바른 권한과 이를 설정하는 방법을 배웁니다.

SSH 키의 현재 권한을 확인해 보겠습니다.

ls -la ~/.ssh/

다음과 유사한 출력을 볼 수 있습니다.

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

올바른 권한은 다음과 같습니다.

  • 개인 키 (id_rsa): 600 (본인만 읽고 쓸 수 있음)
  • 공개 키 (id_rsa.pub): 644 (모두 읽을 수 있고 본인만 쓸 수 있음)
  • .ssh 디렉토리: 700 (본인만 접근 가능)

권한이 다른 경우, 다음 명령을 사용하여 올바르게 설정할 수 있습니다.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

권한이 올바르게 설정되었는지 확인해 보겠습니다.

ls -la ~/.ssh/

이제 출력에 올바른 권한이 표시되어야 합니다.

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

이러한 권한은 보안에 매우 중요합니다. SSH 는 권한이 너무 열려 있으면 개인 키가 노출될 위험이 있으므로 작동을 거부합니다.

SSH 인증 설정

이 단계에서는 SSH 키 기반 인증을 설정하는 방법을 배웁니다. 이를 통해 매번 비밀번호를 입력하지 않고도 원격 서버에 로그인할 수 있습니다.

SSH 키 인증이 작동하려면 공개 키를 서버의 ~/.ssh/authorized_keys 파일에 복사해야 합니다. 실제 시나리오에서는 ssh-copy-id 명령을 사용하여 이 작업을 수행합니다.

## Example for reference (Do not run this)
## ssh-copy-id username@remote_host

이 랩에서는 실제 원격 서버가 없으므로 로컬 authorized_keys 파일을 생성하여 이 프로세스를 시뮬레이션합니다.

먼저, .ssh 디렉토리가 아직 존재하지 않는 경우 생성합니다.

mkdir -p ~/.ssh

mkdir -p 명령은 디렉토리가 없으면 생성하고 이미 존재하면 아무 작업도 수행하지 않습니다.

이제 authorized_keys 파일을 생성하거나 추가합니다.

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

이 명령은 공개 키를 authorized_keys 파일에 추가합니다. 실제 환경에서는 이 파일이 원격 서버에 있습니다.

authorized_keys 파일의 내용을 확인해 보겠습니다.

cat ~/.ssh/authorized_keys

출력에 공개 키가 표시되어야 하며, 다음과 유사하게 보일 것입니다.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

마지막으로, authorized_keys 파일에 올바른 권한이 있는지 확인합니다.

chmod 600 ~/.ssh/authorized_keys

이렇게 하면 소유자만 읽고 쓸 수 있는 권한이 설정됩니다. 이는 authorized_keys 파일에 대한 보안 요구 사항입니다.

SSH 설정 파일 이해

SSH 는 SSH 설정 파일 (config file) 을 통해 동작을 사용자 정의할 수 있도록 합니다. 이는 여러 서버에 정기적으로 연결할 때 특히 유용합니다.

SSH 설정 파일이 어떻게 작동하는지 확인하기 위해 설정 파일을 만들어 보겠습니다.

nano ~/.ssh/config

이렇게 하면 nano 텍스트 편집기가 열립니다. 다음 내용을 파일에 추가합니다.

## Default settings for all hosts
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

## Example server configuration
Host example
    HostName example.com
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa

이 구성에서:

  • ServerAliveInterval 60은 60 초마다 keep-alive 신호를 보냅니다.
  • ServerAliveCountMax 3은 서버가 3 번 연속 신호에 응답하지 않으면 연결을 끊습니다.
  • Host example 섹션은 ssh username@example.com -p 22 대신 ssh example로 연결할 수 있도록 별칭을 만듭니다.

nano 에서 파일을 저장하려면 Ctrl+O를 누른 다음 Enter를 눌러 확인하고 Ctrl+X를 눌러 종료합니다.

이제 설정 파일에 대한 올바른 권한을 설정해 보겠습니다.

chmod 600 ~/.ssh/config

이렇게 하면 이 파일을 본인만 읽고 쓸 수 있도록 보장하며, 이는 보안에 중요합니다.

실제 시나리오에서는 이제 다음을 입력하여 서버에 간단하게 연결할 수 있습니다.

## Example for reference (Do not run this)
## ssh example

대신:

## Example for reference (Do not run this)
## ssh username@example.com -p 22

SSH 설정 파일은 시간을 절약하고 여러 SSH 연결을 훨씬 쉽게 관리할 수 있는 강력한 도구입니다.

요약

이 랩에서는 Linux 서버에 안전하게 연결하기 위한 SSH (Secure Shell) 의 기본 사항을 배웠습니다. 다음은 수행한 작업에 대한 요약입니다.

  1. SSH 와 안전한 원격 연결에 대한 중요성을 이해했습니다.
  2. 개인 키와 공개 키로 구성된 SSH 키 쌍을 생성했습니다.
  3. SSH 보안을 위한 적절한 파일 권한의 중요성에 대해 배웠습니다.
  4. authorized_keys 파일을 구성하여 SSH 키 기반 인증을 설정했습니다.
  5. SSH 연결을 사용자 정의하고 단순화하기 위해 SSH 설정 파일 (config file) 을 만들었습니다.

이러한 기술은 클라우드 컴퓨팅, 시스템 관리, DevOps 및 사이버 보안 역할에서 특히 Linux 시스템으로 작업하는 모든 사람에게 필수적입니다. SSH 는 원격 Linux 서버에 안전하게 액세스하기 위한 표준 방법이며 전 세계 IT 전문가가 매일 사용합니다.

이 랩에서 얻은 지식을 통해 이제 Linux 서버에 안전하게 연결할 수 있게 되었으며, 이는 Linux 시스템 관리 및 클라우드 컴퓨팅에서 더 나아가 학습하기 위한 기본적인 기술입니다.