💡 이 문서는 로컬 환경에서 비밀번호 없이 ssh key를 이용해 원격 서버에 진입하는 방법을 기술합니다.
본 문서는 MacOS Ventura와 Ubuntu 22.04로 기술됩니다.
RSA는 Public, Private Key로 이루어져있다. 공개키는 메시지를 암호화할 시에, 개인키는 복호화할 시에 사용된다.
본 알고리즘은 미국 MIT 에서 리베스트(Ronald Rivest), 샤미르(Adi Shamir), 애들먼(Leonard Adleman)에 의해 고안되었다.
... 설마 자기네들 성 앞글자 따서 RSA인가? 개멋있다...
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 등에서는 비밀번호를 요구하지 않는다.
간혹 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).
# 생략