SSH-KeyPair(Private/Public)
SSH는 Telnet과 동일한 목적인 원격지(서버, 호스트 등)에 접속하여 시스템 제어를 하기위한 도구로,
기존 telnet, rlogin, rsh .. 등의 원격 접속 프로토콜들의 취약점을 보완하여 설계된 보안기능이 강화된 원격 접속 프로토콜로,
클라이언트와 서버가 주고받는 내용은 암호화되어 전송된다.
원격지 호스트의 크레덴셜(Credential)을 이용한 로그온이 기본적으로 가능하나
일반적인 비밀번호(Passphrase)보다 강화된 보안방식이 요구되거나, 특수목적(PSSH) 등의 이유로
SSH Key를 이용한 원격 접속 방식이 요구된다.
SSH Key는 대부분 강력한 암호화 알고리즘인 RSA 방식으로 생성하며
SSH-KeyPair 생성 시 Private(개인 키), Public Key(공개 키)가 한 쌍으로 동시에
'~/.ssh/' 경로 밑에 개인 키와 공개 키가 생성된다.
위와 같은 경로에 생성된다.
(파일 명 'rsa'=Encryption Algorithm)
클라이언트가 키 페어를 생성하여 서버의 .ssh/authorized_keys(Key Chain)에 등록하여
원격 접속 시 서버의 Key Chain에 저장된 Public Key와 클라이언트의 Private Key를 대조하여 인증받는 방식이 주로 사용된다.
이 키를 이용하여 원격지 호스트의 패스워드를 입력하지 않고 오직 키를 이용한 접속 설정 또한 가능하다.
* 해당 실습에는 Ubuntu(.130), CentOS(.140), Windows7(.147) 총 3대의 가상머신이 사용됨.
** Windows7 시스템에서는 키 생성과 원격접속의 편의성을 위하여 'putty', 'puttygen' 프로그램을 사용함
▼ Putty 다운로드 링크
https://www.puttygen.com/download-putty
● Keygen 실습
# CentOS(.140)에서 ssh 서비스와 방화벽 활성화
sudo yum install -y openssh-server
sudo systemctl enable sshd && sudo systemctl start sshd
# SSH(Port 22)방화벽 설정
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --reload
# 위의 두 항목 설정완료 후 포트 개방 상태와 서비스 실행여부를 확인
sudo systemctl status sshd
sudo ss -nltp | grep ssh


▼ Windows7(.147)머신에서

앞에서 다운 받아놓은 Putty를 실행하여
키가 생성되기 전 크레덴셜을 인증하는 방식으로 원격접속 가능 여부를 확인

Generate 버튼을 클릭하여 SSH-Key Pair 생성을 진행한다.

진행 바 상단에 기재되어 있듯 공백에 마우스를 이리저리 움직이며
IRQ(Interrupt ReQeust)를 활용해 키 생성에 CPU가 적극적으로 사용될 수 있도록 해준다.
(속도향상)

블러처리 된 부분의 전체문장을 복사하여 원격으로 접속하고자하는
서버에 복사하기 위해 임의의 텍스트 파일로 저장한 뒤,
중간 부분에 보이는 'Key passphrase'를 입력하여 키 체인을 이용한 인증 시
사용 될 패스워드를 설정해주는데, 이 부분을 비워두면 일체의 비밀번호 없이
오로지 키로만 인증되어 연결 요청(ssh ClientUser@ServerIP) 시
별도의 인증과정 없이 접속이 가능하게 된다.
* 본 실습에서는 키 패스워드를 사용하는 것으로 진행
마지막으로 우측 하단에 있는 'Save Private Key' 버튼을 클릭해
개인키를 저장해줄 위치를 지정해준다.
Windows7에서 원격지에 Key로 접속하기 위한 준비는 완료
▼ SSH Server 역할인 CentOS(.140)머신에 접속

* Windows ↔︎ Linux간 공개 키 파일 이동 시 Putty를 활용한 scp, 혹은 SAMBA를 통해서 가능
** Linux ↔︎ Linux 간 공개 키 파일 이동 시 'ssh-copy-id ~' 커맨드를 통해 가능
[User]/.ssh 하위에 authorized_kyes 라는 파일을 생성하여 Windows7(.147)의 공개 키를
위의 그림과 같이 복사하여 붙여 넣어준다.

"vim /etc/ssh/sshd_conifg"
ssh 메인 설정파일을 열람 후 'PubKeyAuthentication yes' 부분의 주석 제거 후,
인증 시 참조될 'Authorized Key File(키 체인)'이 저장되어 있는 경로가 동일한지 확인

원격 접속 시 키 체인을 이용한 접속인지 쉽게 확인해볼 수 있도록
'PasswordAuthentication(비밀번호 인증)'을 비활성화
▼ 다시 Windows7 머신으로 돌아와서

앞에서 생성한 Windows7(.140)의 개인키의 경로를 지정해준다.

동일하게 SSH 접속을 요청 시 개인 키 생성시에 입력했던 패스워드를 입력해주면,
키를 이용한 인증이 완료되어 정상적으로 SSH 서버머신에 접속한 모습을 볼 수 있다.
▼ Ubuntu(.130)의 Key 생성과정

우분투에서는 putty가 아닌 ssh-client 패키지를 활용하여 키를 생성하였다.
"sudo apt isntall -y openssh-client" 명령어로 클라이언트 패키지를 설치 후
구성요소에 포함 되어있는 ssh-keygen 도구로 rsa 타입의 키를 생성해준다.
(이 때 PassPhrase를 별도로 사용하지 않는다면 명령어 뒷 부분에 -P "" 옵션을 추가)

키 생성 후 해당 경로를 확인해보면 'id_rsa(개인 키)'와 'id_rsa.pub(공개 키)'가 생성된 것을 확인할 수 있다.
(rsa는 키 생성 시 사용한 암호화 알고리즘을 뜻함)
옆에 보이는 'known_hosts' 파일은 외부 머신들과 ssh 세션 연결 시 생성되는 파일이다.


여기에서도 마찬가지로 개인 키 생성 시 등록했던 패스워드로 개인 키 인증을 승인한다.
(원격지 호스트의 패스워드를 입력하는 것이 아니므로 혼동에 주의)
'System_Security' 카테고리의 다른 글
[Security]Digital_Certificate (0) | 2023.02.12 |
---|---|
[Security]TrueCrypt (0) | 2023.02.02 |
[Security]HTTPS (0) | 2023.01.31 |
[Security]chroot (0) | 2023.01.27 |
[Security]Snort (0) | 2023.01.26 |