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