TeamLog🦝/server🔗

SSH

pigonhe 2024. 11. 17. 02:09

SSH (Secure Shell)

: 두 컴퓨터 간의 암호화된 연결을 할 수 있게 해주는 프로토콜

 

key

: 서버에 접속할때 비밀번호 대신 key를 제출하는 방식. 비밀번호보다 높은 수준의 보안요건을 필요로 할때 사용.

 

동작 방식

SSH key는 공개키(public key) 와 비공개키(private key)로 이루어진다.

키를 생성하면 공개키와 비공개키가 만들어지고 이중에 비공개키는 로컬머신에, 공개키는 원격 머신에 위치한다.

로컬 머신은 SSH Client, 원격 머신은 SSH Server 가 설치된 컴퓨터를 의미한다.

SSH 접속을 시도하면 SSH Clinet 가 로컬 머신의 비공개키와 원격 머신의 공개키를 비교해서 둘이 일치하는지 확인한다.

 

간단히 말하면

SSH의 Key는 두 가지가 있음.

Public Key는 외부에 공개되어도 되고, 데이터 암호화에 사용

Private Key는 외부에 공개되어서는 안되고, 데이터 복호화에 사용

 

>> 이러한 암호화 기능 덕분에 SSH는 외부에서 통신 내용을 Sniffing 해도 암호화된 문자열로 보여지게 됨

 

기능

Authentication : Clinet-Server 보안 채널이 설정되고, 서버가 먼저 인증 된 후, Client를 인증하기 위한 소프트웨어 호출함

Compression : 데이터를 전송 전에 압축함

Encryption : 압축된 데이터를 대칭키 알고리즘으로 암호화하여 전송함


실습

* 설정 파일을 열때는 관리자 모드로 들어가주어야함 (sudo su)

vi /etc/ssh/sshd_config

 

ssh 설정 파일

# 주요 옵션

더보기

Port : ssh가 사용할 기본 포트 지정

PermitRootLogin : root 계정으로서 로그인 허용 여부 (yes : 허용/no : 차단)

PasswordAuthentication : 패스워드를 이용한 인증 허용 여부

AllowUsers / AllowGroups : 지정한 유저 또는 그룹만의 접속 가능 여부

Match : 여러 조건을 조합하여 특정 사용자나 그룹에 대한 설정을 적용할 수 있음

 

파일 수정 후 적용

:  수정 후 수정 사항을 적용하기 위해서는 ssh 서비스를 재시작해주어야 적용됨

systemctl restart sshd

 

서비스 상태 확인

systemctl status sshd

 

서비스 시작, 중지

systemctl start sshd
systemctl stop sshd

 

SSH 키 생성

ssh-keygen -t rsa -b 4096 -C "SSH_KEY"

 

: RSA 방식의 SSH 키를 생성하는 명령어이다.

ssh-kengen : SSH 키를 생성하고 관리하며, 변환하는 명령어

-t rsa : RSA 알고리즘을 사용하여 키를 생성하라는 의미

-B 4096 : 키의 길이를 4096으로 설정 (기본적으로 RSA 키는 2048비트로 생성되지만 보안강화를 위해 4096비트로 설정)

-C "SSH_KEY" : 키를 붙일 주석을 지정하는 옵션. "SSH_KEY"라는 주석을 추가한 것


구성 문제

1) 유저 user01 | 포트 2222 | root 로그인 : X

* 기울임꼴로 쓰여진 부분은 파일에서 수정하는 부분임

 

사용자 생성

sudo adduser user01

 

user01 만 접속할 수 있도록 허용

AllowUwers user01

 

포트 변경

Port 2222

 

root 로그인 비활성화 (root 사용자가 ssh로 접속하지 못하도록 설정)

PermitRootLogin no

 

변경 사항을 적용하려면 ssh 서비스를 재시작해야한다.

sudo systemctl restart sshd

2) 유저 user02 | 유저 ip 192.168.56.1 | 포트 22022 | 비밀번호로 로그인 안되게

* 기울임꼴로 쓰여진 부분은 파일에서 수정하는 부분임

 

 

사용자 생성

sudo adduser user02

 

포트 변경

Port 22022

 

비밀번호 로그인 비활성화

PasswordAuthentication no

 

허용 사용자 및 ip 설정

AllowUwers user02@192.168.56.1

 

챌린지-응답 인증 비활성화

ChallengeResponseAuthentication no

 

공개 키 기반 인증 활성화

PubkeyAuthenticaion yes

 

root 계정으로 ssh 접속 비활성화

PermitRootLogin no

 

ssh 키 기반 인증 설정

 

1. 로컬에서 키 생성 (ssh-keygen -t rsa -b 4096 -C "SSH_KEY")

ssh-keygen -t rsa -b 4096 -C "user02_key"

 

2. 공개 키를 서버로 복사 (ssh-copy-id -i ~/.ssh/id_rsa.pub <유저이름>@<서버 ip 주소>)

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22022 user02@192.168.56.1 

 

ssh 서비스 재시작

sudo systemctl restart sshd

 

최종 테스트

ssh user02@192.168.56.1 -p 22022

 >> 비밀번호가 아닌 ssh 키를 사용하여 접속된다

 

 

# 포트 오류 정리

더보기

원격 서버의 포트 22022에서 ssh 연결이 이루어지지 않는 문제를 의미한다

"Connection refused"는 원격 서버에서 해당 포트가 열려 있지 않거나 ssh 데몬이 해당 포트에서 동작하지 않는 경우에 발생한다.

 

1. 원격 서버의 ssh 설정을 확인

1) vi /etc/ssh/sshd_config 파일에서 포트가 제대로 설정되어 있는지 확인한다

2) 설정을 확인 또는 수정한 후 ssh 서비스를 재시작한다.

sudo systemctl restart sshd

 

2. 포트가 방화벽에서 열려 있는지 확인

1) 방화벽 상태 확인

sudo ufw status

 

sudo ip tables -L (필요한 경우)

 

2) 22022 포트 열기 (방화벽에서 포트를 허용한다)

sudo ufw allow 22022/tcp

sudo ufw reload

 

sudo iptables -A INPUT -p tcp --dport 22022 -j ACCEPT

sudo iptables-save

방화벽은 비활성화 된 상태이며 iptables 에서 22022가 허용되어 있음 > 방화벽 문제 아님

3. ssh 데몬이 22022 포트를 리스닝 중인지 확인

sudo ss -tuln | grep 22022

출력에 22022가 표시되기 때문에 이 문제도 아닌듯...

4. ssh 데몬 상태 확인

sudo systemctl status sshd

active 상태임 > 문제 없음

 

 5. 원격 서버 ip 확인

ip a

ssh 접속 시도시 사용할 ip는 10.0.2.15이고 192.168.56.1은 비활성 인터페이스에 설정된 ip 로 보임 >> 활성화 ㄱㄱ

 

1) enp0s8 인터페이스 활성화

sudo ip link set enp0s8 up

2) ip 주소 수동 할당

sudo ip addr add 192.168.56.1/24 dev enp0s8

 

확인 

ip a

인터페이스에 192.168.56.1이 할당됨

 

 

새로운 오류가 나타났다!!

 

>> 음 그냥 오류가 아니라 단순히 키가 이미 존재한다는 경고였음...

걍 사용하면 된다고 한다....

 

ssh 키가 제대로 동작하는지 확인하려면 ssh로 접속을 시도해보자!

ssh user02@192.168.56.1 -p 22022

 ssh 를 통해 원격 서버 (192.168.56.1, 포트 22022)에 접속되었으며 서버는 Ubuntu 24.04 LTS에서 실행 중임을 확인할 수 있다.

또한, 접속 후 서버의 기본 정보가 표시되고 있다.

>> ssh 키 기반 인증이 성공적으로 작동함. 원격 서버에 명령을 실행할 수 있음


3) 포트는 2202, 2022 두개 | 루트로 접근 안됨 | 기본적으로 키 기반 인증만 허용 

| 사용자 제한 - user03@<client ip>, user04는 비밀번호 접속가능, 이외 전부 비활성화

* 기울임꼴로 쓰여진 부분은 파일에서 수정하는 부분임

 

사용자 생성

sudo useradd user03
sudo useradd user04

 

user04만 비밀번호 인증 활성화

 

# 오류 발생

더보기
설정 파일에서 UsePAM 옵션이 Match 블록 내부에 들어갈 수 없다는 오류...

UsePAM 은 전역 설정으로만 사용할 수 있으며, 사용자별 Match블록 안에 넣을 수 없다고 한다...

 

>> 걍 지워줌

>> 또 에러 뜨길래 걍 위로 올려줌

전역 설정은 다 위로 올려줘야하나봄...
이렇게 해줌 ㅎㅎ

>> 여기에서 배운 점

설정 파일 테스트 명령어

sudo sshd -t

ssh 서비스 재시작

sudo systemctl restart sshd

 

방화벽 설정

sudo ufw allow 2202/tcp
sudo ufw allow 2022/tcp

 

테스트

1. user03 테스트 : 특정 ip 에서만 접속 가능한지 확인

ssh user03@192.168.56.1 -p 2202

 

네트워크 연결에 문제 있음 (이때는 192.168.56.17 로 ip를 설정해줬는데 .1로 바꾸고 서버 ip를 .17로 하기로 함...)

>> 수동 설정으로 해결

sudo ip addr add 192.168.56.17/24 dev enp0s8

 


 

여러 에러들이 발생함...

ping 확인 완료, 포트 연결에 문제 있는듯...

따로 공부해서 정리할 것

1. 키 기반 인증 확인 (공개키?...)

2. 방화벽 (ufw 가 뭘까?...) (netstat -tuln | grep 2202)

 

 

'TeamLog🦝 > server🔗' 카테고리의 다른 글

Nginx  (1) 2024.11.25
vi 기초 명령어  (2) 2024.11.17
netplan  (3) 2024.10.02
server DNS  (0) 2024.09.29