Search

SSH

태그
개념
실습
생성 일시
2022/11/17 13:01

SSH란?

SSH(Secured SHell)은 원격 컴퓨터에 접속하기 위해 사용 되는 프로토콜 이며, 통신할 때 아이디, 비밀번호 대신 공개 ssh key를 전송하여 보안 상으로 안전하게 통신하기 위한 프로토콜이다. ssh key를 생성하면 공개 키(Public key)와 비공개 키(Private Key)가 한쌍으로 생성된다. 공개 키를 통신하고자 하는 서버에 저장하고, 클라이언트가 통신을 시도할 때 서버에 저장된 공개 키가 클라이언트 로컬에 저장된 비공개 키와 한 쌍인지 확인하여 통신한다.

SSH 인증 절차

서버 인증 절차 접속 하려는 서버가 올바른 서버인지 검증하고, 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키를 생성하는 과정
1.
서버는 접속 요청을 받으면 그때마다 서버의 공개키를 클라이언트에 전달하는데, 클라이언트는 이를 확인하여 원하던 서버에 올바르게 접속 시도를 하고 있는지 확인한다. 최초의 접속인 경우에는 전달 받은 공개키를 클라이언트의 로컬 파일(.ssh/known_hosts)에 따로 저장한다.
클라이언트 인증 절차 클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증하는 과정
1.
최초 접속 시에는 클라이언트에 생성되어 있는(혹은 생성한) 공개키와 개인키 중 공개키와 key ID를 서버에 전달하여 서버의 로컬 파일(.ssh/authorized_keys)에 저장한다.
2.
위 절차가 진행된 후에, 접속을 시도한다면 클라이언트에서 생성되어 있는 key pair의 ID를 서버로 전달하여 서버의 로컬에 저장되어 있는지 확인한다.
3.
해당 ID가 서버의 로컬 내에 존재한다면 난수를 생성해 저장된 공개키 값을 통해 암호화 후 클라이언트로 전송한다.
4.
클라이언트에서 전달 받은 암호화 된 값을 개인키를 통해 복호화하고, 복호화된 난수를 이용해 MD5 해시 값을 계산하여 서버로 다시 전송한다.
5.
서버에서는 생성했던 난수를 통해 MD5 해시 값을 구하고, 클라이언트에서 전달받은 MD5 해시 값과 비교하여 같다면 인증을 완료한다.
MD5 임의의 길이의 값을 입력받아서 128비트 길이의 해시값을 출력하는 알고리즘

Linux에서 SSH 설정하기

1.
apt search openssh-server 명령어로 openssh 설치되어 있는지 확인. 없다면 apt install open ssh-server 명령어로 설치
2.
systemctl status ssh 명령어를 통해 openssh 실행여부와 사용 포트 확인
3.
sudo vim /etc/ssh/sshd_config 명령어를 통해 ssh설정을 변경
ssh_configsshd_config ssh_configclient측일 때 설정, sshd_configserver측일 때 설정
4.
PermitRootLogin 부분을 no로 바꾼다.
5.
sudo systemctl restart ssh로 재시작하여 설정 적용

외부 환경에서 SSH로 가상 환경에 접속하기(서버 인증)

1.
서버에서 openssh 설치 여부 확인
2.
가상 환경에서 port forwarding으로 Guest IP에 가상 환경 IP(hostname -I로 확인), Guest port에 ufw로 allow 설정한 port 번호, Host IP는 127.0.0.1 (localhost), Host port는 사용할 port 번호 입력
3.
외부 shell 환경에서 ssh <가상 환경 login ID>@<Host IP> -p <Host port 번호> 입력하여 접속

SSH로 비밀번호 없이 접속하기(클라이언트 인증)

1.
클라이언트에서 ssh key pair 확인(~/.ssh/ 디렉토리 내 id_rsa, id_ras.pub 확인). 없다면 ssh-keygen -t rsa 명령어로 키 생성
2.
ssh-copy-id <USER>@<remote-host> -p <port 번호> 명령어를 통해 서버에 클라이언트의 공개키와 ID 전송(만약 ssh 키가 위의 기본경로에 없다면 -i 옵션으로 ssh 키가 있는 디렉토리 지정 / 예시 : ssh-copy-id -i /home/test/key/key.pub lee@192.168.0.15)
3.
ssh <USER>@<Host ip> -p <port 번호>을 통해 가상 환경 접속(만약 키가 다른 위치에 있다면 -i 옵션 사용 / 예시 : ssh -i /home/test/key/key.pub lee@192.168.0.15)
4.
위 과정을 마치면 가상환경에 접속 시 ssh 공개키를 통해 인증 후 통신하기 때문에 따로 비밀번호가 필요하지 않게 된다.