본문 바로가기
Development Tools/DevOps

SSH 연결시 암호 없이 접속하기 위한 키 만들기

by jjerryhan 2018. 5. 17.
반응형

SSH?

요즘엔(요즘이 아니라 수십년? 전부터) TELNET 자체가 이용가능한 서버가 없을 정도로 대부분의 원격 서버 접속시에 SSH 를 이용합니다.

바로 보안의 이유인데요. TELNET 의 경우엔 아주 간단한 tcp dump 툴만 있어도 손쉽게 서버와의 통신 중에 오가는 현재 접속한 사용자가 입력하는 내용과 서버에서 그 결과로 출력해서 되돌려 주는 화면 출력의 내용을 추출할 수 있습니다.
TELNET은 만들어진지 너무 오래(1969년) 되어서 당시엔 이런 보안적인 검토를 반영하지 못했기 때문이지요.

이에 비해 SSH(Secure Shell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜로 TELNET과 유사하지만 주고 받는 통신에서 암호화 기법을 사용하기 때문에, 중간에서 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자열로 보이기 때문에 아주 안전하게 서버를 원격에서 접속해서 관리할 수 있도록 지원합니다.

SSH도 접속시 입력하는 암호 입력이 문제

SSH 는 일단 접속이 완료되면 암호화된 정보가 오가기 때문에 통신상의 보안위험으로 부터는 해방이 되지만, 언제나 해결되지 않는 문제가 따라 붙기 마련이듯 치명적인 보안 위험이 존재합니다.

바로 암호만 풀게되면 마찬가지로 모든 보안이 해제되어 버리게 됩니다. 왜 암호가 풀리냐구요?
안타깝게도 암호는 사람이 입력을 해야 하는 것이다 보니 너무나 복잡하게 만들수도 없고, 너무나 복잡하게 만들경우 이를 기억할 수는 없기 때문에 특정 파일에 저장해 두게 되는 경우가 생기게 되는데요. 이 저장해 둔 특정 파일을 탈취(?) 해서 접속가능한 서버를 공격하는 일도 비일비재하게 일어나게 됩니다.
대부분의 서버에 동일한 암호를 사용하는 경우가 많기 때문이기도 하지요. 사람이 항상 문제입니다. 하지만 사람이 개입하지 않는다는 것도 문제가 될 수 있습니다.

SSH 공개키 사용을 통한 보안 강화

OPceZ.jpg

따라서 SSH 접속시 암호를 입력하지 않고, 상호 공개키와 개인키(암호화 알고리즘을 통해 암호화된 키, 공개키와 개인키에 대한 보다 상세한 설명은 다른 포스트를 참조)를 검증하여 서버를 접속하는 방식을 선호하게 되었고, 오늘날 대부분의 서버들, 특히 클라우드내에 모든 서버들은 이를 통한 SSH 접속방식 만을 허용하고 있습니다.

따라서 오늘은 특정 클라우드 서비스에서 제공하는 SSH Key Generator 가 아닌 본인의 로컬 장비에서 SSH 키를 생성하는 방법에 대한 정리해 볼까 합니다. (개인적으로 서버를 추가로 설정하면서 작업 하는 김에 스크린샷 찍어서 블로깅 합니다.)

기본 원리는 접속하고자 하는 서버상에 사전에 내가 생성해서 가지고 있는 암호의 공개키를 저장해 둔 후 이후 서버 접속시에는 암호를 입력하지 않고 내가 가진 암호의 개인키를 제공하여 인증을 수행하는 방식입니다.

키 파일이 존재하는 현재 장비에서만 접속이 가능하게 됩니다. 물론 이 경우에도 본인의 키 파일이 탈취(추가 암호를 입력해서 키 파일에 대한 접근에 대해 다시 한번 보호를 할 수 있습니다) 된다면 끝장이긴 하지만, 대신 접속 대상 장비를 특정할 수 없기 때문에 보다 안전한 방식이라고 할 수 있겠습니다.

각설하고 SSH 키를 생성하는 방법을 알아보겠습니다.

Window OS 에서 SSH 키 생성하기

윈도우에서 가장 쉽게 SSH 키를 만드는 방법은 putty 에서 제공하는 PuTTYgen 프로그램을 이용하는 방법입니다.
putty.exe 만 다운받지 마시고 전체 putty 설치 파일을 다운로드 한 후 설치하시면 PuTTYgen 프로그램을 함께 설치할 수 있습니다.

PuTTYgen 을 다운로드 하고 실행

설치 과정 및 스크린샷은 생략합니다. 의도적인 윈도우 천대 중임.

구동후에 "Generate" 버튼을 클릭합니다.
생성시에 추가적으로 key passphrase 를 입력할 수 있습니다. 이 추가 암호는 누군가가 내 암호파일을 임의로 사용할 수 없도록 보호해 주게 됩니다.

키 생성시 입력하는 passphrase 는 실제 서버상의 계정에 대한 암호가 아닌 생성한 key 파일에 대한 암호입니다. (필수가 아니고 옵션입니다.) 이렇게 키 파일에 대한 암호를 추가하게 되면 가장 안전하게 key 파일을 보호하게 됩니다. (파일을 탈취했어도 키 파일에 대한 암호를 모르면 역시나 사용할 수가 없습니다. )

Screen Shot 2018-05-17 at 10.02.47 PM.png
< passphrase 를 적용한 키 파일 사용시 화면 - 접속시에 키 파일에 대한 암호를 추가 검증 >

대신 키 파일에 대한 암호를 지정하면 위와 같이 ssh 접속시 접속 계정에 대한 암호는 입력하지 않지만 대시 매번 키 파일에 대한 암호를 입력해 줘야 하기 때문에 조금 불편하긴 하지만 가장 안전한 보안 수준을 확보하게 되기 때문에 key passphrase 를 설정하실 것을 권해 드립니다. 단순한 작업을 위한 제한적인 계정이시라면 key passphrase 를 생략하셔도

생성이 완료되면 "Save Private Key" 버튼을 클릭합니다.
생성된 키를 저장할 파일명을 지정하여 저장하면 됩니다. 한가지 신경써야 할 부분은 이 파일을 분실할 경우에는 절대로 복구가 불가하기 때문에 반드시 안전한 곳에 저장하고 추가로 별도로 백업도 필요하다면 해 두어야 한다는 점입니다.

저장후에는 출력된 공개 키 값도 복사해서 접속을 하고자 하는 서버상에도 입력해 주어야 합니다.
(공개키를 서버에 저장하고 키 파일을 통해 접속하는 방법안내는 다른 포스트를 참조)

Linux OS 계열에서 SSH key 생성하기

Linux OS 계열(OSX, Ubuntu, Fedora, Cent 등등) 에서는 SSH 키를 만들고 사용하는 것이 표준이기 때문에 이미 관련 프로그램들을 OS 자체에 가지고 있습니다.

ssh-keygen 을 통해 key 생성

암호화 알고리즘을 지정하여 key 를 생성합니다. 기본은 rsa 알고리즘을 사용하게 되고, 보다 강화된 4096 bit 의 알고리즘을 통해 생성하고자 하는 경우에는 추가 옵션을 지정할 수 있습니다.

ssh-keygen -t rsa

기본 rsa 알고리즘을 통해 key 를 생성합니다.

ssh-keygen -t rsa -b 4096

보다 복잡한 4096 bit 의 rsa 알고리즘을 통해 key 를 생성합니다.

명령어를 입력하면, 우선 키 파일 저장 위치를 확인하고(그냥 엔터 치면 기본 경로에 저장됨), key 파일에 대한 passphrase(키 파일에 대한 암호, 계정암호가 아님. 상세 내용은 위의 윈도우에서의 passphrase 내용을 참조하세요) 를 입력하거나 그냥 엔터를 쳐서 입력하지 않고 넘어가도 됩니다.

Screen Shot 2018-05-17 at 2.46.08 AM.png
< Key 파일 생성 과정 (passphrase 를 입력한 예시 화면) >

공개키 확인

키가 생성이 완료되면 id_rsa.pub 파일이 생성되고 해당 파일에서 공개키 값을 확인 할 수 있습니다.

cat /Users/jerry/.ssh/id_rsa.pub

Screen Shot 2018-05-17 at 3.20.40 AM.png

해당 공개키 값을 접속하고자 하는 원격 서버의 authrorized id 파일에 입력하면 됩니다.

id_rsa 파일은 분실시 어떠한 방법으로도 복원이 불가하니 반드시 해당 파일은 안전한 곳에 보관해야 합니다.


생성된 키에 대한 실제 사용방법은 다음 포스트에서 다뤄보도록 하겠습니다.


'Development Tools > DevOps' 카테고리의 다른 글

SSH 연결시 암호 없이 접속하기  (0) 2018.05.21