Unisquads
로그인
홈
이용약관·개인정보처리방침·콘텐츠정책·© 2026 Unisquads
이용약관·개인정보처리방침·콘텐츠정책
© 2026 Unisquads. All rights reserved.

SSH 키 생성 및 관리 (r1)

이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.12 06:22

SSH 키 생성 및 관리

용도

SSH 접속 인증

키 유형

RSA, ECDSA, Ed25519 등

생성 명령어

ssh-keygen

공개키 확장자

.pub

비밀키 위치

~/.ssh/ 디렉토리

관리 도구

ssh-agent, ssh-add

상세 정보

키 생성 옵션

-t (유형 지정), -b (비트 길이), -C (주석)

권한 설정

비밀키는 600, .ssh 디렉토리는 700

패스프레이즈

키에 추가 보안을 위한 암호

공개키 등록

authorized_keys 파일에 추가

에이전트 사용

eval "$(ssh-agent -s)"로 시작, ssh-add로 키 추가

키 복사

ssh-copy-id 명령어 사용

다중 키 관리

~/.ssh/config 파일을 통한 호스트별 키 설정

키 지문 확인

ssh-keygen -lf 명령어

키 변환

ssh-keygen -p로 패스프레이즈 변경, -e/-i로 형식 변환

보안 권고사항

강력한 패스프레이즈 사용, 비밀키 공유 금지, 정기적 키 교체

1. 개요

SSH 키는 SSH 프로토콜을 사용하여 원격 시스템에 안전하게 인증하고 접속하기 위한 핵심 요소이다. 이는 전통적인 비밀번호 인증 방식을 대체하거나 보완하는 더욱 안전한 방법으로 널리 사용된다.

SSH 키 인증은 공개키 암호화 기술에 기반을 둔다. 사용자는 한 쌍의 암호학적으로 연결된 개인키와 공개키를 생성한다. 개인키는 사용자의 로컬 머신에 비밀로 안전하게 보관되고, 공개키는 접속하려는 원격 서버에 등록된다. 접속 시도가 발생하면 서버는 공개키를 사용하여 챌린지를 생성하고, 사용자의 클라이언트는 개인키로 이를 해독하여 응답함으로써 신원을 증명한다[1].

이 방식은 중간자 공격에 대한 저항력이 강하고, 자동화된 스크립트 실행에 편리하며, 강력한 패스프레이즈와 결합하면 이중 인증의 효과를 낼 수 있다. 따라서 시스템 관리, 원격 개발, 서버 관리 및 다양한 자동화 작업에서 표준적인 보안 관행으로 자리 잡았다.

2. SSH 키의 기본 개념

SSH 키는 비대칭 암호화 방식을 기반으로 하는 인증 수단이다. 이 방식은 한 쌍의 수학적으로 연결된 키, 즉 공개키와 개인키를 생성하여 사용한다. 개인키는 사용자가 비밀로 보관해야 하는 열쇠 역할을 하며, 공개키는 접속하려는 원격 서버에 등록하는 열쇠 역할을 한다. 인증 과정에서 서버는 클라이언트가 소유한 개인키에 대응하는 공개키를 가지고 있는지 확인하여 접속을 허용한다[2]. 이는 암호를 직접 전송하는 방식보다 훨씬 안전한 인증 메커니즘을 제공한다.

주요 암호화 방식으로는 역사적으로 널리 사용된 RSA와 더 현대적이고 효율적인 Ed25519가 있다. RSA 키는 키 길이(예: 2048비트, 4096비트)를 선택할 수 있으며, 길이가 길수록 보안 강도는 높아지지만 연산 부하도 증가한다. 반면, Ed25519는 타원곡선 암호를 기반으로 하여 동일한 수준의 보안을 제공하면서도 키 길이가 짧고 연산 속도가 빠르다는 장점이 있다. 현재는 보안과 성능을 고려할 때 Ed25519를 권장하는 경우가 많다.

이 키 쌍의 관계는 일방향성으로, 공개키로는 개인키를 유추할 수 없다. 따라서 공개키는 누구에게나 공개해도 안전하지만, 개인키 파일의 유출은 제3자가 해당 키로 인증할 수 있는 권한을 획득하는 것을 의미한다. 이 기본 개념은 SSH 키를 이용한 모든 보안 프로토콜의 핵심을 이룬다.

2.1. 공개키와 개인키

SSH 키는 한 쌍의 암호화된 키 파일로 구성된다. 이 쌍은 공개키와 개인키로 나뉜다. 공개키는 공유해도 안전한 키이며, 주로 원격 서버에 등록하는 데 사용된다. 반면 개인키는 절대 외부에 공개되지 않아야 하는 비밀 키로, 사용자의 로컬 머신에 안전하게 보관된다. 이 두 키는 수학적으로 연결되어 있어, 공개키로 암호화된 데이터는 오직 대응되는 개인키로만 복호화할 수 있다.

SSH 접속 과정에서 이 키 쌍의 역할은 다음과 같다. 클라이언트가 서버에 접속을 시도하면, 서버는 클라이언트가 등록해둔 공개키를 사용하여 임의의 챌린지 메시지를 암호화하여 전송한다. 클라이언트는 자신의 로컬에 저장된 개인키를 사용하여 이 메시지를 복호화하고, 그 결과를 서버로 되돌려 보낸다. 서버는 응답을 확인하여 클라이언트의 신원을 인증한다. 이 방식은 암호를 네트워크를 통해 전송하지 않기 때문에 중간자 공격에 더 강력하다.

공개키와 개인키의 파일 형식과 저장 위치는 일반적으로 다음과 같다.

키 유형

일반적인 파일명 (기본값)

저장 위치 (일반적)

개인키

id_rsa, id_ed25519

사용자의 로컬 ~/.ssh/ 디렉토리

공개키

개인키 파일명에 .pub 확장자 추가 (예: id_rsa.pub)

원격 서버의 ~/.ssh/authorized_keys 파일

개인키 파일의 소유권과 파일 권한은 보안상 매우 중요하다. 일반적으로 해당 파일의 권한은 소유자만 읽고 쓸 수 있도록 600 (rw-------)으로 설정되어야 한다. 부적절한 권한 설정은 SSH 클라이언트가 보안 위험을 이유로 키 사용을 거부하는 원인이 된다.

2.2. 암호화 방식 (RSA, Ed25519 등)

SSH 키 생성 시 사용할 수 있는 주요 암호화 알고리즘에는 RSA, ECDSA, Ed25519 등이 있습니다. 각 알고리즘은 서로 다른 수학적 원리와 보안 강도, 성능 특성을 가집니다.

알고리즘

설명

일반적인 키 길이

참고 사항

RSA

가장 널리 사용되는 공개키 알고리즘으로, 큰 소수의 인수분해 난이도에 기반합니다.

2048비트, 3072비트, 4096비트

호환성이 가장 뛰어나지만, 동일한 보안 수준에서 키 크기가 가장 큽니다.

ECDSA

타원곡선 암호를 기반으로 한 디지털 서명 알고리즘입니다.

NIST P-256 (256비트), P-384 (384비트)

RSA보다 짧은 키 길이로 동등한 보안을 제공하지만, 올바른 난수 생성이 매우 중요합니다.

Ed25519

Edwards-curve Digital Signature Algorithm의 일종으로, 곡선25519를 사용합니다.

256비트

높은 성능과 강력한 보안으로 현대적 시스템에서 권장됩니다. 키 길이가 짧고 서명 속도가 빠릅니다.

RSA는 역사가 길고 모든 시스템에서 광범위하게 지원되지만, 최신 알고리즘에 비해 상대적으로 키 크기가 커서 연결 설정 시 부하가 더 클 수 있습니다. Ed25519는 2014년 OpenSSH 6.5에 도입되었으며, 부채널 공격에 대한 내성과 일정한 시간 내 연산 실행 등 보안적 이점으로 인해 새로운 키 생성 시 점점 더 선호되는 방식이 되고 있습니다[3]. ECDSA는 타원곡선의 이점을 활용하지만, 구현에 따라 난수 생성기의 결함이 보안 취약점으로 이어질 수 있는 위험이 있습니다.

알고리즘 선택은 호환성 요구사항과 보안 목표에 따라 달라집니다. 레거시 시스템과의 호환성이 중요하다면 RSA를, 최신 시스템에서 최적의 보안과 성능을 원한다면 Ed25519를 선택하는 것이 일반적입니다.

3. SSH 키 생성 방법

ssh-keygen 명령어를 사용하여 SSH 키 쌍을 생성한다. 이 명령어는 리눅스, macOS, Windows Subsystem for Linux를 포함한 대부분의 유닉스 계열 시스템에서 기본으로 제공된다. 명령어를 실행하면 키를 저장할 파일 경로와 패스프레이즈를 입력하라는 프롬프트가 나타난다. 기본값을 사용하려면 엔터 키를 누르면 된다.

키를 생성할 때는 암호화 방식과 키 길이를 선택해야 한다. -t 옵션으로 키 유형을 지정하며, -b 옵션으로 비트 길이를 설정한다. 예를 들어, 4096비트 RSA 키를 생성하려면 ssh-keygen -t rsa -b 4096 명령을 사용한다. 최근에는 더 빠르고 안전한 Ed25519 알고리즘을 권장하며, 이는 ssh-keygen -t ed25519 명령으로 생성할 수 있다.

옵션

설명

일반적인 사용 예

-t

키의 암호화 알고리즘 타입 지정

-t rsa, -t ed25519, -t ecdsa

-b

키의 비트 길이 지정 (RSA, DSA 등에 적용)

-b 4096

-C

키에 주석을 추가 (일반적으로 사용자 이메일)

-C "user@example.com"

-f

생성될 키 파일의 경로와 이름 지정

-f ~/.ssh/my_custom_key

패스프레이즈는 개인키 파일에 추가적인 보안 계층을 제공한다. 키 생성 과정에서 설정할 수 있으며, 나중에 ssh-keygen -p 명령으로 변경하거나 제거할 수도 있다. 패스프레이즈를 설정하면 키를 사용할 때마다 이를 입력해야 하므로, 자동화된 프로세스에는 불편할 수 있다. 이러한 경우 SSH 에이전트를 사용하여 패스프레이즈를 일시적으로 메모리에 캐시하는 방법을 활용한다.

3.1. ssh-keygen 명령어 사용

ssh-keygen 명령어는 SSH 키 쌍을 생성하는 데 사용되는 표준 도구이다. 이 명령어는 대부분의 유닉스 계열 운영체제(리눅스, macOS)와 윈도우의 WSL 또는 Git for Windows 환경에 기본적으로 포함되어 있다.

명령어의 기본적인 사용법은 터미널에서 ssh-keygen을 입력하는 것이다. 이렇게 하면 대화형 모드로 진입하여 키를 저장할 파일 경로와 패스프레이즈를 차례로 입력받는다. 기본값을 사용하려면 각 단계에서 엔터 키를 누르면 된다. 기본적으로 RSA 알고리즘과 3072비트 길이의 키가 생성되며, 공개키와 개인키 쌍이 사용자의 ~/.ssh 디렉토리(id_rsa와 id_rsa.pub)에 저장된다.

보다 세부적인 옵션을 지정하여 키를 생성할 수도 있다. 주요 옵션은 다음과 같다.

옵션

설명

-t

사용할 암호화 알고리즘을 지정한다. 예: -t rsa, -t ed25519

-b

키의 비트 길이를 지정한다. RSA의 경우 기본값은 3072비트이다.

-f

생성될 키 파일의 경로와 이름을 지정한다.

-N

새 패스프레이즈를 명령줄에서 직접 제공한다. 예: -N "" (빈 패스프레이즈)

-C

키에 코멘트를 추가한다. 일반적으로 이메일 주소를 사용하여 키를 식별한다.

예를 들어, 4096비트 길이의 RSA 키를 my_key라는 이름으로 생성하면서 코멘트를 추가하려면 다음 명령을 사용한다.

```bash

ssh-keygen -t rsa -b 4096 -f ~/.ssh/my_key -C "user@example.com"

```

명령 실행 후에는 개인키(my_key)와 공개키(my_key.pub) 파일이 지정된 위치에 생성된다.

3.2. 키 유형 및 길이 선택

ssh-keygen 명령어를 실행할 때 -t 옵션으로 키의 암호화 방식을 지정할 수 있다. 주요 키 유형으로는 RSA, ECDSA, Ed25519 등이 있으며, 각각 보안 강도와 성능 특성이 다르다. -b 옵션을 사용하면 키의 길이(비트 수)를 설정할 수 있으며, 키 유형에 따라 권장되는 길이가 다르다.

다음은 주요 키 유형과 권장 길이, 그리고 간단한 특징을 비교한 표이다.

키 유형

권장 길이 (비트)

주요 특징

RSA

3072 또는 4096

가장 널리 호환되며 역사가 깊은 방식이다. 2048비트는 이제 최소 기준으로 간주된다.

ECDSA

256 (NIST P-256)

동일한 보안 강도를 위해 RSA보다 짧은 키 길이를 사용하며 효율적이다. 올바른 난수 생성이 매우 중요하다.

Ed25519

256 (고정 길이)

타원곡선 암호 기반으로 높은 성능과 강력한 보안을 제공한다. 키 길이가 고정되어 있다.

키 유형 선택은 보안, 성능, 그리고 호환성의 균형을 고려해야 한다. Ed25519는 현대적이고 안전하며 빠른 알고리즘으로, 지원하는 시스템에서는 권장되는 선택이다. 레거시 시스템과의 호환성이 가장 중요한 경우에는 RSA 3072비트 이상을 사용하는 것이 일반적이다. 키 길이는 보안 강도와 직접적으로 연관되며, 길이가 길수록 보안은 강화되지만 연결 설정 시 연산 부하가 약간 증가할 수 있다.

3.3. 패스프레이즈 설정

패스프레이즈는 SSH 키의 개인키 파일을 암호화하는 데 사용되는 추가 비밀번호이다. 패스프레이즈를 설정하면 개인키 파일이 유출되더라도 해당 암호를 모르는 제3자는 키를 사용할 수 없다. 이는 물리적 보안이 취약한 개인 컴퓨터 환경에서 특히 중요한 보안 계층을 추가한다.

패스프레이즈는 ssh-keygen 명령어를 실행하여 키를 생성하는 과정 중에 설정할 수 있다. 명령어를 실행하면 터미널에 "Enter passphrase (empty for no passphrase):"라는 프롬프트가 나타나며, 여기에 원하는 암호를 입력하면 된다. 보안을 위해 암호는 화면에 표시되지 않는다. 이후 동일한 암호를 확인하는 프롬프트가 한 번 더 나타난다. 공백으로 두고 Enter 키를 누르면 패스프레이즈 없이 키를 생성할 수 있지만, 이는 보안상 권장되지 않는다.

효과적인 패스프레이즈는 길고 예측하기 어려워야 한다. 무작위 단어 조합이나 긴 문장을 사용하는 것이 일반적인 단어나 짧은 암호보다 더 안전하다. 패스프레이즈는 키 파일 자체를 암호화하므로, 이후 SSH 에이전트 같은 도구를 사용하여 매번 입력하지 않고도 편리하게 관리할 수 있다. 에이전트에 키를 등록해 두면 세션 동안 한 번만 패스프레이즈를 입력하면 되며, 이를 통해 보안성과 사용 편의성을 동시에 확보할 수 있다.

4. 공개키 배포 및 등록

생성된 SSH 키 쌍(개인키와 공개키) 중 공개키를 원격 서버에 등록해야 해당 키를 사용한 인증이 가능해진다. 서버 측에서는 사용자를 인증할 때 클라이언트가 제시하는 공개키와 미리 등록된 공개키 목록을 비교한다. 따라서 클라이언트에서 키를 생성한 후, 반드시 접속하려는 서버의 사용자 계정에 공개키를 배포해야 한다.

공개키를 등록하는 가장 일반적인 방법은 서버의 사용자 홈 디렉토리 아래 .ssh/authorized_keys 파일에 공개키 내용을 추가하는 것이다. 이 파일은 한 줄에 하나의 공개키를 기록하며, 여러 키를 등록할 수 있다. 파일과 디렉토리의 올바른 권한 설정이 매우 중요하다. 일반적으로 .ssh 디렉토리는 700(drwx------), authorized_keys 파일은 600(-rw-------) 권한을 가져야 한다. 그렇지 않으면 서버가 보안상의 이유로 해당 키를 거부할 수 있다[4].

ssh-copy-id 명령어는 이 과정을 자동화해주는 편리한 도구이다. 이 명령어는 로컬의 공개키를 지정한 원격 서버와 사용자 계정의 authorized_keys 파일에 자동으로 추가한다. 기본 사용법은 ssh-copy-id user@hostname이다. 이 명령어는 서버에 대한 패스워드 인증이 먼저 활성화되어 있어야 정상적으로 동작한다. 수동으로 배포하려면 cat ~/.ssh/id_ed25519.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'와 같은 명령어를 사용하거나, 공개키 파일의 내용을 직접 복사하여 서버의 authorized_keys 파일에 붙여넣을 수 있다.

방법

명령어 예시

설명

ssh-copy-id 사용

ssh-copy-id -i ~/.ssh/mykey user@server.com

지정한 키 파일을 원격 서버에 자동 등록.

수동 복사 (파이프 이용)

`cat ~/.ssh/id_rsa.pub \

ssh user@server.com 'mkdir -p .ssh && cat >> .ssh/authorized_keys'`

파일 내용 직접 편집

(클립보드에 복사 후 서버에서 vim ~/.ssh/authorized_keys 등으로 편집)

GUI 환경이나 콘솔 텍스트 편집기를 이용한 직접 등록.

공개키가 성공적으로 등록되면, 이후 해당 서버에 접속할 때는 패스워드 대신 개인키와 설정한 패스프레이즈(있는 경우)를 사용하여 인증하게 된다. 여러 대의 서버에 동일한 공개키를 등록하여 중앙 집중식 키 관리가 가능하지만, 보안 강화를 위해 서버별로 다른 키 쌍을 사용하는 것을 권장하는 경우도 있다.

4.1. 원격 서버의 authorized_keys 파일

원격 서버에 SSH 키 기반 인증을 설정하려면, 사용자의 공개키를 서버의 특정 파일에 등록해야 한다. 이 파일은 일반적으로 ~/.ssh/authorized_keys라는 이름과 경로를 가진다. 서버의 SSH 데몬은 클라이언트가 접속을 시도할 때, 이 파일에 등록된 공개키와 클라이언트가 제시하는 개인키 서명을 비교하여 인증을 수행한다.

authorized_keys 파일은 일반 텍스트 파일이며, 한 줄에 하나의 공개키를 기록한다. 각 줄은 키 유형(RSA, Ed25519 등), 공개키 자체, 그리고 선택적으로 주석으로 구성된다. 새로운 키를 추가하려면 기존 내용을 유지한 채, 새 공개키 문자열을 파일의 새로운 줄에 붙여넣기만 하면 된다. 파일이 존재하지 않을 경우 직접 생성할 수 있다.

이 파일의 권한 설정은 보안상 매우 중요하다. 과도하게 넓은 권한은 SSH 데몬이 인증을 거부하는 원인이 된다. 일반적으로 authorized_keys 파일의 권한은 소유자만 읽고 쓸 수 있는 600 (또는 최소 644)으로 설정되어야 하며, 상위 디렉토리인 ~/.ssh의 권한은 700으로 설정되어야 한다[5].

권한 문제

권한 설정 예시

설명

정상적인 설정

.ssh 디렉토리: 700 (drwx------)

authorized_keys 파일: 600 (-rw-------)

가장 안전한 권한 설정이다.

잘못된 설정 예시

.ssh 디렉토리: 755 (drwxr-xr-x)

authorized_keys 파일: 644 (-rw-r--r--)

다른 사용자가 공개키 파일을 읽을 수 있어 보안에 취약하다.

잘못된 설정 예시

.ssh 디렉토리: 777 (drwxrwxrwx)

모든 사용자가 디렉토리에 쓰기 권한을 가지므로 심각한 보안 위협이다.

서버 관리자는 필요에 따라 authorized_keys 파일의 경로나 사용 가능한 키를 제한하는 등 SSH 데몬 설정(sshd_config)을 통해 인증 방식을 세부적으로 제어할 수 있다. 예를 들어, 특정 키에 대해 명령어 실행 제한을 부여하거나, 특정 IP 주소에서만 키 사용을 허용하는 옵션을 키 앞에 붙여서 설정할 수 있다.

4.2. ssh-copy-id를 이용한 편리한 배포

ssh-copy-id는 공개키를 원격 서버에 자동으로 복사하고 등록하는 데 사용되는 편리한 명령줄 도구이다. 이 도구를 사용하면 사용자가 수동으로 공개키를 복사하여 ~/.ssh/authorized_keys 파일에 붙여넣는 과정을 자동화할 수 있다. ssh-copy-id는 기본적으로 대부분의 리눅스 및 macOS 시스템에 포함되어 있다.

명령어의 기본 사용법은 ssh-copy-id 사용자명@호스트명이다. 예를 들어, user라는 사용자 이름으로 example.com 서버에 키를 복사하려면 ssh-copy-id user@example.com을 실행한다. 이 명령을 실행하면, 도구는 기본적으로 로컬 시스템의 ~/.ssh/id_rsa.pub 파일에 있는 공개키를 찾아 지정된 원격 서버로 전송한다. 만약 다른 키 파일(예: ~/.ssh/id_ed25519.pub)을 사용하려면 -i 옵션을 통해 키 파일의 경로를 명시적으로 지정할 수 있다[6].

실행 과정은 다음과 같다.

1. 먼저 사용자에게 원격 서버의 비밀번호를 묻는다. 이는 초기 접속을 위한 비밀번호 인증이다.

2. 비밀번호 인증에 성공하면, 도구는 공개키 내용을 원격 서버의 해당 사용자 홈 디렉토리 아래 ~/.ssh/authorized_keys 파일에 추가한다.

3. 필요한 경우, 원격 서버의 ~/.ssh 디렉토리나 authorized_keys 파일이 존재하지 않으면 적절한 권한(700 또는 600)으로 생성한다.

이 도구의 주요 장점은 실수를 줄이고 표준화된 방식으로 키를 배포할 수 있다는 점이다. 수동으로 작업할 때 발생할 수 있는 줄바꿈 오류, 파일 권한 설정 누락, 잘못된 디렉토리에 키를 배치하는 문제 등을 자동으로 처리해 준다. 이후부터는 사용자는 비밀번호 없이 SSH 키 기반 인증을 사용하여 해당 서버에 접속할 수 있게 된다.

5. SSH 키 관리

SSH 키 관리는 생성된 개인키와 공개키를 안전하게 유지하고 효율적으로 사용하는 과정을 포함한다. 키 파일의 적절한 보안 권한 설정은 가장 기본적인 관리 항목이다. 일반적으로 개인키 파일(id_rsa, id_ed25519 등)의 권한은 소유자만 읽고 쓸 수 있도록 600(또는 -rw-------)으로 설정해야 한다. 공개키 파일(.pub 확장자)은 상대적으로 덜 제한적인 644 권한을 가질 수 있다. 권한이 너무 개방적이면 SSH 클라이언트가 보안 위험을 이유로 키 사용을 거부한다.

생성 시 설정한 패스프레이즈는 이후 변경하거나 제거할 수 있다. 패스프레이즈를 변경하려면 ssh-keygen -p -f [키파일경로] 명령을 사용한다. 패스프레이즈를 완전히 제거하여 자동 로그인을 설정하는 것도 가능하지만, 이는 개인키 파일이 유출될 경우 보안 위험을 크게 증가시킨다. 다중 서버를 관리하거나 여러 키 쌍을 사용할 경우, SSH 에이전트를 활용하는 것이 효율적이다. 에이전트는 메모리에 패스프레이즈를 해독한 개인키를 일시적으로 저장하여, 사용자가 매번 패스프레이즈를 입력하지 않고도 여러 서버에 인증할 수 있게 한다. ssh-add 명령으로 키를 에이전트에 등록할 수 있다.

관리 작업

주요 명령어

설명

키 권한 변경

chmod 600 ~/.ssh/id_rsa

개인키 파일 권한을 안전하게 설정한다.

패스프레이즈 변경

ssh-keygen -p -f ~/.ssh/id_rsa

기존 키의 패스프레이즈를 변경한다.

SSH 에이전트에 키 등록

eval $(ssh-agent); ssh-add ~/.ssh/id_rsa

에이전트를 시작하고 특정 키를 추가한다.

에이전트에 등록된 키 목록 확인

ssh-add -l

현재 에이전트가 관리 중인 키의 지문을 나열한다.

여러 개의 다른 키를 특정 호스트에 맞게 사용해야 할 경우, ~/.ssh/config 파일을 구성하는 것이 좋다. 이 파일에서 Host 별로 사용할 IdentityFile을 지정할 수 있어, 연결 시 자동으로 올바른 키를 선택한다. 또한 에이전트를 장시간 사용할 경우, ssh-add -t 옵션으로 키를 캐시할 유효 시간을 설정하여 보안을 강화할 수 있다.

5.1. 키 파일의 보안 권한 설정

SSH 키 파일의 보안 권한 설정은 개인키가 무단으로 액세스되는 것을 방지하기 위한 필수 절차이다. SSH 클라이언트는 과도하게 개방된 권한을 가진 개인키 파일을 사용하는 연결을 거부하며, 이는 일반적인 보안 오류의 원인이 된다.

개인키 파일(id_rsa, id_ed25519 등)은 소유자만 읽고 쓸 수 있어야 하며, 그룹이나 다른 사용자에게는 어떠한 권한도 부여되어서는 안 된다. 권한은 숫자 모드 600 (rw-------)으로 설정하는 것이 표준이다. 공개키 파일(.pub 확장자)은 덜 제한적일 수 있지만, 일반적으로 644 권한으로 충분하다. 키가 저장된 ~/.ssh 디렉터리 자체도 다른 사용자의 접근을 차단하기 위해 700 (rwx------) 권한으로 설정하는 것이 좋다. 권한은 chmod 명령어를 사용하여 변경한다.

파일/디렉터리

권한 (숫자)

권한 (문자)

설명

~/.ssh/

700

drwx------

디렉터리: 소유자만 읽기, 쓰기, 실행 가능

~/.ssh/id_rsa (개인키)

600

-rw-------

파일: 소유자만 읽기, 쓰기 가능

~/.ssh/id_rsa.pub (공개키)

644

-rw-r--r--

파일: 소유자는 읽기/쓰기, 다른 사용자는 읽기만 가능

~/.ssh/authorized_keys

600

-rw-------

파일: 소유자만 읽기, 쓰기 가능 (서버 측)

권한 문제가 발생하면 SSH 클라이언트는 "WARNING: UNPROTECTED PRIVATE KEY FILE!" 또는 "Permissions ... are too open"과 같은 경고 메시지를 출력하고 연결을 중단한다. 이 경우 ls -la ~/.ssh 명령으로 권한을 확인하고 chmod 명령으로 위 표에 명시된 적절한 권한으로 수정해야 한다. 이러한 엄격한 권한 검사는 키 파일이 실수로나 악의적으로 노출되는 위험을 크게 줄여준다.

5.2. 패스프레이즈 변경 및 제거

패스프레이즈는 SSH 키의 개인키 파일을 암호화하는 추가 보안 계층이다. 키 생성 시 설정한 패스프레이즈를 변경하거나 완전히 제거할 수 있다. 이는 보안 요구사항 변경이나 편의성 향상을 위해 필요하다.

패스프레이즈를 변경하거나 제거하려면 ssh-keygen 명령어에 -p (change passphrase) 옵션을 사용한다. 명령어를 실행하면 기존 패스프레이즈를 입력한 후, 새로운 패스프레이즈를 두 번 입력하라는 프롬프트가 나타난다. 새로운 패스프레이즈를 빈칸으로 두고 엔터를 누르면 패스프레이즈가 제거된다. 이 작업은 키 파일 자체를 재암호화하거나 암호화를 해제한다.

작업

명령어 예시

설명

패스프레이즈 변경

ssh-keygen -p -f ~/.ssh/id_rsa

지정된 개인키 파일의 패스프레이즈를 변경한다.

패스프레이즈 제거

ssh-keygen -p -f ~/.ssh/id_ed25519

새 패스프레이즈 입력 시 빈칸으로 두면 제거된다.

패스프레이즈를 제거하면 키 파일 사용 시 매번 암호를 입력할 필요가 없어 편리해지지만, 개인키 파일이 유출될 경우 무단 접근의 위험이 증가한다. 반대로, 처음에 패스프레이즈 없이 생성한 키에 나중에 패스프레이즈를 추가하는 것도 동일한 명령어로 가능하다. 보안과 편의성 사이의 균형을 고려하여 결정하는 것이 중요하다.

5.3. 다중 키 관리와 SSH 에이전트

하나의 시스템에서 여러 개의 SSH 키를 사용하여 서로 다른 서버나 서비스에 접근하는 경우가 흔하다. 예를 들어, 회사 서버용 키와 개인 깃허브 계정용 키를 분리하여 사용할 수 있다. 이때, 특정 호스트에 연결할 때 사용할 키를 지정하려면 ~/.ssh/config 파일을 구성하는 것이 효율적이다. 이 파일에서 호스트별로 사용할 개인키 파일 경로, 사용자명, 포트 등을 정의할 수 있다.

```

Host github.com

HostName github.com

User git

IdentityFile ~/.ssh/id_ed25519_github

IdentitiesOnly yes

Host company-server

HostName 192.168.1.100

User deploy

IdentityFile ~/.ssh/id_rsa_company

```

매번 패스프레이즈를 입력하는 번거로움을 해결하고 키를 안전하게 관리하기 위해 SSH 에이전트를 사용한다. SSH 에이전트는 인증 에이전트로서, 개인키를 메모리에 로드하고 암호화된 연결을 설정할 때 클라이언트를 대신하여 서명을 처리한다. 에이전트를 시작하고 키를 추가하는 일반적인 명령어는 다음과 같다.

```bash

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_ed25519_github

```

ssh-add 명령어를 실행하면 해당 키의 패스프레이즈를 한 번만 입력하면 되며, 이후에는 에이전트가 세션 동안 인증을 대행한다. 현재 에이전트가 관리 중인 키 목록을 확인하려면 ssh-add -l 명령어를 사용한다. 세션을 종료하면 에이전트 프로세스도 종료되어 메모리에서 키가 제거되므로 보안상 안전하다. 일부 운영체제의 데스크톱 환경은 로그인 시 자동으로 SSH 에이전트를 시작하고 키를 추가하기도 한다.

6. 문제 해결

SSH 연결 시 발생하는 일반적인 문제 중 하나는 키 파일의 권한 설정이 너무 느슨한 경우이다. 특히 개인키 파일(~/.ssh/id_rsa 또는 ~/.ssh/id_ed25519)의 권한이 타 사용자에게 읽기 권한이 주어지면, 클라이언트는 보안상의 이유로 해당 키를 사용하지 않는다. 이 경우 "Permissions 0644 for '/home/user/.ssh/id_rsa' are too open" 또는 "Bad permissions"과 같은 오류 메시지가 나타난다. 이 문제를 해결하려면 개인키 파일의 권한을 소유자만 읽고 쓸 수 있도록 600으로 설정해야 한다. 또한, ~/.ssh 디렉터리 자체의 권한도 700으로 설정하는 것이 안전하다.

파일/디렉터리

권장 권한 (8진법)

설명

~/.ssh

700

소유자만 읽기, 쓰기, 실행 가능

~/.ssh/id_rsa (개인키)

600

소유자만 읽기, 쓰기 가능

~/.ssh/id_rsa.pub (공개키)

644

소유자는 읽기/쓰기, 다른 사용자는 읽기만 가능

~/.ssh/authorized_keys

600 또는 644

서버 측 파일, 일반적으로 600 권장

호스트 키 관련 문제는 클라이언트가 저장한 원격 서버의 호스트 키(~/.ssh/known_hosts 파일에 저장됨)와 실제 서버의 키가 일치하지 않을 때 발생한다. 이는 서버가 재설치되었거나, IP 주소가 변경되어 다른 서버가 그 주소를 사용하고 있을 때 흔히 볼 수 있다. 오류 메시지는 "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"와 같다. 이 문제를 해결하려면 known_hosts 파일에서 해당 서버 항목을 삭제해야 한다. ssh-keygen -R [호스트명_또는_IP주소] 명령어를 사용하면 특정 호스트의 키를 안전하게 제거할 수 있다. 서버 관리자에게 호스트 키 변경 사실을 확인한 후 조치하는 것이 보안상 중요하다[7].

6.1. 권한 문제 (Bad permissions)

SSH 접속 시 발생하는 가장 흔한 오류 중 하나는 키 파일의 파일 시스템 권한이 지나치게 느슨할 때 나타나는 "Bad permissions" 또는 "Permissions too open" 오류이다. SSH 프로토콜은 보안상의 이유로 개인키 파일(id_rsa, id_ed25519 등)이 소유자 외 다른 사용자에게 쓰기 또는 읽기 권한이 부여되는 것을 엄격히 금지한다.

일반적으로 개인키 파일은 소유자만 읽을 수 있는 600 (-rw-------) 권한이어야 한다. 공개키 파일(id_rsa.pub 등)과 ~/.ssh 디렉토리 자체도 다른 사용자가 쓰기 권한을 가지지 않도록 설정하는 것이 안전하다. 권한 문제를 해결하려면 다음 명령어를 사용하여 권한을 수정한다.

대상

권한 (8진법)

권한 (기호)

설정 명령어 (예시)

~/.ssh 디렉토리

700

drwx------

chmod 700 ~/.ssh

개인키 파일 (예: ~/.ssh/id_rsa)

600

-rw-------

chmod 600 ~/.ssh/id_rsa

공개키 파일 (예: ~/.ssh/id_rsa.pub)

644

-rw-r--r--

chmod 644 ~/.ssh/id_rsa.pub

authorized_keys 파일 (서버 측)

600

-rw-------

chmod 600 ~/.ssh/authorized_keys

권한을 수정한 후에도 오류가 지속되면, ~/.ssh 디렉토리나 키 파일의 소유권이 올바른지 확인해야 한다. 특히 루트 사용자 권한으로 파일을 생성하거나 복사한 경우, 일반 사용자 계정이 해당 파일을 소유하지 않을 수 있다. ls -la ~/.ssh 명령으로 소유자와 그룹을 확인하고, 필요시 chown 명령어를 사용하여 소유권을 현재 사용자로 변경한다[8]. 윈도우 서브시스템 for 리눅스나 맥OS의 특정 환경에서도 마운트된 드라이브나 외부 미디어에서 키를 사용할 때 유사한 권한 문제가 발생할 수 있다.

6.2. 호스트 키 관련 오류

SSH 연결 시 발생하는 호스트 키 관련 오류는 클라이언트가 서버의 신원을 확인하는 과정에서 문제가 생겼을 때 나타난다. 가장 흔한 오류 메시지는 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!이다. 이는 클라이언트에 캐시된 서버의 호스트 키 지문과 실제 연결 시도한 서버의 지문이 일치하지 않을 때 발생한다. 원인은 서버의 재설치, IP 주소 재할당, 또는 중간자 공격(Man-in-the-Middle attack)일 수 있다[9]. 사용자는 이 경고를 무시하고 연결해서는 안 되며, 먼저 서버 관리자에게 문의하여 호스트 키 변경이 정상적인 절차인지 확인해야 한다.

문제를 해결하려면 클라이언트 머신의 ~/.ssh/known_hosts 파일에서 해당 서버 항목을 제거해야 한다. 다음 명령어를 사용하여 특정 호스트의 키를 삭제할 수 있다.

```bash

ssh-keygen -R 호스트명_또는_IP주소

```

서버의 공개 키 지문을 사전에 알고 있다면, ssh-keyscan 명령어로 새 키를 미리 가져와 검증한 후 수동으로 known_hosts 파일에 추가하는 방법도 있다.

다른 일반적인 오류로 Host key verification failed가 있다. 이는 처음 연결하는 서버의 키가 known_hosts 파일에 존재하지 않아 사용자에게 확인을 요구할 때, 사용자가 'no'로 답하거나 확인 프로세스가 중단되었을 때 발생한다. 신뢰할 수 있는 서버라면 프롬프트에서 'yes'를 입력하여 키를 캐시에 저장하면 된다. 자동화 스크립트에서는 StrictHostKeyChecking 옵션을 no로 설정하여 이 확인 과정을 생략할 수 있지만, 이는 보안 위험을 증가시키므로 테스트 환경에서만 제한적으로 사용해야 한다.

오류 메시지

주요 원인

일반적인 해결 방법

REMOTE HOST IDENTIFICATION HAS CHANGED

서버 호스트 키 변경, IP 충돌, 공격 가능성

known_hosts 파일에서 오래된 항목 제거(ssh-keygen -R)

Host key verification failed

첫 연결 시 키가 등록되지 않음

대화형 프롬프트에서 수동 확인, 또는 신뢰할 수 있는 키를 미리 등록

No host key is known

known_hosts 파일에 해당 호스트 기록 없음

서버 관리자에게 공개 키 지문을 확인받아 신뢰할 수 있는 키로 등록

7. 보안 모범 사례

SSH 키를 안전하게 사용하기 위해서는 몇 가지 보안 모범 사례를 준수하는 것이 중요하다. 이는 무단 접근을 방지하고 시스템의 보안 수준을 유지하는 데 필수적이다.

가장 기본적인 원칙은 충분히 강력한 키를 사용하는 것이다. 현재는 RSA 키보다 Ed25519 키를 사용하는 것이 권장된다. Ed25519는 동일한 보안 수준을 제공하면서도 키 길이가 짧고 연산 속도가 빠르다. RSA 키를 사용해야 하는 경우, 키 길이는 최소 2048비트, 바람직하게는 4096비트로 생성해야 한다. 취약한 것으로 알려진 1024비트 이하의 키는 절대 사용하지 말아야 한다. 또한, 키 생성 시 반드시 패스프레이즈를 설정하여 개인키 파일이 유출되더라도 추가적인 보호 장치를 마련해야 한다.

키의 수명을 관리하는 것도 중요하다. 정기적인 키 교체 정책을 수립하고 실행해야 한다. 직원 퇴사나 장비 분실, 보안 사고 발생 시에는 즉시 관련 키를 폐기하고 새 키로 교체해야 한다. 사용하지 않는 오래된 키는 서버의 authorized_keys 파일에서 제거해야 한다. 또한, SSH 에이전트를 사용할 때는 에이전트에 키를 추가한 후 일정 시간이 지나면 자동으로 제거되도록 타임아웃을 설정하는 것이 좋다. 서버 측에서는 불필요한 루트 로그인을 비활성화하고, 특정 키나 사용자만 접속할 수 있도록 sshd_config 파일에서 세부적인 접근 제어를 구성해야 한다.

7.1. 강력한 키 사용

SSH 연결의 보안 강도는 사용하는 암호화 키의 강도에 직접적으로 의존한다. 약한 키는 무차별 대입 공격이나 양자 컴퓨터와 같은 미래의 위협에 취약할 수 있다. 따라서 RSA, Ed25519, ECDSA 등 현대적인 키 유형 중 하나를 선택하고, 충분한 키 길이를 사용하는 것이 필수적이다.

키 유형

권장 최소 키 길이/곡선

주요 특징

RSA

3072비트 이상

역사적으로 가장 널리 사용되며 호환성이 뛰어남. 2048비트는 더 이상 권장되지 않음[10].

Ed25519

255비트 (고정)

높은 성능과 강력한 보안을 제공하는 최신 타원 곡선 암호 방식. 키 길이가 고정되어 선택의 복잡성을 줄임.

ECDSA

NIST P-384 곡선 이상

타원 곡선 기반의 RSA 대안. 널리 지원되지만 올바른 난수 생성에 의존함.

키를 생성할 때는 예측 가능한 소스(예: 낮은 엔트로피 환경)를 사용하지 않아야 한다. 또한, 모든 서버나 서비스에 동일한 키 쌍을 재사용하는 것은 위험하다. 하나의 키가 유출되면 모든 연결이 위협받게 된다. 대신, 역할(예: 프로덕션 서버, 개인 개발, 특정 호스팅 서비스)이나 접근 수준에 따라 별도의 키 쌍을 생성하여 사용하는 것이 좋다. 이렇게 하면 유출 시 피해 범위를 국지화할 수 있다.

7.2. 정기적인 키 교체

정기적인 SSH 키 교체는 시스템 보안을 유지하는 중요한 관행이다. 장기간 동일한 키를 사용하면 키가 노출되거나 손상될 위험이 누적되며, 이는 무단 접근으로 이어질 수 있다. 특히 키가 다수의 서버나 시스템에 등록되어 있는 경우, 하나의 키가 유출되면 광범위한 보안 침해가 발생할 수 있다. 따라서 조직의 보안 정책에 따라 6개월에서 1년, 또는 주요 인사 이동 시 등 정해진 주기에 따라 키를 교체하는 것이 권장된다.

교체 절차는 새 키 쌍을 생성하고, 기존 키를 단계적으로 대체하는 방식으로 진행된다. 먼저 ssh-keygen 명령어를 사용해 새로운 공개키와 개인키 쌍을 생성한다. 이후 새 공개키를 필요한 모든 대상 서버의 ~/.ssh/authorized_keys 파일에 추가한다. 모든 서버에 새 키가 정상적으로 등록되고 접근이 확인될 때까지는 기존 키를 삭제하지 않고 유지하여 접속 불가 상황을 방지한다.

교체 시 고려해야 할 주요 사항은 다음과 같다.

고려 사항

설명

교체 계획

모든 키가 등록된 시스템 목록을 관리하고, 교체 일정을 수립하여 누락 없이 진행한다.

이중화 기간

새 키와 기존 키를 일정 기간 동시에 사용하여 문제 발생 시 롤백할 수 있게 한다.

기존 키 폐기

새 키의 작동이 완전히 확인되면, 서버의 authorized_keys 파일과 클라이언트의 개인키 저장소에서 기존 키를 안전하게 삭제한다.

자동화

많은 서버를 관리할 경우, Ansible이나 Puppet과 같은 구성 관리 도구를 사용해 키 배포를 자동화할 수 있다.

정기적인 교체는 보안 강화에 필수적이지만, 교체 주기가 지나치게 짧으면 관리 부담이 커질 수 있다. 따라서 시스템의 중요도, 규정 준수 요구사항, 그리고 실제 위협 모델을 고려하여 적절한 주기를 설정하는 것이 중요하다. 교체 후에는 관련된 모든 자동화 스크립트나 CI/CD 파이프라인 설정도 업데이트해야 한다.

8. 관련 문서

  • Wikipedia - SSH 키

  • OpenSSH 공식 문서 - ssh-keygen

  • GitHub 도움말 - SSH 키 생성

  • Microsoft Learn - SSH 키 생성 및 사용

  • AWS 문서 - Linux 인스턴스용 SSH 키 페어

  • DigitalOcean 튜토리얼 - SSH 키 설정 방법

  • SSH Academy - 키 관리 기본 사항

리비전 정보

버전r1
수정일2026.02.12 06:22
편집자unisquads
편집 요약AI 자동 생성