리눅스 SSH 접속시에 비밀번호가 아닌 공개키 (인증서)로만 로그인을 허용해보기! - Whitmem
리눅스 SSH 접속시에 비밀번호가 아닌 공개키 (인증서)로만 로그인을 허용해보기!
System
2024-06-26 20:54 게시 c20b20c9f3f61bc5309f

0
0
75
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
나는 여태껏 리눅스 운영체제의 외부 접근을 허용할 때 단순 외부 접근만을 차단하고 내부에서 비밀번호로 로그인을 할 수 있도록 구축하곤 했는데...... 비밀번호 로그인을 제법 권장하지 않는 분위기여서 인증서 지정 방법에 대해서 조금 알아보았다.
원래 같으면 위 방법 처럼 아이피 주소와 포트를 입력하고 사용자, 비밀번호만 알 수 있으면 바로 접속을 할 수 있기 때문에 아이디, 비밀번호가 잘못 전달되는 경우 상당히 위험하다! 여러분은 대략 10자리 정도 되는 아이디와 비밀번호에 서버의 목숨을 걸 건가요?!
아 물론 내 개인정보면 당하면 그만~이겠지만 서버의 중요 정보와 기술 정보 등 데이터가 대량으로 담긴 서버의 경우는 상당히 위험할 수 있다!
위 서버 같은 경우는 내 개인 git 레포지토리 서버인데, 중요 프로젝트만 150개 정도된다. 이 자료가 모두 해커의 손에 넘어가게 된다면....... 아 뭐 괜찮을지도
그래서 인증서/비대칭 암호 방법으로 로그인을 하는 것이 권장되는데, 이것도 여전히 암호의 역할을 수행하기도 하고, 개인키라는 파일 형태로 가진 비밀번호가 필요로하다!
공개키/비밀키 란
아니~~~ 잠깐만, 그러면 공개키는 뭐고 비밀키는 뭘까? 헷갈리자나~
공개키와 비밀키는 무엇이고 어떤 관계일까? 바로 음.. 남친여친 관계라고 생각하자! (와 비유 미쳤다.)커플은 서로를 증명해주고 서로임을 인증할 수 있는 존재이다.
서로가 서로임을 인증할 수 있는 수학적 원리가 존재하며 (소수)와 관련된다. 서로가 만들어낸 비밀 메시지를 상대만이 알 수 있다.
공개키와 비밀키는 한 쌍으로 존재하며 공개키로 감싼 내용은 비밀키로만 알 수 있고, 비밀키로 감싼 내용은 공개키로만 알 수 있다. 공개키나 개인키를 가지고 있지 않는한 대상을 신뢰하거나 복호 행위를 할 수 없음을 의미한다. (물론 비밀키만으로 공개키를 추출할 수는 있으나 여기서는 이해를 돕기 위해 상세한 내용은 제하였다.) 보통 공개키로 암호화하고 비밀키로 복호화하며, 비밀키로 암호화하고 공개키로 복호화하여 상대가 만들었음을 인증하는 것을 서명이라한다. 이러한 내용은 필자 홈페이지에 게시해둔 RSA 비대칭 암호화 원리에 대해서 알아보자!! 요기
결과적으로는 접속자 A가 비밀키&공개키를 쌍으로 생성하여, 공개키만 서버측에 최초 설치시 넘겨준다. 그러면 접속자 A는 앞으로 접속할 때 자기가 가지고 있는 비밀키로 인증해서 보내면 서버 측에서는 그 내용이 "정말 접속자 A 비밀키"로 만든 것인지 공개키로 검증한다! 검증에 통과하면 로그인을 성공하는 원리이다.
이 과정에서 비밀키에 또 다시 암호를 걸 수도 있으며, 그러면 더 안전한 비밀키 관리가 가능하게 된다. 접속자 A 측에서는 접속할 때 마다 다시 암호를 입력해서 원본 비밀키를 꺼내고 그 비밀키로 서명을 해야한다. (2중 보안!)
설정 방법
결과적으로 개인키와 공개키를 쌍으로 생성해서 클라이언트는 개인키/공개키를 모두 보관하고 서버측에는 공개키만 넘겨주면 된다. 클라이언트에서 키 쌍을 생성해서 서버쪽에 공개키를 넘겨주거나, 서버측에서 아예 키 쌍을 생성해서 개인 키를 다운로드 받는 방법 등이 있는데, 나는 그냥 서버에서 어차피 설정해야하니 서버에서 키 쌍을 만들고 키를 다운로드 받도록 하겠다!
우분투 서버 기준에서 ssh 가 설치되어 있다면, ssh-keygen 명령어를 사용할 수 있다.
ssh-keygen -t rsa -b 4096 -f key.key
키의 비트 강도를 4096비트로 지정하고, RSA 키 쌍을 만든다는 명령어이다.
명령어를 입력하면, passphrase를 입력하라고 뜨는데, 생성된 키 쌍 중 "비밀키"를 한 번더 암호화 할 암호를 입력하라는 것이다.
생성이 완료되면 key 파일과 pub 파일이 생성되는데 key 파일이 비밀키이고, pub이 공개키이다. 즉 key 파일을 다운로드 받고, pub 키를 서버에 등록해주면 된다. 그러면 접속자가 비밀키로 인증을 요청하면 서버에서 공개키로 검증하게 된다. nano 나 vi 커맨드로 생성된 pub 키를 열어보자
$vi key2.key.pub
ssh-rsa base64인코딩된_암호키 코멘트
순으로 공개키가 기록되어 있다. 이 파일을 이제 ssh에 등록해주기 위해서는 해당 인증서 로그인을 원하는 계정의 홈디렉터리 안에 있는 .ssh 폴더 내 authorized_keys 파일에 그대로 복붙해주면 된다.
지금보면 나 같은 경우 계정 whitmemit_*** 내에 .ssh 폴더 내에 authorized_keys 라는 파일이 있는 것을 볼 수 있다. 없으면 폴더와 파일을 각각 생성해주고 해당 폴더의 권한을 계정 권한으로 부여하자! 이미 있으면 건너뛰어도 된다.
chown -R 계정명:계정명 .ssh가존재하는경로
authorized_keys에 그대로 복붙해주면 다음과 같다.
그리고 이제 ssh 설정에서 공개 로그인을 활성화 해 주어야 한다. /etc/sshd/sshd_config 설정 파일을 열어준다
$sudo vi /etc/sshd/sshd_config
PubkeyAuthentication 설정을 yes로 활성화하고 주석을 해제한다. 그런 후 저장한다.
$sudo service sshd restart
그리고 마지막으로 sshd 서비스를 재시작한다. 그리고 서버측에서 개인키 (key)를 내려받는다!
접속 방법
그러면 이제 putty 등으로 접속할 때 인증서를 선택해서 접속을 해보자! 서버측에서 생성한 키 쌍 중 "비밀키"를 내려받았으면, 이 key 파일을 putty 에서 호환되는 키 파일로 변환을 해야한다. putty 가 설치된 디렉터리 안 "C:\Program Files\PuTTY\puttygen.exe"에 보면 puttygen.exe 이라는 프로그램이 있다. 해당 프로그램을 먼저 실행해준다~
창이 뜨면 Load 버튼을 눌러 서버에서 가져온 key 파일을 열어준다. 이 때 ppk 파일만 선택할 수 있도록 되어있으므로 All Files로 바꾸어 선택을 한다!
그러면 비밀 키를 생성할 때 건 암호를 입력하라고 뜬다. 입력을 해주면 로드가 성공적으로 완료되는뎅
여기서 Save private key 버튼을 눌러 ppk로 저장해준다. 그러면 비로소 파일.ppk가 저장되는데 이제 putty로 서버에 접속할 때 이 파일을 사용하면 되는 것 이다!
먼저 Putty를 열고, IP를 입력하고, 포트를 입력한다.
그런다음 Connection -> SSH -> Auth -> Credentials 메뉴에 들어가 Private key 경로를 방금 생성한 ppk로 지정해준다.
그리고 접속을 진행한다.
이제 인증서를 적용한 계정을 입력하면 "Authenticating with public key..."가 나오고 인증서에서 건 암호를 입력해주면 인증서만으로 서버에 접속을 성공함을 볼 수 있다!
비밀번호 인증 차단
이제 마지막으로 인증서 로그인을 성공했으나 비밀번호만으로 로그인하는 행위를 차단해야 한다. 지금은 비밀번호로도 로그인할 수 있구 공개키 로그인도 가능한 상황이다. 마찬가지로 /etc/ssh/sshd_config 편집에 들어가서 비밀번호 로그인을 No로 변경하고 서비스를 다시 시작해주면 된다.
$sudo vi /etc/ssh/sshd_config $sudo service sshd restart
그러면 이제 인증서 없는 일반 로그인은 접근 거부됨을 확인할 수 있다!
인증서가 있더라도 해당 등록된 계정이 아니면 로그인 실패함을 알 수 있다~
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.