[Linux] SSH

728x90

SSH

암호화 키 종류

  • 대칭키 : 하나의 키로 암호화 & 복호화를 할 수 있다.(비밀키)
  • 비대칭키 : 개인키(private key), 공개키(public key) 가 있고, 개인키로 암호화하면 공개키로 복호화할 수 있고, 공개키로 암호화 하면 개인키로 복호화할 수 있다.

SSH 동작원리

SSH는 비대칭키 암호화 방식과 대칭키 암호화 알고리즘을 동시에 사용한다.

대칭키 알고리즘 : 데이터를 암호화 할 때 사용하는 키와 복호화 할때 사용하는 키가 같은 알고리즘으로, 사용되는 키는 비밀키다.

비대칭키 알고리즘 : 데이터를 암호화 하고 복호화 할때 사용하는 키가 다른 암호화 알고리즘 이다.

  • 공개키와 개인키
  • 공개키 : 외부에 공개된 키로 누구나 공개키를 가지고 있어도 된다. 공개키는 데이터를 암호화 하여 전달하며 공개키와 쌍으로 이루어진 개인키를 이용해 암호화된 데이터를 복호화 한다.
  • 개인키 : 키 생성자만 갖고있는 키. 공개키로 암호화 -> 개인키로 복호화
  1. SSH 접속
    SSH 서버의 공개키를 저장하기 위한 메세지가 출력
    Server(대기) & Client(접속)
  2. client 가 server 접속요청
  3. server가 client 공개키 전송
    서버의 공개키가 클라이언트에 저장되어 있지 않으면 SSH 서버의 공개키를 저장하기 위한 메세지가 출력된다.
  4. client : 비밀키 생성
    공개키를 저장하고 난 다음 Client는 대칭키 알고리즘을 사용해 암호화를 위한 비밀키를 생성한다.
  5. client : 비밀키 암호화 (서버의 공개키)
    이 비밀키를 다시 서버의 공개키로 암호화 하여 서버에게 전달한다.
  6. client : 비밀키 전송
  7. server : 비밀키 복호화 (서버의 개인키)
# 서버 세팅(고정 IP 세팅)
$ hostnamectl set-hostname server
$ nmcli con add con-name static9 ifname enp0s9 type ethernet ip4 192.168.56.150/24 gw4 192.168.56.1
$ nmcli con up static9
$ ip addr show enp0s9

# 클라이언트 세팅 (새로운 가상 머신 실행)
$ hostnamectl set-hostname client
$ nmcli con add con-name static9 ifname enp0s9 tyep ethernet ip4 192.168.56.200/24 gw4 192.168.56.1
$ nmcli con up static9
$ ip  addr show enp0s9

# ssh 로 접속
# 클라이언트에서 서버로 접속하기
$ ssh root@192.168.56.150
$ yes 
$ exit
$ ls -a 
.ssh 디렉토리가 생성된 것을 확인할 수 있고 해당 디렉토리에는 known_hosts 라는 파일이 있고 
해당 파일은 서버에서 받은 공개키가 들어있다.

# 서버 가상 머신으로 이동
$ less /etc/ssh/ssh_host_ecdsa_key 
해당 파일에는 서버의 공개키가 들어있다. 해당 공개키가 클라이언트의 .ssh/known_hosts 파일에 적힌
공개키와 똑같은 키 인 것을 확인할 수 있다. 
만약에 ssh_host_ecdsa_key 파일이 삭제됐을 경우에 서버에서 받은 공개키가 들어있는 다른 머신에서 접속할 경우
접속 오류가 난다. 왜냐하면 서버에 있는 공개키 파일이 삭제됐기 때문에 현재 로컬에 있는 공개키와 다르기 때문이다.
일단 클라이언트 단에 존재하는 공개키를 삭제한다. rm -rf .ssh/*
그리고 다시 ssh 로 접속한다.

SSH 접속 - 그냥접속

시스템에 원격으로 접속할때 기본적으로 사용자 아이디와 패스워드를 알고 있어야 한다.

SSH 접속 - 키기반 인증

사용자의 암호를 알고 있지 않아도 원격 접속 할 수 있는 인증방법이다.
키기반 인증을 위해 키를 등록하려면 해당 사용자의 패스워드를 알아야 한다.

키기반 인증 방식

클라이언트에서 생성한 공개키를 서버에 등록하여 서버에 원격 접속할 때 비밀번호 입력 없이 원격 접속할 수 있게 한다.

클라이언트 사용자에서 아래와 같은 명령어를 입력한다.

$ ssh-keygen : 키 기반 인증을 위한 공개키와 개인키 생성

$ ssh-copy-id [id]@[server ip address] : 클라이언트가 생성한 공개키를 서버에 등록하게 한다.

$ ssh [id]@[server ip address] ⇒ 비밀번호 입력 없이 서버에 원격 접속이 가능해진다.

ssh 보안 설정

/etc/ssh/sshd_config 데몬 설정 파일에서 ssh 보안 설정을 할 수 있다.

PermitRootLogin

비활성화 or yes : root 로그인을 허가하겠다

no : root 로의 로그인은 허가하지 않겠다.

without-password : 키기반 인증만 root 로그인을 허가하겠다.

PasswordAuthentication

비활성화 or yes : 패스워드 인증 방식 사용

no : 패스워드 인증 방식 사용하지 않고, 키기반 인증 방식만 사용한다.

ssh 실습

# client 에 cuser 생성하고 활성화 시키시오.

$ useradd cuser
$ passwd cuser

# server에 suser 생성하고 활성화 시키시오.

$ useradd suser
$ passwd suser

# cuser 에서 suser로 ssh 접속
# server : 192.168.56.150로 가정

$ ssh suser@192.168.56.150

# cuser 측에서 보관하고 있는 공개키(public key)와 suser가 보유한 공개키(public key) 내용 확인

# client
$ vi ~/.ssh/known_hosts

# server
$ vi /etc/ssh/ssh_host_ecdsa_key.pub

# server의 공개키와 개인키 삭제 후 sshd 재실행

# server
$ rm -f /etc/ssh/ssh_host*
$ ls /etc/ssh
$ systemctl restart sshd
$ ls /etc/ssh

# cuser 측에서 보관하고 있는 공개키(public key)와 server가 보유한 공개키(public key) 내용 확인

# client
$ vi ~/.ssh/known_hosts

# server
$ vi /etc/ssh/ssh_host_ecdsa_key.pub

내용이 일치 하지 않음

# client

$ ssh suser@192.168.56.150

접속거절

# cuser가 suser로 접속할 수 있도록 하시오.

$ rm ~/.ssh/known_hosts

$ ssh suser@192.168.56.150

server의 공개를 다시 받음.

# cuser가 suser로 암호없이 로그인 되도록 키인증방식으로 설정하시오.

# client

$ ssh-keygen
$ ssh-copy-id suser@192.168.56.150

# cuser에 server의 root 계정으로 접속 할 수 없도록 설정하시오.

# server

$ vi /etc/ssh/sshd_config

/PermitRoot 로 검색

PermitRootLongin  no로 변경
728x90