티스토리 뷰

반응형

Ssh 연결 수립 과정

 

  • AWS에 접속하는 시나리오를 예로 들어, Client는 Local PC / Server는 EC2 인스턴스로 가정한다.
  • 더욱 자세한 내용은 아래의 링크를 통해서 확인하실 수 있습니다.
  • 참고 URL : leo-history.tistory.com/19
 

Publickey permission denied

test@10.0.10.191: Permission denied (publickey). ssh 접근을 시도할 때 위와 같은 에러를 마주할 때가 있다. 위 에러의 경우 서버의 각 유저(위 경우 10.0.10.191 서버의 test 유저)는 스스로에게 접근을 허용..

leo-history.tistory.com

1. Local PC > EC2 접속 시도

i). 요약

  • EC2 인스턴스 등, SSH 서버는 SSH 데몬이 설치되는 과정에서 내부적으로 공개키와 사설키 쌍이 생성된 상태이다.
  • 클라이언트가 서버에 접속을 시도할 경우, 첫 접속에서는 서버로부터 공개키를 받아올 지 묻는 메시지가 나타난다.
  • yes를 입력할 경우 서버로부터 공개키를 받아 클라이언트의 .ssh/known_hosts에 추가하게 된다.
[~] ssh -i ~/Test.pem ubuntu@3.36.105.134
The authenticity of host '3.36.105.134 (3.36.105.134)' can't be established.
ECDSA key fingerprint is SHA256:~~~(중략).
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '3.36.105.134' (ECDSA) to the list of known hosts.
Ctrl+C
[~] cat ~/.ssh/known_hosts
... 중략
3.36.105.134 ecdsa-sha2-nistp256 AA~~~(중략)

 

ii). 상세

  • 서버 인증
    • 클라이언트는 난수를 생성한 후, 해당 난수를 통해 다음의 두 독립된 과정을 진행한다.
      • 클라이언트는 난수로부터 해시값을 생성하여 저장한다.
      • 클라이언트는 난수를 서버로부터 받은 공개키로 암호화하여 전송한다.
    • 서버는 전달받은 암호화된 난수를 자신의 사설키로 복호화하여 평문 난수값을 알아낸다.
    • 서버는 암호화된 난수값을 다시 해싱하여 클라이언트로 전송한다.
    • 클라이언트는 저장된 해시값과 서버로부터 받은 해시값을 비교하여 서버의 정상성을 확인한다.
  • 클라이언트 인증
    • 서버 인증과 송신자 / 수신자만 바뀌되, 클라이언트가 생성한 공개키는 서버의 .ssh/authorized_keys 파일에 사전에 복사해두어야만 한다.
    • AWS의 Key-pair는 사설키를 사용자가 갖고, 공개키를 AWS가 관리하므로 EC2 인스턴스가 생성되는 시점에 이미 authorized_keys에 값이 복사되어 있다.
ubuntu@ip-10-0-46-54:~$ cd .ssh
ubuntu@ip-10-0-46-54:~/.ssh$ ls
authorized_keys
ubuntu@ip-10-0-46-54:~/.ssh$ cat authorized_keys
ssh-rsa AAA~~~(중략) Test

 

2. Error 정리

i). Permission Denied(Public Key)

[~] ssh -i ~/Test.pem ubuntu@3.36.105.134
ubuntu@3.36.105.134: Permission denied (publickey).
  • 서버로 접근 권한이 없어 거부되었으며, 원인은 서버 측의 authorized_keys 파일에 공개키가 없거나 손상되었기 때문
  • 클라이언트 단에서 해결할 수 있는 방법은 없다.
    • 가능하다면 서버의 authorized_keys에 등록된 다른 키를 사용하여 접속할 수는 있을 것.
  • 해결 : 
    • 서버의 .ssh/authorized_keys에 사용자가 접속하려는 키에 대응되는 공개키가 없거나 손상되었기 때문에 발생하는 문제이다.
    • 따라서, 사용자가 사용한 키의 공개키값을 서버의 authorized_keys에 붙여넣기 한다.
      • 당연히 위와 같은 문제로 서버에 접속할 수 없는 상황이라면 답이 없다!
  • 문제 재현 방법 : 

authorized_keys의 값을 변경

ubuntu@ip-10-0-46-54:~$ cd .ssh
ubuntu@ip-10-0-46-54:~/.ssh$ ls
authorized_keys
ubuntu@ip-10-0-46-54:~/.ssh$ cp authorized_keys authorized_keys-bk
ubuntu@ip-10-0-46-54:~/.ssh$ vi authorized_keys
> key 값을 임의로 삭제하는 등의 작업을 진행하여 손상시킴.
ubuntu@ip-10-0-46-54: exit
[~] ssh -i ~/Test.pem ubuntu@3.36.105.134
ubuntu@3.36.105.134: Permission denied (publickey).

또는 authorized_keys의 권한을 변경

ubuntu@ip-10-0-46-54:~$ cd .ssh
ubuntu@ip-10-0-46-54:~/.ssh$ ls -al
total 16
drwx------ 2 ubuntu ubuntu 4096 Jan  8 01:40 .
drwxr-xr-x 5 ubuntu ubuntu 4096 Jan  8 01:40 ..
-rw------- 1 ubuntu ubuntu  379 Jan  8 01:40 authorized_keys
-rw------- 1 ubuntu ubuntu  389 Jan  8 01:39 authorized_keys-bk
ubuntu@ip-10-0-46-54:~/.ssh$ chmod 044 authorized_keys
ubuntu@ip-10-0-46-54:~/.ssh$ ls -al
total 16
drwx------ 2 ubuntu ubuntu 4096 Jan  8 01:40 .
drwxr-xr-x 5 ubuntu ubuntu 4096 Jan  8 01:40 ..
----r--r-- 1 ubuntu ubuntu  379 Jan  8 01:40 authorized_keys
-rw------- 1 ubuntu ubuntu  389 Jan  8 01:39 authorized_keys-bk
ubuntu@ip-10-0-46-54: exit
[~] ssh -i ~/Test.pem ubuntu@3.36.105.134
ubuntu@3.36.105.134: Permission denied (publickey).

또는 authorized_keys 파일 자체를 누락시킴

ubuntu@ip-10-0-46-54:~$ cd .ssh
ubuntu@ip-10-0-46-54:~/.ssh$ rm authorized_keys
rm: remove write-protected regular file 'authorized_keys'? y
ubuntu@ip-10-0-46-54:~/.ssh$ ls
authorized_keys-bk
ubuntu@ip-10-0-46-54:~/.ssh$ exit
[~] ssh -i ~/Test.pem ubuntu@3.36.105.134
ubuntu@3.36.105.134: Permission denied (publickey).

 

댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함