console

SSH 비밀번호 대신 키 파일을 이용한 로그인 방법

여러 서버들을 관리하다 보면 비밀번호를 일일이 입력해서 로그인하는 것도 상당히 번거로운 작업입니다. 게다가 보안을 위한다며 길게 작성한 비밀번호를 여러 개 외워서 사용하기는 무척 힘든 일이죠.

이런 어려움을 해결하기 위해 비밀키(private key)와 공개키 파일(public key)을 생성해 이 키 파일을 이용해 로그인하는 방식을 알아보겠습니다.

작업 환경은 기본적으로 우분투 22.04 LTS 버전 기준입니다.

1. SSH 비밀키-공개키 파일 생성하기

로컬에서 비밀키-공개키 파일을 생성합니다

> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/doogle/.ssh/id_rsa): (엔터)
Created directory '/home/doogle/.ssh'.
Enter passphrase (empty for no passphrase): (엔터)
Enter same passphrase again: (엔터)
Your identification has been saved in /home/doogle/.ssh/id_rsa
Your public key has been saved in /home/doogle/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:******************************************* doogle@doogle-ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|          =E+ .  |
|         o =.+   |
|        . o . =  |
|         =.o + + |
|   .    S...o.+ .|
|  . .  o.  o+.o.o|
| .   .o. ..oo= + |
|  ..  ooooo.o.+  |
| ...oo..+ooo .   |
+----[SHA256]-----+

위와 같이 명령어를 실행하면 키 파일을 저장할 위치와 비밀번호 입력 및 재입력을 할 수 있는데요.

기본값으로 사용하고 비밀번호 입력 없이 사용하고 싶기 때문에 아무런 입력 없이 엔터키만 누르면 됩니다. 그러면 현재 접속한 터미널에 로그인한 계정의 홈 경로에 비밀키 .ssh/id_rsa 파일과 공개키 .ssh/id_rsa.pub 파일을 생성해 줍니다.

이제 생성한 공개키 파일을 로그인하고자 하는 원격 서버에 설치해 주면 됩니다.

2. 원격 서버에 공개키 설치

우분투 리눅스의 경우 ssh-copy-id 명령을 사용할 수 있습니다.

> ssh-copy-id -i (공개키파일 경로) (원격서버 아이디)@(원격서버 주소)

<예제>
> ssh-copy-id -i ~/.ssh/id_rsa.pub doogle@doogle.link

ssh-copy-id 명령을 쓸 수 없는 환경에서는 scp 를 이용해 공개키를 업로드하면 됩니다. (Windows 나 MacOS 같은 환경의 경우)

혹은 파일질라같은 SFTP 애플리케이션 등을 활용해 업로드할 수도 있습니다.

> scp (공개키파일 경로) (원격서버 주소):/home/(원격서버 아이디)/id_rsa.pub

<원격 서버에 로그인합니다>

# 먼저 원격 서버 사용자 홈 경로에 .ssh 폴더가 없다면 생성합니다.
> mkdir .ssh

# 위에서 업로드한 공개키를 설치합니다.
> cat id_rsa.pub >> ~/.ssh/authorized_keys

이제 키 파일로 로그인 준비를 마쳤습니다.

만약 키 파일로 접속하고 싶은 원격 서버가 여러 개 있다면 각각의 원격 서버마다 2번 작업을 진행해 공개키를 설치해 주면 됩니다.

3. 키 파일로 SSH 로그인 하기

# 기본 경로에 키 파일들이 존재하는 경우 (~/.ssh/id_rsa, ~/ssh/id_rsa.pub)
> ssh (원격 서버 아이디)@(원격 서버 주소)
<예제>
ssh doogle@doogle.link

# 만약 로컬 서버 아이디와 원격 서버 아이디가 같다면 이것도 생략 가능합니다.
> ssh (원격 서버 주소)
<예제>
ssh doogle.link

# 별도 경로에 키 파일들이 존재하는 경우 
> ssh -i (별도 비밀키파일) (원격 서버 아이디)@(원격 서버 주소)
<예제>
ssh -i /home/doogle/custom_path/private.pem doogle@doogle.link

추가로 AWS EC2 리눅스 인스턴스의 경우 키 파일 로그인을 기본으로 하고 있으므로 반드시 개념과 사용방법을 익혀두시기 바랍니다.

이상으로 키 파일을 이용한 SSH 로그인 방법을 알아보았습니다.

읽어주셔서 감사합니다. ^^

참고

  1. https://confluence.curvc.com/pages/releaseview.action?pageId=79004027
  2. https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html
  3. man ssh