Bash 네트워킹 및 SSH 완벽 가이드
Bash 네트워킹 및 SSH 완벽 가이드
서버 관리에 필수적인 네트워킹과 SSH 관련 내용을 정리했습니다.
SSH 기본
SSH 키 생성
ssh-keygen -b 4096 # 4096비트 키 생성 (기본 2048)
파일명을 지정하지 않으면 ~/.ssh/id_rsa, ~/.ssh/id_rsa.pub가 생성됩니다.
비밀번호 없이 접속 설정
- 키 쌍 생성 (private, public)
- Private 키는 클라이언트에 보관
- Public 키를 서버의
~/.ssh/authorized_keys에 추가
# 방법 1: ssh-copy-id
ssh-copy-id -i ~/.ssh/id_rsa.pub ec2-user@localhost
# 방법 2: 수동 복사
cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys && echo "Key copied"'
SSH 키 없이 접속하기
Private 키가 ~/.ssh/id_rsa에 있으면 기본으로 사용됩니다.
SSH Agent 사용:
eval $(ssh-agent)
ssh-add -L # 등록된 키 확인
ssh-add -D # 키 삭제
ssh-add <key_file> # 키 추가
ssh ec2-user@hostname # 접속
SSH Config 설정
~/.ssh/config 파일로 접속 정보를 저장합니다:
Host home
HostName home.example.com
User ec2-user
IdentityFile ~/.ssh/my-key.pem
# 모든 호스트에 대한 설정
Host *
ServerAliveInterval 120 # 타임아웃 방지
접속:
ssh home
서버 사이드 설정
sudo vi /etc/ssh/sshd_config
# 비밀번호 로그인 비활성화
PasswordAuthentication no
서비스 재시작:
# Ubuntu/Debian
sudo service ssh restart
# CentOS/Fedora
sudo service sshd restart
SCP (Secure Copy)
파일 업로드
scp -i <pem_file> <local_path> user@ip:server_path
파일 다운로드
scp -i key.pem ec2-user@server:file_path local_path
ssh home "sudo cat /home/h/.ssh/id_rsa" >> local_file
옵션
scp -v -o StrictHostKeyChecking=no # 디버그 + 호스트키 확인 스킵
네트워크 관리
IP 주소 확인
ip addr show
ping hostname # 서버 확인
네트워크 인터페이스 제어
ip link set eth0 down # 끊기
ip link set eth0 up # 재연결
네트워크 사용량
ip -s link # 기본
ip -s -s link # 상세
연결된 소켓 확인
ss -t # TCP 연결
ss -u # UDP 연결
포트 관리
사용 중인 포트 확인
ss -ltn # TCP 포트 번호
ss -lt # TCP 호스트명
ss -lun # UDP 포트
ss -ltun # TCP & UDP
# 특정 포트 확인
lsof -i:3306
sudo lsof -i:3306 # 권한 필요한 경우
iptables 방화벽
규칙 확인
sudo iptables -L
sudo iptables -S
sudo iptables -L --line-numbers
연결 허용
# 기존 연결 허용
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 포트 80 허용
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# loopback 허용 (첫 번째 규칙으로)
sudo iptables -I INPUT 1 -i lo -j ACCEPT
기본 정책 설정
sudo iptables -P INPUT DROP # 모든 입력 차단
포트 포워딩
# 80 -> 8080 리다이렉트
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# 포워딩 규칙 확인
sudo iptables -t nat --line-numbers -n -L
# 포워딩 삭제
sudo iptables -t nat -D PREROUTING 1
URL 호출
curl http://localhost:9091/api
파일 다운로드
wget http://example.com/file.deb
nc (netcat)
네트워크 연결 테스트:
# 리스닝 서버
nc -l 5000
lsof (List Open Files)
열린 파일 및 네트워크 소켓 확인:
lsof -i # IP 소켓
lsof -U # Unix 소켓
lsof -n # 호스트명 해석 안함
lsof -P # 포트명 대신 번호
마운트 해제가 안 될 때 파일을 사용 중인 프로세스 확인에 유용합니다.
프로세스 확인
# Java 프로세스 확인
ps -ef | grep java
# 프로세스 상세 정보
ps -p 18655 -o comm=
ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
서비스 재시작
sudo /etc/init.d/service_name restart
포트 사용 중일 때
lsof -i:3306
kill -9 <pid>
Comments