ssh 자동 로그인 인증 설정


ssh 자동 로그인 인증 설정
ssh 자동인증에 사용되는 authorized_keys, id_rsa, id_rsa.pub 파일에 대해서 설명드리면서, 비밀번호 없이 리눅스와 윈도우에서 putty ssh 자동 로그인 방법에 대해서 설명드리겠습니다. 자동 로그인 방식은 단순히 로그인 방법 뿐만 아니라 보안과도 밀접한 관계가 있기 때문에, 로그인에 사용되는 파일을 정확하게 이해하는 것이 필요합니다.

주요 파일 설명

SSH로그인시에 서버와 클라이언트에서 사용되는 주요 파일 정보를 그림으로 나타내었습니다. 작품에 정성이 다소 부족해 보이는 점, 양해 부탁드립니다. authorized_keys, id_rsa, id_rsa.pub 파일 모두 서버와 클라이언트 ~/.ssh 위치에 존재합니다.

ssh 로그인 과정에 참여하는 파일은 크게 3가지로(known_hosts 파일 설명은 생략)아래의 3개 파일이 함께 저장되는 경우도 있으며 서버와 클라이언트에 따라 필요한 파일들만 존재 할 수도 있습니다. 그리고 키파일이 생성되지 않으면 아무런 파일이 없을 수도 있습니다.

authorized_keys
서버에서 인증된 공개키 정보(id_rsa)가 저장되는 파일 입니다. 여러개의 공캐기가 개행 문자로 나눠지면서 저장됩니다.
파일의 퍼미션은 반드시 600 (-rw——-)이 되어야 하며, 공개키에 해당되는 비밀키를 갖고 있는 클라이언트의 접속을 자동인증 처리합니다.

id_rsa.pub
로그인 인증에 사용되는 공개키 파일 내용으로, 로그인을 요청하는 클라이언트에는 없어도 되지만 공개키 내용이 서버의 authorized_keys 에 저장이 되어야 로그인이 가능합니다.

id_rsa
로그인에 사용되는 비밀키 파일로 외부에 노출이 되면 안됩니다. 그리고 비밀키 파일은 원격 서버에 접속하려는 클라이언트 PC에 존재해야 합니다. 인증에는 서버에 저장된 공캐키 내용과 클라이언트의 비밀키를 통해서 인증하게 됩니다. 따라서 하나의 키쌍으로 여러 고객사 정보 서버에 공개키를 저장해도 됩니다.

비밀키만 누출되지 않으면 여러 고객사에서 서로 같은 공개키가 저장되어도 같은 공개키가 저장된 서버끼리는 상호 접속이 불가능하기 때문에, 하나의 키쌍으로 여러 고객사 뿐만 아니라 내부 개발 서버에서 사용해도 됩니다.

하지만 공통적으로 사용되는 비밀키가 유출되었을 경우 해당 비밀키에 대응되는 공개키가 저장된 서버가 한꺼번에 인증된다는 위험이 함께 존재하기는 합니다.

ssh 자동로그인 설정 (리눅스)

먼저 리눅스 클라이언트 환경에서 리눅스 서버로 접속하는 방법을 설명드립니다. 아래의 명령어를 사용하여 현재 id_rsa파일과 id_rsa.pub 파일이 존재하는지 확인해 주시기 바랍니다.

$ ls ~/.ssh

만약 아래와 같은 명령어가 나타난다면, 현재 id_rsa 파일과 id_rsa.pub 파일이 생성되지 않은 것입니다.

ls: cannot access '/home/ubuntu/.ssh': No such file or directory

만약 id_rsa, id_rsa.pub 파일이 존재하면, 아래의 명령어를 생략하고 다음을 진행하시고 파일이 없다면 아래의 명령어를 실행하여 공개키와 비밀키 쌍을 생성해 주시기 바랍니다.

$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): 
Created directory '/home/ubuntu/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ubuntu/.ssh/id_rsa.
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:53PUzAOH2HaTwrMFoo3HZ8WWi7YZfUERYGJ4XoPWcB8 ubuntu@c0b48953fe5c
The key's randomart image is:
+---[RSA 2048]----+
|          o+==+Eo|
|         *.O+B=o.|
|        o O %+Bo.|
|         . =+%o..|
|        S ..o+=. |
|         o .o  . |
|          o .    |
|           o     |
|                 |
+----[SHA256]-----+

그리고 자동 로그인 인증은 아래와 같은 명령어를 실행하면 됩니다.

$ ssh-copy-id 접속계정@도메인
$ ssh-copy-id 접속계정@도메인
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ubuntu/.ssh/id_rsa.pub"
The authenticity of host '도메인 (아이피)' can't be established.
ECDSA key fingerprint is SHA256:1Z2V8vw4i7dZrB8rbKrhHmsCNQT7BpvUjb3dYMg61RY.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
접속계정@도메인's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '접속계정@도메인'"
and check to make sure that only the key(s) you wanted were added.

서버에서 ~/.ssh/authorized_keys 내용을 확인하면 클라이언트의 id_rsa.pub 파일 정보가 저장된 것을 알 수 있습니다.
위에서 ssh-copy-id 명령어를 확인 하지 않고, 직접 수동으로 클라이언트의 ~/.ssh/id_rsa.pub 파일을 직접 서버의 ~/.ssh/authorized_keys 내용에 추가하셔도 됩니다.

putty ssh 자동로그인 (윈도우)

윈도우 환경에서 리눅스 서버로 자동 접속하기 위한 방법을 설명드립니다. SSH 접속에 필요한 putty 뿐만 아니라 공개키, 비밀키 파일을 생성하기 위해선 puttygen 파일이 추가로 필요합니다. 두개의 파일 모두 아래의 페이지에서 다운 받으 실 수 있습니다.

1. 공개키, 비밀키 생성
puttygen 실행하여 generate 버튼을 클릭하여 키 파일을 생성합니다.

위의 화면에서 마우스를 계속 움직여야 키값이 랜덤적으로 생성되게 됩니다. 키 쌍이 생성되게 되면 다음과 같은 화면이 되게 됩니다.

위의 화면에서 Public key for pasting into OpenSSH authorized_keys file 밑에 ssh-rsa로 시작하는 내용을 모두 클립보드에 복사하여, 원격의 서버에 ~/.ssh/authorized_keys 파일에 추가합니다. authorized_keys 파일이 없을 경우 새로 생성해 주시면 되고 파일의 퍼미션은 다음과 같아야 합니다.

-rw------- 1 ubuntu ubuntu 4.0K Mar 14 00:38 authorized_keys

2. 비밀키 설정
앞에서 만든 개인키(private) 키를 내 컴퓨터에 저장합니다.
Connection >> SSH >> Auth >> Private key file for authentication 에서 저장된 키파일을 지정합니다.

3. 접속정보 설정
그리고 마지막으로 Connection >> Data 카테고리 선택 후 Login Details에서 Auto-login username: 아이디 입력하여 세션 정보를 저장하면 됩니다.

ssh 오류 관련

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

만약 서버 접속시 위와 같은 내용의 에러가 날 경우 아래의 명령어를 실행하여 키 정보를 업데이트 하면 됩니다.
서버의 키 정보값이 .ssh/known_hosts 에 저장이 되게 되는데, 서버 OS 재설치 등으로 키값이 수정이되면 위와 같은 메세지가 발생하게 됩니다.

$ssh-keygen -R 호스트이름

아래는 실행 결과로, known_hosts 파일이 업데이트 되는 것을 확인 할 수 있습니다.

$ ssh-keygen -R domain.com
# Host domain.com found: line 202
/home/ubuntu/.ssh/known_hosts updated.
Original contents retained as /home/ubuntu/.ssh/known_hosts.old
본문 내용 인용시에는 출처를 밝혀 주시기 바랍니다.