SSH(Secure Shell)는 네트워크를 통해 원격 시스템을 안전하게 제어할 수 있도록 도와주는 필수적인 프로토콜입니다. 리눅스 서버를 운영하거나 관리하는 경우 SSH 명령어를 익히는 것이 매우 중요합니다. 이 글에서는 SSH의 기본 개념부터 실무에서 자주 사용하는 명령어까지 자세히 설명하겠습니다.
1. SSH란 무엇인가?
SSH는 보안이 강화된 원격 접속 프로토콜로, 네트워크를 통해 암호화된 터널을 제공하여 데이터와 명령어를 안전하게 전송합니다. 기본적으로 22번 포트를 사용하며, 패스워드 또는 공개 키 기반 인증을 통해 접속합니다.
2. SSH 기본 명령어
2.1 SSH를 이용한 원격 접속
ssh 사용자명@서버주소
예제:
ssh root@192.168.1.100
해당 명령어는 지정된 서버에 사용자 계정으로 접속합니다.
2.2 특정 포트로 SSH 접속
ssh -p 포트번호 사용자명@서버주소
예제:
ssh -p 2222 user@192.168.1.100
2.3 SSH 접속 시 특정 키 사용
ssh -i 키파일.pem 사용자명@서버주소
예제:
ssh -i ~/.ssh/id_rsa root@192.168.1.100
3. SSH 설정 및 관리
3.1 SSH 서버 설정 파일 수정
SSH 서버 설정 파일(sshd_config
)을 수정하여 보안을 강화할 수 있습니다.
sudo nano /etc/ssh/sshd_config
변경할 수 있는 주요 설정:
Port 2222
: 기본 포트(22번)를 변경하여 보안 강화PermitRootLogin no
: root 계정으로의 직접 접속 차단PasswordAuthentication no
: 비밀번호 인증을 비활성화하고 키 인증 사용
설정 변경 후 SSH 서비스를 재시작해야 합니다.
sudo systemctl restart sshd
3.2 SSH 키 생성 및 관리
SSH 키 기반 인증을 사용하면 보안을 강화할 수 있습니다. 키 생성 명령어:
ssh-keygen -t rsa -b 4096
생성된 공개 키를 원격 서버의 ~/.ssh/authorized_keys
파일에 추가하면 패스워드 없이 로그인할 수 있습니다.
3.3 SSH 접속 시 지연 문제 해결
SSH 접속 시 응답이 느린 경우 UseDNS no
설정을 적용하면 속도를 개선할 수 있습니다.
echo "UseDNS no" | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart sshd
4. SSH 터널링 및 포트 포워딩
4.1 로컬 포트 포워딩
ssh -L 로컬포트:대상IP:대상포트 사용자명@서버주소
예제:
ssh -L 8080:127.0.0.1:80 user@192.168.1.100
이렇게 하면 localhost:8080
에서 원격 서버의 80번 포트에 접근할 수 있습니다.
4.2 원격 포트 포워딩
ssh -R 원격포트:대상IP:대상포트 사용자명@서버주소
예제:
ssh -R 9090:127.0.0.1:3306 user@192.168.1.100
원격 서버에서 localhost:9090
을 통해 로컬 MySQL 서버(3306)에 접근할 수 있습니다.
5. SSH 보안 강화 방법
5.1 Fail2Ban을 이용한 SSH 공격 방어
SSH 공격을 방지하기 위해 Fail2Ban을 사용할 수 있습니다.
sudo apt install fail2ban
설정 파일 편집:
sudo nano /etc/fail2ban/jail.local
다음과 같이 설정을 추가합니다.
[sshd]
enabled = true
maxretry = 5
bantime = 600
5.2 UFW 방화벽으로 SSH 보안 강화
UFW(Uncomplicated Firewall)를 이용하여 특정 IP만 SSH 접속을 허용할 수 있습니다.
sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw enable
6. 마무리
SSH는 리눅스 서버 관리에서 가장 중요한 도구 중 하나입니다. 본 가이드에서는 기본적인 SSH 명령어부터 보안 설정까지 다뤘습니다. 안전하고 효율적인 서버 관리를 위해 SSH를 적극 활용하시기 바랍니다.