SSH 접속시 사용할 SSH 키 생성 및 설정

최준혁·2023년 3월 9일
0
post-thumbnail

요즘 보안취약점 검사를 받은 뒤라서 서버쪽 수정할 일이 많다.
그리고 모놀리식 아키텍처 방식에서 MSA로 넘어가는중이라 더욱이 서버쪽을 건들일이 많다.
오늘은 서버쪽 작업중 ssh 키에 대한 설명 및 설정방법을 기록하고자 한다.

생각해보자 일반인은 없겠지만 개발자들은 컴퓨터로 어딘가에 접속하려다 보면 SSH를 사용해야 하는 경우가 많다. SSH(Secure Shell)는 보안되지 않는 네트웍에서도 네트웍 서비스를 안전하게 운영하기 위한 암호화 기반 네트웍 프로토콜을 말하는데, 가장 대표적인 예는 Github같은 서비스에 아이디, 비밀번호 입력 없이 접속할 수 있는데 매우 편리하고 보안도 뛰어나다.
키 생성부터 살펴보자.

RSA 키 생성

# ssh-keygen -t rsa -b 4096

옵션 설명은 아래와 같다.

  • t: 생성할 키 타입
  • b: 생성할 키의 비트(bits) 수
  • C: 코멘트. 대문자에 주의하세요.

위의 명령어를 실행하면 아래와 같이 키를 저장할 디렉토리와 파일명을 입력하라고 하는데 보통 디폴트로 되어 있는 위치로 생성하면 된다.

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

다음은 암호를 입력하고 나오는데 만약 퍼블릭 키를 이용해서 리모트로 암호 없이 바로 접속할려면 암호를 입력하지 않고 엔터를 치면 된다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

마지막으로 아래와 같은 메시지가 출력되면서 파일이 생성된다.

The key fingerprint is:
e9:54:90:a3:5d:ba:7b:34:f2:30:76:f5:c7:4c:d3:25 root@aaa
The key's randomart image is:
+--[ RSA 2048]----+
|        ..       |
|        o..   E .|
|       o +.    .o|
|      . oo  .  .o|
|        S. . . +.|
|       o* +   . +|
|       ..O .   . |
|        . o      |
|         .       |
+-----------------+

아래와 같이 id_rsa 개인키 파일과 id_rsa.pub 공개키 파일이 생성된 것을 알 수 있다.

total 16
-rw-r--r-- 1 root root  399  4월  9 18:10 authorized_keys
-rw------- 1 root root 1679  4월 10 17:24 id_rsa
-rw-r--r-- 1 root root  399  4월 10 17:24 id_rsa.pub
-rw-r--r-- 1 root root  444  4월  9 21:06 known_hosts

생성한 SSH 키를 ssh-agent에 등록하기

$ ssh-add ~/.ssh/id_rsa

ssh-add 명령어에 대한 참고는 여기서!
https://www.lesstif.com/lpt/ssh-agent-private-key-ssh-add-123338804.html

그런데 ssh-agent는 왜 쓰는 걸까?
ssh-agent없이도 SSH 키를 가지고 아이디, 비밀번호 없이 원격 서버에 접속할 수 있는데 그건 위에서 SSH 키 생성 시 입력한 비밀번호와 관련이 있다. SSH 키 생성 시 비밀번호를 입력하면 키를 이용해 원격 서버에 접속할 때 비밀번호를 물어보는데 이건 몇 번 해보면 알겠지만 여간 귀찮은게 아니다.
아이디, 비밀번호 넣는게 싫어서 SSH 키 만들었더니 또 비밀번호 넣으라고 나오면… 이럴 때 ssh-agent를 씁니다.
쉽게 말해 ssh-agent는 개인키의 비밀번호를 암호화 해 기억해두고 처음 한 번만 개인키 비밀번호를 입력하면 다음부터는 기억한 비밀번호를 이용하므로 사용자는 또 비밀번호를 입력하지 않아도 된다.
소켓(Socket)을 생성해서 원격 서버와 통신하기 때문에 비밀번호가 유출될 염려도 없다!

키파일에 대한 권한 문제
ssh-key을 통해서 처리한 경우 문제가 되지 않을 수 있지만 수동으로 처리한 경우는 다음과 같이 파일 권한 을 설정해 줘야 한다.

  • 공개 키 : 0644(-rw-r--r--)
  • 개인 키 : 0600(-rw-------)
ex) chmod 600 id_rsa

위와 같이 권한을 설정해 주지 않으면 원격 서버에 연결 했을 때 오류가 발생하며 접속이 허용되지 않는다.
더 자세한 권한 설정 방법은 아래 링크를 참고하자
https://nachwon.github.io/shell-chmod/

공개키를 이용한 ssh 접속

위에서 생성한 SSH 키를 이용해서 다른 서버에 접속할 때는 접속할려는 서버 계정의 홈 디렉토리 아래에 .ssh/authorized_keys 파일을 생성한 후 위에서 생성한 공개키 스트링을 넣어두면 된다.

# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADDQABAAABAQCgatkuBNq72JGIR59+D5Xh271RcLgH+C... root@aaa

이 공개키값을 카피 후 접속할려는 서버의 ~/.ssh/authorized_keys 파일에 카피합니다.

# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADDQABAAABAQCgatkuBNq72JGIR59+D5Xh271RcLgH+C... root@aaa

이 후부터는 원격 서버에 접속시에 현재 서버의 개인키와 원격 서버의 공개키값이 조합되어 암호 없이 ssh 접속이 가능하다!!!

# ssh -p 14101 sshtest.fun25.co.kr
Last login: Fri Apr 10 15:37:18 2015 from 211.239.124.233
root@sshtest.fun25.co.kr:~#

보안 상이 이유로 ssh 서버에 위의 키 방식만 가능하게 하고 암호를 통한 접속은 불가능하도록 할려면 아래와 같이 sshd 설정을 하면 됩니다.

# vi /etc/ssh/sshd_config

sshd 설정파일을 편집해서 아래 옵션을 추가하면 암호를 통한 접속은 불가능함

PermitRootLogin without-password

마지막으로 ssh 서비스를 리로딩하면 끝

# service ssh reload

연결테스트

본인의 github 레포지토리 중 하나를 clone해보면서 ssh key가 잘 등록되었는지 테스트해보자!

profile
HUGE FAN OF Freecodecamp, nomadcoder, web3 and python 까먹을까봐, 즐겨찾기에 넣어둔 블로그가 사라질까봐

0개의 댓글