프로그래밍/General

SSH 인증키 생성 및 간편 접속방법

Lou Park 2022. 2. 2. 03:15

# SSH Keygen으로 SSH 키 만들기

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519__
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa__

-f <filePath>

지정된 파일 위치/이름으로 키를 생성한다.

 

-t <알고리즘>

지정한 암호화 알고리즘을 통해 키를 생성한다.

dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa 값이 간으하다.

 

-b <비트수>

생성할 키의 비트 수를 설정한다. 일반적으로 3072bit 정도면 충분하다.

 

Passphrase란?

ssh-keygen을 통해 키를 생성할때 passphrase를 묻는다. 비밀번호인데... 비밀키가 복사되어서 사용된다고 해도 passphrase를 입력하지 않으면 사용할 수 없으므로, 보안성을 확보할 수 있다. 

 

 

# .ssh 폴더 살펴보기

$ ls -al ~/.ssh
total 54
drwxr-xr-x 1 ASUS 197121    0  2월  2 02:13 ./
drwxr-xr-x 1 ASUS 197121    0  2월  2 02:13 ../
-rw-r--r-- 1 ASUS 197121    0  2월  2 03:05 config
-rw-r--r-- 1 ASUS 197121 2610 12월 17 12:41 id_rsa
-rw-r--r-- 1 ASUS 197121  574 12월 17 12:41 id_rsa.pub
-rw-r--r-- 1 ASUS 197121 5178  1월 31 17:34 known_hosts
-rw-r--r-- 1 ASUS 197121 2602 12월 17 13:30 rsa-gcp-key
-rw-r--r-- 1 ASUS 197121  569 12월 17 13:30 rsa-gcp-key.pub

 

 

1. known_hosts 파일

원격으로 접속했었던 모든 호스트에 대한 공개키 정보를 담고 있는 파일이다.

아래처럼 해시된 호스트 이름이 저장되어있는데, 해커가 침입했을때 known_hosts를 읽고 여기에 연결된 기기들을 알아내어 공격해나가는 상황을 피하기 위해서다.

root@s17eab9abfad:~/.ssh# cat known_hosts 
|1|9unP28P+4rhm3nDwi9vn5IwKYLwU=|7olJtzA9DO1xwhtdfVeKysAZ8Ro= ecdsa-sha2-nistp256 
AAAAE2VjZHNhLXNoYTIxbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHlyWCsdSzAeNsdj3nhoPD/2IYKLHYaW0psD/
Y85XZijw7f39uxIbgJilL0r2Z8Tph/u6I7DCFF7/MIfyKGU1V0=

 

가장 처음 서버에 접속할때 FingerPrint를 등록하겠냐고 Yes or No로 묻는 프롬프트가 나오는데, 여기서 Yes를 할 경우 known_hosts에 지문이 등록 된다.

 

2. authorized_keys 파일

이 파일에 공개키를 등록해두면 해당 공개키와 쌍을이루는 개인키를 통한 컴퓨터에서 원격 접속이 가능하다. 일반적으로는 없지만, 직접 만들면 된다. 

 

내 연습용 네이버 클라우드 서버에서는 지정된 pem파일을 통해서만 접속할 수 있었지만, 네이버 서버의 authorized_keys에 내 공개키를 등록함으로서 공개키로도 접속이 가능해진다.

 

1) 공개키 수동 복사방법 ㅋㅋㅋ

먼저 공개키를 복사한다.
서버의 ~/.ssh/authorized_keys에 붙여넣는다.

붙여넣을땐 다음 명령어로 붙여넣으면 쉽다.

$ cat >> ~/.ssh/authorized_keys

이제 공개키로도 접속할 수 있다.

 

2) 공개키 자동 복사방법

ssh-copy-id를 이용하면 손쉽게 공개키를 복사할 수 있다.

ssh-copy-id -i <복사할 공개키> user@host
ssh-copy-id -i <복사할 공개키> -p <ssh포트> user@host

rsa-gcp-key.pub를 복사완료
1줄이 더 추가되어 2줄이된 authorized_keys.

 

3. config 파일

ssh config를 사용하면 간편하게 ssh를 이용할 수 있다. 원래는 원격 호스트에 접속하려면 키파일 지정해주고 IP나 Hostname일일히 붙여넣어가면서 접속해야하지만... config에 미리 등록해두면 내가 원하는 별명으로, 원하는 키를 사용하여 원격 호스트에 접속할 수 있다.

 

$ vi config

# naver cloud 
Host navercloud
        HostName xxx.xx.xx.xx
        IdentityFile ~/.ssh/navercloud_lou.pem
        User lou
        Port 1024

User와 Port는 생략가능하다.

이렇게 config를 설정해두고, Host 뒤에 적었던 alias로 간단히 접속할 수 있다.

$ ssh navercloud

 

 

# 권장되는 권한설정

원격 접속과 관련된 부분이니 만큼 SSH 관련 파일들의 권한은 엄격히 제한된다. 일부 접속 오류는 파일 권한이 올바르지 않아 발생할 수 있다. 권장되는 파일 권한은 다음과 같다.

~/.ssh 700 chmod 700 ~/.ssh
개인키 (예시 - id_rsa) 600 chmod 600 id_rsa
공개키 (예시 - id_rsa.pub) 644 chmod 644 id_rsa.pub
~/.ssh/authorized_keys 600 chmod 600 ~/.ssh/authorized_keys
~/.ssh/known_hosts 600 chmod 600 ~/.ssh/known_hosts

 


참고자료

https://opentutorials.org/module/432/3742

http://taewan.kim/post/ssh_key/

https://linuxhint.com/known-hosts-file-ssh-linux/