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번 라인 삭제 후 재접속
'SW 공부' 카테고리의 다른 글
[Jackson] 상속관계 deserializing (0) | 2021.03.29 |
---|---|
[Kotlin] 코루틴 기초 (0) | 2021.03.19 |
[Redis] redis 를 이용한 global session 관리 (0) | 2020.10.15 |
[Spring] service 테스트 작성 요령 (0) | 2020.07.06 |
[JPA] 복합키(Composite Key) 생성 및 관계 맺기 (0) | 2020.04.23 |