Public Key로 SSH 연결하기

Public Key로 SSH 연결하기

오늘은 SSH 연결 방식을 바꾸어 보려고 합니다.

결론


ssh 연결 시 Pem 파일이 필요하였다면, 이제부터는 인스턴스 별 사용자 관리 및 Pem 파일 없이도 접근이 가능하도록 설계하였습니다.


Public-Private 구조

AWS는 공개 키 방식을 서버(Private) - 개인(Public) 채택하고 있습니다.

그 결과, EC2 인스턴스나, RDS 접근 시 매번 Pem 파일을 필수로 가지고 있어야 연결이 가능합니다.

회사에 새로운 분이 들어오시면 pem 파일을 공유해야 접속할 수 있다는 불편함 점도 있습니다.

1
$ ssh -i pem user@ec2-ip

문득, 위 방식을 서버에 내 Public 정보를 가지고 연결하도록 만들면 되지 않을까? 싶어 검색하게 되었습니다.

Instance는 퍼블릭 키로만 접속 가능한다고 되어있던 도중, 블로그를 보게 되었고 PEM 파일 없이 사용자들을 컨트롤 할 수 있게 되었습니다.

특히, 인스턴스 사용자 정보에 따라 사용자 연결을 설정할 수 있도록 구성하였습니다.

1. AWS EC2 인스턴스 띄우기


  • 간단하게 테스트 용도로 사용할 것이기 때문에 리소스를 최소 사양, Linux OS를 선택하였습니다.
  • EC2 Key pair에서 임의의 테스트 키를 발급하였습니다.

2. 본인의 public key 정보 찾기


  • 일반적으로 id_rsa.pub 혹은 authorized_keys로 본인의 public key 정보를 가지고 있다.
  • 저는 authorized_keys 파일의 public key가 있었습니다.
  • key 값 정보를 저장해둡니다.
1
2
3
4
5
6
7
$ ls ~/.ssh/

# public key가 존재하지 않는다면 실행
$ ssh-keygen -t rsa

# 차후에 Key 정보를 가져 사용할 예정
$ cat ~/.ssh/authorized_keys

3. 인스턴스 사용자 퍼블릭 키 추가하기


  • AWS 공식 문서를 보면 인스턴스는 최소 하나의 Public 키를 가지고 있다고 되어 있습니다. (authorized_keys)
  • 하지만, 최초 인스턴스 연결 시에만 pem 파일이 필요하고 이후에는 authorized_keys에 사용자들의 Public 키를 등록하여 사용할 예정입니다.
  • ~/.ssh/authorized_keys 에 위에서 얻은 사용자들의 public key 값을 추가하여 줍니다.
  • 주의해야하는 점이 인스턴스에 접속한 유저 별로 authorized_keys를 달리 설정이 가능합니다.
  • 그렇지 않으면, root 유저는 접속이 가능한데 다른 유저로는 접속이 불가능한 기이한 상황이 나올 수 있습니다.
  • ssh 관련 설정값은 sshd_config에 저장되어 있습니다.
1
2
3
4
5
$ sudo vi ~/.ssh/authorized_keys
# ssh-rsa ~ 추가

# ssh config 정보
$ sudo cat /etc/ssh/sshd_config
1
$ ssh user@ec2-ip

4. 모든 유저에게 적용하기


  • 서비스가 커지다보면, 모든 유저 별로 authorized_keys 를 다르게 설정하는게 코스트가 되어 다루기 어렵게 될 거 같아 통일하여 처리해보려고 합니다.
  • sshd 환경 설정 중 바라볼 설정 파일 값(AuthorizedKeysFile) 을 아래와 같이 수정하여 줍니다.
  • chmod를 644로 주지 않으면, root 유저를 제외한 나머지 유저들에 대해서 permission 에러가 발생합니다. 때문에 파일 자체 권한을 전체 유저에게 주는 방안을 택하였습니다.
1
2
3
4
5
6
7
8
9
$ cd /etc/ssh
$ echo 사용자 public key 정보들 > all_users_authorized_keys 

$ sudo vi /etc/ssh/sshd_config
AuthorizedKeysFile /etc/ssh/all_users_authorized_keys

$ chmod 644 /etc/ssh/all_users_authorized_keys

$ ssh user@ec2-ip

2023-09-20-6-54-30