- 4
- NoYeah
- 조회 수 8909
SSH 키 방식으로 로그인 하기
SSH를 로그인 하는 방식에는 두가지 방식이 있습니다.
1. 암호를 직접 입력해서 로그인
2. 비밀키와 공개키를 서버와 클라이언트가 나눠가져 키 방식으로 인증하기.
쉽게 설명을 하면 요즘 다 있는 도어락에서 번호키를 입력해서 들어가느냐(암호입력), 지문인식이나 카드키 같이 특정한 방식으로 들어가느냐(키 방식)의 차이로 생각하면 되겠습니다.
일단! 키 입력방식을 사용하면 좋은 점이 ssh 자동 로그인이 가능해 진다는 점입니다. 그리고 위에 예를 보다시피 누구나 알 수 있는 비밀번호보단, 나만이 갖고 있는 키를 이용해서 접속하는 것이 보안상 더 안전하겠죠.
ssh 자동로그인이 가능하면 쉘 명령어를 통해 다른 서버의 내용을 쉽게 백업할 수 있습니다. 앞으로 몇몇 스크립트에서는 ssh 자동 로그인을 필요로 하는 경우들이 생길 수 있기 때문에 적용해 놓는 것이 좋습니다.
1. 대략적인 이론 설명
모든 암호화 방식에 사용하는 키는 공개키(Public Key)와 비밀키(Private Key)로 나뉘어 집니다. 그리고 키 생성을 하면 무조건 짝을 이뤄서 생성이 됩니다.
공개키는 말 그대로 누구나가 가질 수 있는 키입니다. 그렇기 때문에 접속할 서버에 심어 놓을 수 있습니다.
반면, 비밀키는 사용자가 가지고 있는키이며, 유출되면 위험합니다. 누구에게도 공개하면 안되고 본인만 가지고 있어야 합니다. (이름부터도 비밀키잖아요.)
만약, 내가 Putty 라는 프로그램을 이용해서 접속을 하고 싶다면 비밀키는 내가 가지고 있고, 공개키를 앞으로 접속할 서버에 심어 놓으면 됩니다. 접속할 서버가 여러대면 여러대의 서버에 그 공개키를 심어놓으면 되지요.
마치, 자물쇠와 같습니다. 이 자물쇠는 특수 자물쇠와 같아서 키(비밀키)는 하나지만 열수 있는 똑같은 자물쇠(공개키)를 여러개 만들 수 있습니다. 이 자물쇠를 사물함(서버)에 걸어 놓고 사용할 수 있지요. 만약, 다른 사물함에도 물건을 보관하고 싶으면 다른 사물함에도 자물쇠를 걸어 놓으면 되니깐요.
SSH 로그인 방식이 아니라 모든 보안 인증서 방식은 이렇게 보안키와 공개키로 나눠집니다. 비슷한 원리로 작동됩니다.
2. 리눅스 > 리눅스 시스템 연결
쉘을 사용하는 환경에서 SSH 접속하는 경우 입니다.
기본적으로 같은 리눅스라도 다른 리눅스 시스템으로 연결하는 경우에는 스크립트 몇줄 쳐줘야 자동로그인이 가능합니다.
아래의 명령어들은 SSH 서버가 아닌 접속할 쉘 환경(클라이언트)에서 실행해야 하는 내용입니다.
일반적인 상황에서 로그인을 하려면 이렇게 명령어를 사용합니다.
ssh (사용자명)@(host 주소)
이 후에 암호를 따로 입력하게 되고 제대로 암호가 입력이 되면 로그인이 됩니다.
이렇게 암호를 입력해 로그인 하는 방식을 조금 변경해서 키 방식으로 전환해보겠습니다. 참고로 스포어 호스팅에서 사용가능한 명령어 들입니다.
ssh-keygen -t rsa
ssh-keygen 명령어를 이용해 rsa 방식으로 키를 생성합니다.
Generating public/private rsa key pair. Enter file in which to save the key (/.ssh/id_rsa): <엔터> Enter passphrase (empty for no passphrase): <엔터> Enter same passphrase again: <엔터> Your identification has been saved in /.ssh/id_rsa. Your public key has been saved in /.ssh/id_rsa.pub. The key fingerprint is: SHA256:rlUXGg9rdXl/7AJ8iheWhChZu2COzww3thqdhRyPc3k (계정)@(호스트) The key's randomart image is: +---[RSA 2048]----+ | . | | / o . . | | * F + + o .| | = # $ ^ + o.| | o X S E O . +| | + . . o = ..| | . B o . o . .| | o o . . | | . . | +----[SHA256]-----+
엔터라고 적혀있는 부분은 기본 설정을 사용하기 위해 그냥 빈칸으로 두는 것이 좋기때문에 적어놨습니다. (Random Art 이미지는 임시 편집)
이렇게 생성하고 나면 생성된 파일을 확인해봅시다.
ls -al /.ssh
여기에 들어있는 파일을 확인해보면 4개의 파일이 있습니다.
- authorized_keys => 공개키의 정보를 저장하는 파일 (600)
- id_rsa => 개인키 (600)
- id_rsa.pub => 공개키 (644)
- known_hosts => 다른 서버로 접속할 때 서버 인증정보를 저장 (finger print) (644)
참고로 보안상 퍼미션을 변경하는게 좋습니다만, 일반적으로 키를 생성하면 자동적으로 퍼미션도 동시에 설정이 됩니다. 뒤에 붙은 숫자는 퍼미션 입니다. 또한 .ssh 폴더는 700으로 설정하는 것이 좋습니다. (물론 자동으로 세팅 됩니다.)
이제 이 중에서 공개키를 접속할 서버에 전송할 겁니다. rsync 명령어를 활용 합니다.
rsync -avrh /.ssh/id_rsa.pub (접속할 계정명)@(접속할 호스트 주소):~/.ssh/
또는 scp 명령을 활용해도 됩니다.
scp /.ssh/id_rsa.pub (접속할 계정명)@(접속할 호스트 주소):~/.ssh/
이렇게 하면 앞으로 접속할 서버에 공개키가 복사가 됩니다. 이 때 주의해야 할 점은 공개키가 복사되는 위치가 home폴더 내에 .ssh 폴더여야 합니다.
이제 앞으로 접속할 서버에서 해야할 일입니다.
복사된 공개키의 내용을 서버의 authorized_keys 파일안에 병합(추가)해야 합니다.
아래의 명령어로 복잡하게 에디터를 열어 수정할 필요없이 간단히 추가할 수 있습니다.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
이제 모든 작업이 완료되었습니다.
다시 클라이언트로 돌아가서 아래 명령어를 실행해보세요.
ssh (사용자명)@(host 주소)
이제 암호가 없어도 접속이 될겁니다.
3. SSH 클라이언트 프로그램에서 키 생성 후 접속 관리하기
당연한 이야기지만 PuTTY나 Xshell 같은 프로그램에서도 키 생성을 통해 쉽게 로그인이 가능하도록 설정할 수 있습니다.
여기서는 제가 사용하는 주 프로그램인 Xshell 을 이용해 SSH 자동 로그인을 시도해보겠습니다.
먼저 호스트 주소를 입력합니다.
그리고 왼쪽의 범주에서 연결 > 사용자 인증으로 이동합니다.
여기서 방법에 Public key 를 선택합니다.
키를 생성하기 전에 사용자 이름부터 입력하고 시작해야 합니다. 안그러면 키 생성이 엉뚱하게 됩니다.
그리고 아래의 사용자 키 부분에서 찾아보기 버튼을 누릅니다.
그럼 아래처럼 아무런 키도 없는 상태인데, 여기서 생성 버튼을 눌러 사용자 키를 생성할 수 있습니다.
아래는 생성과정이며, 기본 설정 그대로 해도 상관없습니다.
아래처럼 키가 생성이 된것을 알 수 있습니다.
여기서 해당 키를 선택 후 등록 정보를 눌러 공개키를 얻어보겠습니다.
위의 공개키를 파일로 저장 한 뒤 $home/.ssh/ 폴더에 복사해서 병합하던지, 아님 박스안에 ssh-rsa 로 시작하는 부분 전체를 연결할 서버의 authorized_keys 파일안에 추가해서 넣어놓기만 하면 됩니다. (본문 내용 참고)
나중에 리눅스 팁을 적을 때 반드시 필요한 부분중에 하나가 ssh 자동 로그인인데 자주 쓰이게 될 글이 될 것 같습니다.