개발/ETC

linux] ssh 암호 생략하고 접속하기. ssh-copy-id

신매력 2013. 3. 22. 15:10

우리서버(이하 클라이언트)에서 타겟서버로 ssh 명령어를 통해 접근할 때, 암호를 입력해야 접근 가능하다.

암호를 생략하는 방법에 대해 정리한다.



RSA 암호키를 통해 암호를 생략할 수 있다.

아래와 같은 과정을 통해 접속을 한다.


1. 클라이언트에 키를 생성한다. (private, public)

2. 타겟서버에 public key를 복사해 놓는다. (public key는 여러서버에 복사해도 상관없다. private key가 핵심이기 때문에)

3. 클라이언트에서 타겟서버로 ssh로 접속

4. 타겟서버에서 public key로 암호화 된 정보를 클라이언트로 주면,

클라이언트에서는 private key와 타겟서버의 public key로 해독한다.

인증이 되면 암호 입력 필요 없이 접속 가능하다.




명령어들을 통한 예제를 보자.



1. 클라이언트에 RSA key 생성


홈디렉토리에서 .ssh 폴더 생성 후, 내용을 읽지 못하게 권한을 700으로 설정한다.

ssh-keygen 명령어를 통해 key가 .ssh폴더안에 생성된다.

(-t 옵션은 무슨 암호화를 사용할건지 설정하는 옵션이다)


$ mkdir .ssh

$ chmod 700 .ssh

$ ssh-keygen -t rsa 



2. 타겟서버에 public key를 복사한다


$ ssh-copy-id marobiana@192.168.100.2


타겟서버에 있는 .ssh 폴더안에 authorized_keys 파일에 키가 들어간다.

(이런 편한 명령어가 있었다니)



3. ssh를 통해 타겟서버 접속


$ ssh marobiana@192.168.100.2


.. 암호를 묻지 않는다! 





+++ 추가  RSA 암호화 방식


여기서 나는 암호화 방식 때문에 혼동이 왔었는데... 

대충 개념을 말하면 다음과 같다.



1) 클라이언트가 key를 생성함. A, B, C

이중 A, B를 public key로 설정, C는 private key로 설정.


2) 서버한테 public 키를 줌. A, B


3) 클라이언트가 서버에 접속할 때, 

서버가 public key로 암호화해서 데이터를 넘겨줌


4) 클라이언트는 자신이 갖고있던 private key와 서버의 public key를 조합하여 복호화함.

즉, A, B, C를 가지고 복호화 함.



그래서 접속할 서버에게 public key를 주는 것이었다. 


라고 나는 이해했는데 틀린점이 있다면 댓글 달아주시길..





그리고 SSL handshake 하는 과정 그림 투척!