SSH 키 공유(Key-based Authentication) 는 Client과 서버(Server) 로그온 및 ssh 사용시 비밀번호를 매번 입력하는 번거로움을 없애줄 뿐만 아니라, 보안 측면에서도 훨씬 강력한 방식이다.
ssh 키공유
SSH 키-공유의 작동 원리
- 이 방식은 비대칭 암호화를 이용합니다.
- 비공개 키(Private Key): 노트북에 보관하며, 절대 외부로 유출되면 안 됩니다 (열쇠 역할).
- 공개 키(Public Key): 서버에 등록하며, 누구나 봐도 상관없습니다 (자물쇠 역할).
ssh를 사용하는 클라이언트에서 ssh-keygen 으로 비밀키와 공개키를 생성하고, 접속하는 서버 계정 밑에 클라이언트 공개키를 저장하면 ssh 접속시 비밀번호 응답 없이 처리되어 로그인 할 수 있다.
ssh-key 로 생성시 암호화는 RSA 와 ED2619 를 사용한다.
RSA 와 ED2619 에 대해서는 아래 별도 섹션 참고.
1. ssh 클라이언트 비밀키 생성
클라이언트에서 개인 비밀키를 생성한다. ssh-keygen 명령은 기본적으로 비밀키와 공개키 파일을 사용자 홈디렉토리 ~/.ssh 폴더에, 기본 파일이름 id_rsa.pub, id_rsa.prb 파일로 저장한다.
1 | (CLIENT)$ ssh-keygen -t ed2619 -C "USER@localhost" |
ed25519방식은 최신 알고리즘으로 보안성이 높고 속도가 빠릅니다.- 엔터를 몇 번 치면
~/.ssh/id_ed25519(비공개 키)와~/.ssh/id_ed25519.pub(공개 키)가 생성됩니다.
2. ssh 서버 비밀키 생성
서버에도 클라이언트와 동일하게 ssh-keygen 명령으로 비밀키와 공개키를 생성한다.
1 | (SERVER)$ ssh-keygen -t ed2619 -b 4096 -C "USER@server" |
3. 서버로 공개 키 복사
가장 쉬운 방법은 ssh-copy-id 도구를 사용하는 것입니다.
1 | ssh-copy-id 사용자명@서버IP |
이 명령어를 실행하면 서버의 비밀번호를 마지막으로 한 번 물어본 뒤, 노트북의 공개 키를 서버의 ~/.ssh/authorized_keys 파일에 자동으로 등록합니다.
4. 접속 테스트
이제 비밀번호 없이 바로 접속되는지 확인합니다.
1 | ssh 사용자명@서버IP |
보안 강화 (선택 사항)
키 공유가 완료되었다면, 서버의 SSH 설정 파일(/etc/ssh/sshd_config)에서 비밀번호 로그인을 아예 금지하여 보안을 극대화할 수 있습니다.
1 | # 서버에서 실행 |
참고: scp 이용한 키 공유
서버에 공개키 배포
클라이언트에 생성한 공개키 id_rsa.pub 파일을 업로드해서 ./ssh/authorized_keys 파일에 추가해야 한다. 보통 scp 명령으로 복사해서 authorized_keys 파일에 더해주면 된다.
일반적으로 scp 명령으로 복사하고, 서버에 ssh 접속해서 업로드한 공개키 파일을 authorized_keys 파일에 더해준다.
1. 클라이언트에서 복사하기:
1 | scp ~/.ssh/id_rsa.pub USER_ID@HOST_NAME:~/client.pub |
ssh로 서버에 로그인한다.
2.서버 authorized_keys 붙여넣기:
1 | ssh userid@SERVER |
위 2 과정을 아래 명령 한 줄로 복사->붙여넣기를 동시에 할 수 있다.
클라이언트:
1 | cat ~/.ssh/id_rsa.pub | ssh <USERNAME>@<IP-ADDRESS> 'cat >> .ssh/authorized_keys' |
이제 해당 서버로 로그인해 본다.
참고: RSA 와 ED25519 (feat. Gemini)
ssh-keygen 명령으로 SSH 키를 생성할 때 rsa와 ED25519는 서로 다른 암호화 알고리즘을 사용하며, 각각 장단점이 있습니다.
1. RSA (Rivest-Shamir-Adleman)
- 역사 및 범용성: RSA는 매우 오래되고 널리 사용되는 공개 키 암호화 알고리즘입니다. 오랫동안 SSH 키의 표준으로 사용되어 왔으며, 대부분의 시스템과 호환됩니다.
- 키 크기: RSA 키는 가변적인 길이를 가집니다. 일반적으로 보안을 위해 2048비트 또는 4096비트를 권장합니다. 키 길이가 길어질수록 보안은 강해지지만, 연산 속도는 느려집니다.
- 보안: 충분히 긴 키 길이 (예: 2048비트 이상)를 사용하면 현재로서는 안전하다고 여겨지지만, 양자 컴퓨터의 발전 등 미래의 위협에 대한 우려가 있습니다.
- 성능: 키 길이가 길어질수록 키 생성, 서명 및 검증 작업이 느려질 수 있습니다.
2. ED25519 (Edwards-curve Digital Signature Algorithm)
- 기반 기술: ED25519는 타원 곡선 암호화(ECC)의 일종인 Edwards-curve Digital Signature Algorithm을 기반으로 합니다. OpenSSH 6.5에서 도입되었습니다.
- 보안: ED25519는 더 작은 키 크기로도 RSA와 동등하거나 더 높은 수준의 보안을 제공합니다. 예를 들어, ED25519의 256비트 키는 RSA 3000비트 키와 비슷한 보안 강도를 가집니다. 특정 암호화 공격(예: PRNG(Pseudo-Random Number Generator) 실패)에 더 강력하다고 알려져 있습니다.
- 성능: 키 생성, 서명 및 검증 작업이 RSA보다 훨씬 빠르고 효율적입니다. 이는 로그인 시간 단축 등 전반적인 사용자 경험 개선으로 이어질 수 있습니다.
- 키 크기: ED25519 키는 고정된 256비트 크기를 가지므로 RSA 키보다 훨씬 짧습니다. 이 때문에 키를 관리하고 공유하는 데 더 효율적입니다.
- 호환성: 비교적 최신 알고리즘이므로, 매우 오래된 시스템이나 특정 환경에서는 지원되지 않을 수도 있습니다. 하지만 최신 시스템에서는 널리 지원됩니다.
주요 차이점 요약:
| 특징 | RSA | ED25519 |
|---|---|---|
| 기반 | 정수 분해 문제 | 타원 곡선 암호화 (ECC) |
| 키 크기 | 가변 (2048, 4096비트 등 권장) | 고정 (256비트) |
| 보안 | 충분히 길면 안전하지만, 미래 위협 우려 | 작은 키로도 높은 보안성, 특정 공격에 강함 |
| 성능 | 키 길이에 따라 느려질 수 있음 | 빠르고 효율적 |
| 호환성 | 매우 광범위 | 최신 시스템에서 널리 지원, 일부 구형 시스템 제한 |
어떤 것을 사용해야 할까요?
- 특별한 이유가 없다면 ED25519를 권장합니다. 더 나은 보안성과 성능을 제공하며, 대부분의 최신 환경에서 문제없이 사용할 수 있습니다.
- 레거시 시스템과의 호환성이 중요하거나, ED25519를 지원하지 않는 환경이라면 RSA를 사용해야 합니다. 이 경우 최소 2048비트, 가능하다면 4096비트 키를 사용하는 것이 좋습니다. Windows 또는 VMware 이미지와 같은 특정 환경에서는 ED25519가 지원되지 않을 수 있습니다.
결론적으로, 현재 대부분의 SSH 키 생성에는 ED25519가 권장되는 최신, 안전, 고성능 옵션입니다.