이전 포스트에서 잠깐 SHH의 동작방식에 대해 설명한 적이 있습니다. 오늘은 SSH를 사용하여 EC2에 접속해보려합니다.
SSH에서는 대칭키 방식과 비대칭키 방식을 모두 사용하여 인증과 암호화를 하게 됩니다. 비대칭키를 통해서 서버 인증과 사용자 인증을 하고, 대칭키(세션키)를 통해 데이터를 암호화 합니다.
여기서 대칭키는 동일 키값으로 암호화와 복호화를 하는 방식이고, 비대칭키 방식은 암호화와 복호화를 서로 다른 키를 사용하는 방식을 말합니다.
1. 비대칭키 생성
EC2 인스턴스를 생성할 시, 비대칭키를 생성하는 과정이 나옵니다.
여기서는 Key pair name 값을 입력하고 Download Key Pair 선택하면, 비밀키가 웹브라우저 상에서 PC로 다운로드 됩니다. HTTPS로 암호화하여 내려받았기 때문에 중간에 해킹될 우려는 없습니다. 이 키를 잘 보관하여 서버 접속 시에 사용합니다.
AWS에서는 서버에서 비밀키를 생성해 클라이언트에 전달해 주고, 공개키는 자체적으로 EC2 서버에 있는 .ssh/authorized_keys에 저장하여 생성합니다.
2. 해당 인스턴스의 보안 그룹은 SHH를 허용한 상태여야합니다.
3. 생성된 인스턴스에 원격접속을 시도하기 위해 연결 탭으로 들어갑니다.
PEM 파일이 400 Permission을 가지고 있지 않으면 에러를 발생시키기 때문에 위에 나온 대로 chmod 명령어를 수행하여 Permission을 400으로 변경을 해줍니다.
그러고 나서 ssh 명령어로 접속을 하면 ECDSA key fingerprint 관련 내용이 나오는데,
yes를 선택하게 되면 이 과정에서 서버 인증에서 사용할 공개키를 서버로부터 내려받아 클라이언트에 있는 .ssh/known_hosts 파일에 공개키를 기록합니다.
접속되었습니다.
서버인증과 사용자 인증이 거의 동시에 진행이 완료되었습니다. ssh 접속과정에서는 확인할 수는 없지만, 내부적으로 세션키(대칭키)를 생성하여 서로 주고받게 되고, 세션 키를 사용하여 데이터를 암호화해서 통신하게 되는 것입니다.
마지막으로 서버 인증과 사용자 인증에서 복사된 공개키가 서버와 클라이언트에 잘 저장이 되었는지 확인해보겠습니다.
1. EC2 서버 공개키 체크
서버의 authorized_keys 파일 내용을 보면 사용자가 등록해주지 않았지만, AWS에서 EC2 생성 과정에 자동으로 등록되었다는 알 수 있습니다.
2. 클라이언트 공개키 체크
아래는 클라이언트에서 known_hosts 파일 내용을 확인한 결과입니다. 서버의 공개키가 저장된 것을 확인할 수 있습니다.