본문 바로가기

지식인/리눅스 :: Linux

[리눅스] OpenSSH 설치 가이드

개요

이 문서는 Debian 시스템에서 OpenSSH 서버와 클라이언트를 설치하고 설정하는 방법을 설명합니다.


사전 준비

시스템 업데이트

설치 전에 시스템 패키지를 최신 상태로 업데이트합니다.

sudo apt update
sudo apt upgrade -y

OpenSSH 설치

1. SSH 서버 설치

sudo apt install openssh-server -y

2. SSH 클라이언트 설치 (선택사항)

대부분의 Debian 시스템에는 기본으로 설치되어 있습니다.

sudo apt install openssh-client -y

3. 설치 확인

# SSH 버전 확인
ssh -V

# SSH 서버 데몬 버전 확인
sshd -V

서비스 관리

기본 서비스 명령어

# 서비스 상태 확인
sudo systemctl status ssh

# 서비스 시작
sudo systemctl start ssh

# 서비스 중지
sudo systemctl stop ssh

# 서비스 재시작
sudo systemctl restart ssh

# 서비스 다시 로드 (설정 변경 시)
sudo systemctl reload ssh

# 부팅 시 자동 시작 설정
sudo systemctl enable ssh

# 자동 시작 해제
sudo systemctl disable ssh

프로세스 확인

# SSH 프로세스 확인
ps aux | grep sshd

# 포트 사용 확인
sudo netstat -tlnp | grep :22
# 또는
sudo ss -tlnp | grep :22

기본 설정

설정 파일 위치

  • 메인 설정: /etc/ssh/sshd_config
  • 클라이언트 설정: /etc/ssh/ssh_config
  • 호스트 키: /etc/ssh/ssh_host_*

설정 파일 편집

# 서버 설정 편집
sudo nano /etc/ssh/sshd_config

# 설정 변경 후 서비스 재시작
sudo systemctl restart ssh

보안 설정

기본 보안 강화

# 설정 파일 백업
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

# 설정 파일 편집
sudo nano /etc/ssh/sshd_config

권장 보안 설정

# 포트 변경 (선택사항)
Port 2222

# root 직접 로그인 비활성화
PermitRootLogin no

# 패스워드 인증 비활성화 (키 인증 설정 후)
PasswordAuthentication no

# 빈 패스워드 비활성화
PermitEmptyPasswords no

# X11 포워딩 비활성화 (필요하지 않은 경우)
X11Forwarding no

# 최대 인증 시도 횟수 제한
MaxAuthTries 3

# 동시 접속 제한
MaxSessions 2

# 로그인 시간 제한 (초)
LoginGraceTime 30

# 특정 사용자만 허용 (선택사항)
AllowUsers username1 username2

# 특정 그룹만 허용 (선택사항)
AllowGroups sshusers

SSH 키 인증 설정

1. 클라이언트에서 키 생성

# RSA 키 생성 (4096비트)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# ED25519 키 생성 (더 안전한 방식)
ssh-keygen -t ed25519 -C "your_email@example.com"

2. 공개키 서버로 복사

# ssh-copy-id 사용 (권장)
ssh-copy-id username@server_ip

# 수동으로 복사
cat ~/.ssh/id_rsa.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3. 권한 설정

# 서버에서 실행
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

방화벽 설정

UFW를 사용하는 경우

# SSH 기본 포트 허용
sudo ufw allow ssh

# 사용자 정의 포트 허용 (포트 변경 시)
sudo ufw allow 2222/tcp

# 특정 IP에서만 SSH 허용
sudo ufw allow from 192.168.1.100 to any port ssh

# 방화벽 상태 확인
sudo ufw status

iptables를 사용하는 경우

# SSH 포트 허용
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 설정 저장 (Debian/Ubuntu)
sudo iptables-save > /etc/iptables/rules.v4

연결 테스트

로컬 테스트

# 로컬호스트 연결
ssh username@localhost

# 특정 포트로 연결
ssh -p 2222 username@localhost

원격 테스트

# 기본 연결
ssh username@server_ip

# 포트 지정 연결
ssh -p 2222 username@server_ip

# 키 파일 지정 연결
ssh -i ~/.ssh/custom_key username@server_ip

로그 및 모니터링

로그 파일 위치

  • 인증 로그: /var/log/auth.log
  • 시스템 로그: /var/log/syslog

로그 확인

# 실시간 SSH 로그 모니터링
sudo tail -f /var/log/auth.log

# SSH 관련 로그만 필터링
sudo grep sshd /var/log/auth.log

# 실패한 로그인 시도 확인
sudo grep "Failed password" /var/log/auth.log

# 성공한 로그인 확인
sudo grep "Accepted" /var/log/auth.log

시스템 로그 확인

# systemd 저널에서 SSH 서비스 로그 확인
sudo journalctl -u ssh

# 실시간 로그 모니터링
sudo journalctl -u ssh -f

고급 설정

SSH 터널링

# 로컬 포트 포워딩
ssh -L 8080:localhost:80 username@server_ip

# 원격 포트 포워딩
ssh -R 9090:localhost:22 username@server_ip

# 동적 포트 포워딩 (SOCKS 프록시)
ssh -D 1080 username@server_ip

SSH 에이전트 사용

# SSH 에이전트 시작
eval $(ssh-agent)

# 키 추가
ssh-add ~/.ssh/id_rsa

# 추가된 키 확인
ssh-add -l

SSH 설정 파일 (~/.ssh/config)

# 클라이언트 설정 파일 생성
nano ~/.ssh/config

# 예시 설정
Host myserver
    HostName server_ip
    User username
    Port 2222
    IdentityFile ~/.ssh/custom_key

# 사용 예
ssh myserver

문제 해결

일반적인 문제들

1. 연결 거부 (Connection refused)

# 서비스 상태 확인
sudo systemctl status ssh

# 포트 확인
sudo netstat -tlnp | grep :22

# 방화벽 확인
sudo ufw status

2. 권한 거부 (Permission denied)

# 사용자 존재 확인
id username

# 공개키 권한 확인
ls -la ~/.ssh/

3. 키 인증 실패

# SSH 상세 로그 확인
ssh -vvv username@server_ip

# 서버 로그 확인
sudo tail -f /var/log/auth.log

디버깅 모드

# SSH 클라이언트 상세 출력
ssh -vvv username@server_ip

# SSH 서버 디버깅 모드 실행
sudo /usr/sbin/sshd -d -p 2222

성능 최적화

연결 속도 개선

# 설정 파일에 추가
UseDNS no
GSSAPIAuthentication no

Keep-Alive 설정

# 서버 설정
ClientAliveInterval 60
ClientAliveCountMax 3

# 클라이언트 설정
ServerAliveInterval 60
ServerAliveCountMax 3

제거

완전 제거

# 서비스 중지
sudo systemctl stop ssh
sudo systemctl disable ssh

# 패키지 제거
sudo apt remove openssh-server -y

# 설정 파일까지 완전 제거
sudo apt purge openssh-server -y

# 종속 패키지 정리
sudo apt autoremove -y

# 설정 디렉터리 제거 (선택사항)
sudo rm -rf /etc/ssh

추가 리소스

유용한 명령어

# 현재 SSH 연결 확인
who

# SSH 연결 히스토리
last

# 실패한 로그인 시도 확인
lastb

보안 스캐닝

# SSH 서비스 스캔
nmap -p 22 localhost

# SSH 암호화 알고리즘 확인
ssh -Q cipher localhost