IaC/Ansible

SSH 인증 방식

nayoungs 2022. 4. 12. 22:01
728x90

📌INDEX



✔️ SSH 파일

/etc/ssh/<Key_Pair>

  • 서버의 키 쌍 : public키, private키

 

/etc/ssh/ssh_config

  • ssh 서비스 설정파일(클라이언트)

 

/etc/ssh/sshd_config

  • sshd 서비스 설정파일(서버)
  • 패스워드 인증방식 비활성화가 default
PasswordAuthentication no
  • 키 기반 인증방식은 활성화가 default
GSSAPIAuthentication yes

 

~/.ssh/<Key_Pair>

  • Client(계정)의 키 쌍

 

~/.ssh/known_hosts

  • 접속했던 호스트를 기록(핑거프린트)
  • 한번 기록되고 나면 이후 접속할 때 물어보지 않음
  • 계정을 바꿔서 접속하면 다시 물어봄 -> 홈 디렉토리가 바뀌기 때문

 

~/.ssh/authorized_keys

  • 상대방의 공개키를 저장

 

~/.ssh/config

  • ssh 로그인 시 옵션을 사전 세팅
  • 등록해놓으면 window에서 ssh 명령을 통해 매우 간편하게 접속
  • 예시
Host controller
    HostName 192.168.100.10
    User vagrant
    IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\controller\virtualbox\private_key

Host node1
    HostName 192.168.100.11
    User vagrant
    IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\node1\virtualbox\private_key

Host node2
    HostName 192.168.100.12
    User vagrant
    IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\node2\virtualbox\private_key
ssh controller
ssh node1
ssh node2
  • 파일 수정 후에는 변경사항이 반영되도록 sshd 서비스 재시작
sudo systemctl restart sshd



✔️ 패스워드 기반 SSH 인증

A(Client) ---SSH---> B(Server)

 

1. A는 B의 공개키 수령

  • /etc/ssh/ssh_host_<Algorithm>.pub
  • Algoritm
    • RSA
    • DSA
    • ECDSA

2. (B 시스템 최초 접속 시) A 시스템 사용자에게 B의 공개키(지문)이 맞는지 확인

3. A의 ~/.ssh/known_hosts에 B의 공개키 등록

4. ID/PW 인증



✔️ 키 기반 SSH 인증

A(Client) ---SSH---> B(Server)

 

1. A에서 (인증용) 키 쌍 생성

  • ssh-keygen
    • ~/.ssh/id_rsa: 개인키
    • ~/.ssh/id_rsa.pub: 공개키

2. B에 A의 공개키를 등록

  • B의 ~/.ssh/authorized_keys에 A의 공개키 등록
  • EC2 인스턴스 : A에서 지정한 A의 공개키 등록
  • BM/VM : ssh-copy-id 명령을 통해 공개키 복사
    • B에 패스워드 인증방식이 활성화되어있어야함

3. (B 시스템에 최초 접속시) A 시스템의 사용자에게 B의 공개키(지문) 맞는지 확인

4. A의 ~/.ssh/known_hosts 파일에 B의 공개키 등록

  • B의 IP/Domain
  • B의 공개키

5. A의 개인키로 인증

 

 

기본 로그인 사용자

  • Amazon Linux: ec2-user
  • Ubuntu: ubuntu
  • Debian: debian
  • Centos: centos
  • RHEL: cloud-user
  • vagrant: vagrant
  • ...



✔️ SSH 키 생성

  • ssh-keygen [옵션]
  • ssh key를 생성, 관리 및 변경하는 명령어
  • private 키는 default로 ~/.ssh/id_rsa 생성
    • public 키는 같은 위치에 id_rsa.pub로 생성
  • 옵션이 없으면 키를 생성
    • ~/.ssh/id_<Algorithm> 키 생성
  • 옵션
    • -t : (type) 알고리즘을 지정
    • -f : (file) 키 파일의 파일 이름 지정
    • -l : (list) 지정한 공개 키 파일의 지문을 표시
    • -b : (bit) 키의 크기 지정
      • default : 2048
      • 크기를 늘릴 수록 보안이 강화됨
  • 생성 후에 passphrase를 설정하라고함
    • 보안을 위해서 설정하는 것이 좋음

 

예시

  • ecdsa 알고리즘의 키쌍 생성
ssh-keygen -t ecdsa
  • (서버의)/etc/ssh/ssh_host_ecdsa_key.pub 공개키 지문 확인
    • 미리 준비된 서버의 경우 이렇게 지문을 확인하는 것이 best
    • But, EC2 인스턴스의 경우 만들어질 때 key가 생성되기 때문에 미리 확인할 방법이 없음
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub



✔️ SSH 키 미리 받기

  • ssh-keyscan [옵션] [대상IP]
  • 대상의 공개키를 미리 받아볼 수 있는 명령어
  • 맹점 : 네트워크를 통해 전달받는 것이기 때문에 중간에 해커가 가로채서 잘못될 정보를 줄 수도 있음
  • 옵션
    • -t : 알고리즘 타입 지정해서 확인

 

예시

  • 서버(IP)의 rsa 알고리즘의 공개키 확인
ssh-keyscan -t rsa 192.168.100.11
  • 파이프라인(|)을 활용하여, 서버(IP)의 핑커프린트(지문) 바로 확인
    • 파이프라인 앞 명령의 출력이 파이프라인 뒤 '-'로 들어감
ssh-keyscan -t ecdsa 192.168.100.11 | ssh-keygen -l -f -
  • 미리 서버의 공개키 known_hosts에 미리 등록하기
    • 핑거프린트를 물어보지 않음
    • but, 등록해도 서버가 암호인증(sshd_config)을 활성화해둬야 접속됨
      • 키를 등록하기 위해서는 암호 인증이 가능해야함
ssh-keyscan -t ecdsa 192.168.100.11 >> ~/.ssh/Known_hosts
ssh-keyscan -t ecdsa 192.168.100.12 >> ~/.ssh/known_hosts



✔️ 서버에 키 등록

  • ssh-copy-id [대상 IP]
  • 클라이언트(Client)의 공개키가 서버의 ~/.ssh/authorized_keys에 등록됨
  • 등록 후에는 패스워드를 물어보지 않음
ssh-copy-id 192.168.100.11
  • 계정을 지정해주지 않으면 클라이언트의 계정을 그대로 사용
  • 명확하게 하기 위해서는 계정을 지정해주는 것이 좋음
ssh-copy-id vagrant@192.168.100.11



✔️ SSH 접속

  • ssh로 접속할 때 계정을 지정하지 않으면, 현재 클라이언트의 계정을 그대로 사용
  • 서버에 접속할 때, 계정의 패스워드를 물어봄
  • 계정을 바꿔서 접속하면 핑거프린트 다시 물어봄
    • 홈 디렉토리가 바뀌기 때문

 

Windows -> Vagrant SSH 접근

  • vagrant를 이용하면 자동으로 키 기반 인증
    • .vagrant 파일은 절대 수동으로 변경,조작,삭제하면 안됨
    • 키 위치(클라이언트의 키) : .vagrant/machines/[vm명]/virtualbox/private_key
    • 아래 두개의 명령어는 동일한 명령어 : vagrant가 간편하게 처리해주는 것
vagrant ssh controller
ssh -i .\vagrant\machines\controller\virtualbox\private_key vagrant@192.168.100.10

 

 

참고) 만약 ssh 키가 노출, 유출된 경우 서버쪽 키 파일을 모두 지우고 재부팅하면 키 파일들 새롭게 만들어짐

728x90