2022-07-13 ssh_key

2022. 7. 13. 21:21BE/Linux

 

 

로그인 없이 로그인 하기 (ssh key) - 생활코딩

수업소개 ssh, rsync, git와 같은 기술을 사용할 때 로그인이 번거로우신가요? 보다 안전한 방법으로 인증하고 싶으신가요? 두가지 고민을 한꺼번에 해결하는 방법이 있습니다. ssh 공개키를 이용하

opentutorials.org

이 글은 이고잉님의 오픈튜토리얼 리눅스 강의를 듣고 정리한 내용입니다.


ssh key

 

보통 ssh를 통해서 통신할 경우 ip와 passwd를 통해 접속한다.

 

다만 이 경우 네트워크 상에 비밀번호가 노출될 수 있다.

 

이에 간편하면서도 안전한 ssh key 방식을 사용한다.

 

 

ssh key를 사용하기 위해서 우리가 해야 할 것들

 

1. client가 public key와 private key를 생성한다.

ssh-keygen

 

보통은 ~/.ssh/에 위치한다.

 

Enter passphrase (empty for no passphrase): : 이런 질문을 하는데 추가적인 비밀번호를 입력할 수 있다는 뜻이다. (선택 사항)

 

cd ~/.ssh/
ls -al
  • id_rsa : private key. 타인에게 노출되면 안 된다!!!
  • id_rsa.pub : public key.
  • known_hosts : 정상적으로 접속할 수 있다고 검증된 서버의 공개키를 저장
  • authorized_keys : 정상적으로 접속을 허락한 검증된 클라이언트의 공개키를 저장.

 

 

2. server의 .ssh/authorized_keys 파일에 client의 public key를 추가한다.

 

직접 복사해 붙여 넣어도 되지만 우아하게 명령어로 해결할 수 있다.

 

파일을 직접 수정하면서 여러 가지 실수를 유발할 수 있다.

 

실수를 예방하는 차원에서 되도록 명령어를 사용하자.

 

ssh-copy-id [server_usr]@[server_ip_addr]

 

성공적으로 실행되면 서버의 authorized_key 파일에 클라이언트의 id_rsa.pub 파일의 내용이 추가될 것이다.

 

ssh-copy-id [-f] [-n] [-s] [-i [identity_file]] [-p port] [-o ssh_option] [user@]hostname

주의!

/usr/bin/ssh-copy-id: ERROR: Too many arguments...의 오류가 발생하는 경우 포트 번호를 지정하는 -p 옵션이 user@ihostname보다 앞에 와야 한다.

 

 

3. 접속한다.

ssh [server_usr]@[server_ip_addr]

 

이제 별도의 비밀번호 입력 없이 간편하고 안전하게 ssh를 이용할 수 있다.

 

 


rsync

 

rsync는 기본적으로 ssh를 이용해 통신한다.

 

때문에 자동으로 ssh key 방식으로 연결할 수 있는 경우 ssh key를 이용해 별도의 패스워드 입력 없이 연결할 수 있다.

 

 


RSA

 

RSA 암호는 공개키 암호 시스템의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려져 있다.

 

RSA가 갖는 전자서명 기능은 인증을 요구하는 전자 상거래 등에 RSA의 광범위한 활용을 가능하게 하였다.

 

1978년 로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman)의 연구에 의해 체계화되었으며, RSA라는 이름은 이들 3명의 이름 앞글자를 딴 것이다.

 

RSA 암호체계의 안정성은 큰 숫자를 소인수 분해하는 것이 어렵다는 것에 기반을 두고 있다.

 

그러므로 큰 수의 소인수 분해를 획기적으로 빠르게 할 수 있는 알고리즘이 발견된다면 이 암호 체계는 가치가 떨어질 것이다.

 

출처 : https://ko.wikipedia.org/wiki/RSA_암호

 

 

기본 원리

 

RSA는 두 개의 를 사용하는 비대칭키다.

 

여기서 키란 메시지를 열고 잠그는 상수(constant)를 의미한다.

 

공개키(Public Key)개인키(Private Key)를 생성 (개인키는 절대 타인에게 노출되어서는 안 됨!)

 

RSA는 소인수 분해의 난해함에 기반하여, 공개키만을 가지고는 개인키를 의미론적으로 안전한 암호화 시스템(semantically secure cryptosystem)을 보장하도록 디자인되어 있다.

 

공개키로 암호화된 것은 개인키로, 개인키로 암호화된 것은 공개키로 풀 수 있습니다.

 

 

클라이언트에서 서버로 메시지가 전달

  1. 클라이언트에서 개인키로 메시지를 암호화
  2. 서버에서 공개키로 복호화

공개키로 복호화할 수 있는 메시지는 개인키를 가진 자신밖에 없다.

 

그렇기에 내가 발행한 메시지라는 것을 의미론적으로 증명한다.

 

서버에서 클라이언트로 메시지가 전달

  1. 서버에서 공개키로 암호화
  2. 클라이언트에서 개인키로 복호화

서버에서 전달되는 메시지는 오직 개인키를 소지한 본인만이 해독할 수 있다.

 

출처 : https://ko.wikipedia.org/wiki/RSA_암호

출처 : https://psychoria.tistory.com/749

 

접속 과정

 

아래 글은 ssh key를 이용한 통신 과정을 잘 설명한다. 읽어보자!

[서버보안] SSH #1 - SSH 원리

 

[서버보안] SSH #1 - SSH 원리

SSH(Secure Shell) : 시큐어 셸 기존 Telnet, Rlogin, RSH를 대체하기 위해 만들어졌으며 네트워크 상의 다른 PC나 서버에 로그인, 원격 명령 실행, 파일 전송을 수행할 수 있는 프로토콜이다. 기존의 원격

limvo.tistory.com

 

요약하면…

 

클라이언트가 서버를 정상적인 서버인지 검증한다.

 

통신을 암호화할 때 필요한 세션 키를 생성, 공유한다.

 

서버가 접속이 허용된 클라이언트인지 확인한다.

  1. 클라이언트는 인증할 키의 ID를 서버에 전송
  2. 서버는 클라이언트가 접속하고자 하는 계정의 .ssh/authorized_keys 파일을 확인
  3. ID에 매칭되는 공개키가 있을 시, 서버는 난수를 생성하고 클라이언트의 공개키로 암호화
  4. 서버는 클라이언트에게 암호화된 메시지 전송
  5. 클라이언트의 개인키를 통해 암호화된 메시지를 복호화하여 난수 추출
  6. 클라이언트는 난수를 세션 키와 결합하여 해시값 계산 후 서버 전송
  7. 서버는 저장된 난수와 세션 키를 결합하여 해시값 계산 후 비교
  8. 일치할 시 클라이언트의 접속을 허용한다.

 

출처 : https://limvo.tistory.com/21


길고 길었던  리눅스 강의를 완주했다!

 

23년 8월 30일 추가

 

함께보면 이해하기 좋은 영상.

 

'BE > Linux' 카테고리의 다른 글

2022-07-12 rsync  (0) 2022.07.12
2022-07-12 도메인(Domain)  (0) 2022.07.12
2022-07-10 웹서버(apache)_2  (0) 2022.07.10
2022-07-08 웹서버(apache)_1  (0) 2022.07.08
2022-06-30 리눅스_네트워크  (0) 2022.07.01