ssh 공개키 인증을 활용한 서버 로그인 자동화

Eunbin Park·2023년 2월 15일
0

💡 이 문서는 로컬 환경에서 비밀번호 없이 ssh key를 이용해 원격 서버에 진입하는 방법을 기술합니다.
본 문서는 MacOS Ventura와 Ubuntu 22.04로 기술됩니다.

Prerequisite

  • 자유롭게 드나들 수 있는 서버
  • 로컬 컴퓨터
  • 클라이언트와 서버 모두 ssh 가 설치되어있음

RSA - 비대칭키 암호

RSA는 Public, Private Key로 이루어져있다. 공개키는 메시지를 암호화할 시에, 개인키는 복호화할 시에 사용된다.
본 알고리즘은 미국 MIT 에서 리베스트(Ronald Rivest), 샤미르(Adi Shamir), 애들먼(Leonard Adleman)에 의해 고안되었다.
... 설마 자기네들 성 앞글자 따서 RSA인가? 개멋있다...

방식

  • Alice 와 Bob은 보안을 위해 RSA 알고리즘을 이용해 정보를 교환하려고 한다. 이때 Alice는 public, private key 를 만들고 Bob에게 Public key를 주었다.
  • Bob은 Alice의 Public Key를 이용해 보낼 정보를 암호화한 후 Alice에게 넘겨준다.
  • Alice는 Private Key를 이용해 Bob이 보낸 암호문을 복호화하여 확인한다.

ssh-key 등록

ssh-keygen -t rsa

위의 명령어 입력 시 아래와 같은 출력을 확인할 수 있다.
첫 번째 출력은 공개키 파일 저장 위치를 지정해주는 물음이며, 별다른 입력 없이 엔터를 입력하면 괄호 안의 경로에 저장된다.

이후 두 번의 passphrase 를 물어본다.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/parkeunbin/.ssh/id_rsa):
# 경로 입력
Enter passphrase (empty for no passphrase):
# passphrase 입력
Enter same passphrase again:
# passphrase 재입력

모든 입력을 마치면 아래와 같은 화면을 확인할 수 있다

The key's randomart image is:
+---[RSA 3072]----+
|    .=XO+B==E.+ .|
|     +.+O.+..= + |
|    o =.+oo+. . o|
|   . . * oo+ o . |
|  .   + S o o    |
|   . . +   .     |
|    . .          |
|                 |
|                 |
+----[SHA256]-----+

새로 생긴 파일에 대한 권한을 설정한다.

chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

원격지에 public key를 등록한다. 본 글에서는 scp를 사용했지만, ssh-copy-id 를 사용할 수도 있다.

이후 원격지로 진입한 후 아래의 명령어를 통해 id_rsa.pub 파일을 이용해 authorized_keys 을 생성한다.

cat $HOME/id_rsa.pub >> $HOME/.ssh/authorized_keys

이후 클라이언트에서 서버로 최초 진입 시 아래와 같은 입력창이 뜨는데, yes 를 입력한다.

모든 과정이 끝난 후에는 ssh나 scp 등에서는 비밀번호를 요구하지 않는다.

Trouble Shooting

간혹 id_rsa, id_rsa.pub 파일 권한을 진행하지 않아서 아래와 같은 에러가 나오기도 한다.
무시하고 진행해도 서버 진입에는 문제가 없는데, 본 문서의 목표였던 서버 로그인 자동화를 완성할 수 없다.
반드시 두 파일의 권한을 변경해야 한다.

Permissions 0644 for '/Users/userName/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/userName/.ssh/id_rsa": bad permissions
work@127.0.0.1: Permission denied (publickey).
# 생략

0개의 댓글