Linux SSH keygen 사용해서 암호 대신 SSH key로 인증하기
A Server에서 B Server로 SSH를 이용하여 파일을 전송하거나 작업을 할 경우가 있다. 가장 대표적인것은 SCP이다. SCP로 이렇게 파일을 전송하려고 했을때 대상서버의 비밀번호를 물어본다. 비밀번호 넣어주고 해도 되지만 Jenkins 같은 어플리케이션을 통해 SCP 작업을 하려면 SSH key를 통해 해야한다. 물론 비밀번호도 넣어줘도 되지만 보안상 넣지 않는것이 일반적이다. 어떻게 SSH key를 생성하는지 또 생성한 key를 어느 위치에 어떻게 놔둬야 하는지에 대해 알아보자.
일단 예제에 앞서 개념을 잡고 가기 위해서 허접한 그림을 그려봤다. SSH key를 이용해 인증을 해서 비밀번호를 입력하지 않고 파일을 전송하는것이 목표다. 그림대로 A Server는 B Server에게 SSH를 통해 파일을 전송하려고 한다. 이때
A Server는 둘간의 관계에서 Client라고 하고 private-key(개인키)를 가지고 있어야한다. 또한 SSH KeyGen 작업을 수행하는 곳이 된다. B Server는 둘간의 관계에서 Server가 되며 A Server로부터 받은 public-key(공개키)를 가지고 있어야 한다.
이정도만 이해하고 시작하면 그렇게 어렵지 않게 접근할수 있을것이다.
SSH Keygen 사용법 및 파일전송 예제
A Server
$ ssh-keygen -t rsa
일단 SSH 통신을 하기 위한 key를 생성을 해준다. ssh-keygen이라는 명령어를 통해 생성할 수 있다. 어디에다 key를 둘건지 또 암호화를 위한 key는 무얼로 할건지 물어보는데 그냥 엔터 엔터 쳐서 넘어간다. 그럼 key가 기본위치인 ~/.ssh 밑에 생성이 된다.
숨김폴더라 ls -al로 봐야지 보인다. id_rsa라는 private_key와 id_rsa.pub라는 public_key가 생성이 되었다.
$ scp ~/.ssh/id_rsa.pub 대상서버유저@대상서버IP:~
이렇게 생성된 public_key(id_rsa.pub)를 B 서버의 적당한 위치에 SCP를 통해 전송을 해준다. 이때는 물론 SSH key 통신이 안되어있는 상태라 비밀번호를 입력해줘야한다.
이렇게 하지 않고 그냥 id_rsa.pub의 내용을 바로 B Server의 authorized_keys에 넣어줘도 무방하다.
B Server
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
B Server에서는 A Server로부터 넘어온 id_rsa.pub 파일을 ~/.ssh/authorized_keys 에 넣어주는 작업이다. 이때 .ssh 폴더는 생성되어 있지 않다면 생성을 해줘야한다.
authorized_keys를 열어보면 id_rsa.pub (공개키) 의 내용이 잘 들어가있는것을 확인할 수 있다. 끝났다.
테스트
테스트는 간단하게 scp를 사용해 A Server에서 B Server로 파일을 전송해보자. 위에 보는것과 같이 비밀번호를 물어보지 않고 파일이 전송되는것을 확인할 수 있다.
끝!