본문 바로가기

SW 공부

[Ssh] ssh 키를 이용하여 로그인하기

ssh를 이용하여 서버에 연결하기 위해서는 id/pw 또는 key 가 필요하다.

아래에서는 key를 생성하고 교환하는 방식에 대해 알아본다.

 

1. key 생성

windows 에서는 puttygen, ubuntu 에서는 ssh-keygen 으로 공개키와 개인키 세트를 생성할 수 있다

개인키는 클라이언트가 공개키는 서버가 가진다.

$> ssh-keygen // 이후 스크립트 설명에 따라 생성, 모르면 그냥 엔터하면 기본값으로 생성

 

2. 공개키 전송

$> scp ~/.ssh/id_rsa.pub 사용자ID@서버명:id_rsa.pub

aws ec2 생성시에는 aws에서 키페어를 만들고 개인키는 다운로드 받고 공개키는 인스턴스의 authorized_key에 자동으로 들어간다.

 

3. authorized_keys 에 공개키 추가

(이것은 서버에서 해야될 작업이므로 서버권한이 1번은 있어야 함)

서버에 .ssh/authorized_keys 에 전송된 공개키를 추가

권한설정 - .ssh 디렉토리는 0700, authorized_keys는 0600으로 권한 설정

$> mkdir ~/.ssh
$> chmod 700 ~/.ssh
$> cat id_rsa.pub >> .ssh/authorized_keys

 

4. known_hosts 파일 충돌시

ssh로 최초 접속하면 아래와 같이 접속하는 서버의 공개키를 기반으로 하는 fingerprint 가 생성되고 이것을 클라이언트 known_hosts에 저장한다. 이후 이 fingerprint를 이용하여 서버의 공개키가 항상 동일한 것으로 알 수 있다.

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:gl6jVFb3iNGSd1ZeMUF7hi29cgNXTTze6lWCyDjzLq0.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

그런데 만약에 같은 host로 접속했는데, 기존에 저장된 공개키와 다르면 아래 에러가 발생

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:gl6jVFb3iNGSd1ZeMUF7hi29cgNXTTze6lWCyDjzLq0.
Please contact your system administrator.
Add correct host key in /home/ubuntu/.ssh/known_hosts to get rid of this message                                                                                                             .
Offending ECDSA key in /home/ubuntu/.ssh/known_hosts:1
  remove with:
  ssh-keygen -f "/home/ubuntu/.ssh/known_hosts" -R "localhost"
ECDSA host key for localhost has changed and you have requested strict checking.
Host key verification failed.

보통은 서버 os 가 재설치 되었거나 aws라면 인스턴스가 새로 생성된 경우 일 수 있다. 이 때는 known_hosts 의 공개키를 삭제하고 다시 접속하면 된다.

지금은 known_hosts의 1번 라인이 잘못 됐다는 메시지이므로 1번 라인 삭제 후 재접속