Development

비밀번호 없이 SSH 접속? pem 키로 간편화해보자

12기통엔진 2023. 11. 13. 18:30
반응형

 

 

 

0. rsa 기반의 공개키, 개인키 생성


pem 키를 생성하고자 하는 디렉토리에 가서 아래 명령어 실행,

나는 ~/.ssh 디렉토리 안에서 SSH 접속과 관련한 모든 파일을 저장 중이기에 여기에 파일을 생성할 거다.

$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048 -f {file name}

 

rsa 기반의 암호화, 2048 bit의 키를 {file name}이라는 이름으로 만들어 보자.

⬇️ (참고) ssh-keygen 명령어 상세 옵션

더보기

ssh-keygen [-q] [-a rounds] [-b bits] [-C comment] [-f output_keyfile]
                  [-m format] [-N new_passphrase] [-O option]
                  [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa]
                  [-w provider] [-Z cipher]
ssh-keygen -p [-a rounds] [-f keyfile] [-m format] [-N new_passphrase]
                   [-P old_passphrase] [-Z cipher]
ssh-keygen -i [-f input_keyfile] [-m key_format]
ssh-keygen -e [-f input_keyfile] [-m key_format]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]
 ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D pkcs11
ssh-keygen -F hostname [-lv] [-f known_hosts_file]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -K [-a rounds] [-w provider]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -r hostname [-g] [-f input_keyfile]
ssh-keygen -M generate [-O option] output_file
ssh-keygen -M screen [-f input_file] [-O option] output_file
ssh-keygen -I certificate_identity -s ca_key [-hU] [-D pkcs11_provider]
                  [-n principals] [-O option] [-V validity_interval]
                  [-z serial_number] file ...
ssh-keygen -L [-f input_keyfile]
ssh-keygen -A [-a rounds] [-f prefix_path]
ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number]
                  file ...
ssh-keygen -Q [-l] -f krl_file [file ...]
ssh-keygen -Y find-principals -s signature_file -f allowed_signers_file
ssh-keygen -Y match-principals -I signer_identity -f allowed_signers_file
ssh-keygen -Y check-novalidate -n namespace -s signature_file
ssh-keygen -Y sign -f key_file -n namespace file [-O option] ...
ssh-keygen -Y verify -f allowed_signers_file -I signer_identity
                  -n namespace -s signature_file [-r krl_file] [-O option]

 

명령어를 입력하면 아래 텍스트가 출력된다.

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):

# 비밀번호 입력 & 엔터 입력 후,
Enter same passphrase again:

해당 키를 이용하여 SSH 원격 접속 시 입력할 비밀번호를 입력하면 된다.
보안을 강화할 거면 여기에 비밀번호를 입력하고, 이후에 머신에 공개 키를 옮기고 난 뒤에 반드시 해당 비밀번호를 기억해야 한다.

나는 한 학기 동안 과제용으로 사용할 머신이다 보니 빠른 접근을 위해 비밀번호를 생략하기로 했다.
아무것도 타이핑하지 않고 엔터를 치면 비밀번호를 지정하지 않는다.

키 생성 완료

 

해당 디렉토리에 2개의 파일이 생겼다.
개인키 cs479
공개키 cs479.pub

 

이제 두 파일을 이용해 보안 설정을 마무리해 보자.

 

1. 공개키 내용을 머신에 적용시키기


이 글을 보고 있는 사람은 아마 SSH를 이용해 머신에 한 번이라도 접근한 상태일 것이기 때문에,
머신의 홈 디렉토리에 .ssh 디렉토리가, 그리고 그 안에 authorized_keys 파일이 있을 것이다. ~/.ssh/authorized_keys

머신에서 찾아보자.

authorized_keys 파일을 열고, ssh-keygen 명령어로 생성된 cs479.pub 파일의 내용을 붙여 넣는다.

 

Local 에서 생성된 {file name}.pub 의 텍스트 내용을 복사하여 원격 머신의 ~/.ssh/authorized_keys 맨 아랫줄에 붙여 넣는다.

 

2. 개인키에 권한 부여하기


ssh-keygen 명령어로 생성된 개인키 cs479 파일에 권한을 추가해 주자.

cd ~/.ssh
chmod 400 {private key file name}

 

3. SSH 접속마다 개인키를 참조하도록 설정 변경하기


로컬의 ~/.ssh/config 파일을 열면 다음과 같이
SSH 형식으로 연결된 모든 머신의 nickname, ip, username 이 저장되어 있을 것이다.

생성한 개인키를 원하는 머신의 설정에 추가해 주도록 하자.

Host {nickname}
	HostName {ip address}
	User {machine user name}
	IdentifyFile {private key directory}


맨 아랫 줄 {private key directory}에 방금 생성한 개인키의 디렉토리를 넣어주자.

내 경우엔 ~/.ssh/cs479 일 것이다.

 

⬇️ (참고) ssh config 상세 옵션
https://www.ssh.com/academy/ssh/config

 

4. 결과


설정을 완료하고, VSCode Remote - SSH로 접속을 시도하면,

비밀번호를 묻는 단계가 사라지고 바로 머신에 접속이 가능해진다.


또, 터미널에서 ssh 명령어를 다음과 같이 입력해도,

ssh -XY {username}@{ip address} -i ~/.ssh/{private key} -p 22

마찬가지로 비밀번호를 묻지 않고 바로 접속된다.

 

개인키를 사용하면 왼쪽과 같이 비밀번호를 묻는 텍스트 아웃풋이 나오지 않고, 개인키를 사용하지 않으면 오른쪽과 같이 비밀번호를 묻는다.

 

반응형