Initial commit: Proxmox IP Changer
✨ Proxmox 호스트 IP 자동 변경 스크립트 - IP 주소 자동 변경 기능 - 설정 파일 자동 백업 - IP 유효성 검증 - 컬러풀한 UI 🛠️ 기술 스택: - Bash Shell Script - Proxmox VE Compatible 🔧 주요 구성: - change_proxmox_ip.sh: 메인 스크립트 - README.md: 사용 설명서 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
commit
41a5ca283f
32
.gitignore
vendored
Normal file
32
.gitignore
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
# Backup files
|
||||
*.backup.*
|
||||
*.bak
|
||||
*~
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
.*.swp
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Environment variables
|
||||
.env
|
||||
.env.local
|
||||
|
||||
# Git credential files
|
||||
.git-credentials
|
||||
|
||||
# Personal documentation
|
||||
gitea업로드방법.md
|
||||
proxmox_auto_rdp_implementation.md
|
||||
proxmox_host화면에서 바로 rdp.md
|
||||
133
README.md
Normal file
133
README.md
Normal file
@ -0,0 +1,133 @@
|
||||
# 🔧 Proxmox IP 자동 변경 스크립트
|
||||
|
||||
Proxmox 호스트의 IP 주소를 안전하고 쉽게 변경할 수 있는 자동화 스크립트입니다.
|
||||
|
||||
## 🚀 한 줄 설치 및 실행
|
||||
|
||||
```bash
|
||||
bash -c "$(curl -fsSL https://git.0bin.in/thug0bin/proxmox-ip-changer/raw/branch/main/change_proxmox_ip.sh)"
|
||||
```
|
||||
|
||||
## 📋 주요 기능
|
||||
|
||||
- ✅ **자동 백업**: 설정 파일 변경 전 자동 백업
|
||||
- ✅ **IP 유효성 검증**: 입력된 IP 주소의 형식 자동 검증
|
||||
- ✅ **현재 설정 표시**: 현재 네트워크 설정 확인
|
||||
- ✅ **컬러풀한 출력**: 시각적으로 구분하기 쉬운 색상 표시
|
||||
- ✅ **안전한 변경**: 변경 전 확인 절차
|
||||
- ✅ **다양한 재부팅 옵션**: 즉시 재부팅, 네트워크만 재시작, 수동 재부팅 선택 가능
|
||||
|
||||
## 📌 요구사항
|
||||
|
||||
- Proxmox VE 6.x 이상
|
||||
- Root 권한
|
||||
- SSH 접속 가능한 환경
|
||||
|
||||
## 🛠️ 사용 방법
|
||||
|
||||
### 방법 1: 원격 실행 (권장)
|
||||
```bash
|
||||
# 직접 실행
|
||||
bash -c "$(curl -fsSL https://git.0bin.in/thug0bin/proxmox-ip-changer/raw/branch/main/change_proxmox_ip.sh)"
|
||||
```
|
||||
|
||||
### 방법 2: 다운로드 후 실행
|
||||
```bash
|
||||
# 스크립트 다운로드
|
||||
curl -O https://git.0bin.in/thug0bin/proxmox-ip-changer/raw/branch/main/change_proxmox_ip.sh
|
||||
|
||||
# 실행 권한 부여
|
||||
chmod +x change_proxmox_ip.sh
|
||||
|
||||
# 스크립트 실행
|
||||
sudo ./change_proxmox_ip.sh
|
||||
```
|
||||
|
||||
## 📝 스크립트 동작 과정
|
||||
|
||||
1. **권한 확인**: Root 권한 확인
|
||||
2. **현재 설정 표시**:
|
||||
- 활성 네트워크 인터페이스
|
||||
- 현재 IP 주소 및 서브넷
|
||||
- 게이트웨이
|
||||
- 호스트명
|
||||
3. **백업 생성**:
|
||||
- `/etc/network/interfaces` 백업
|
||||
- `/etc/hosts` 백업
|
||||
4. **새 IP 정보 입력**:
|
||||
- 새 IP 주소 (유효성 검증)
|
||||
- 서브넷 마스크 (기본값 제공)
|
||||
- 게이트웨이 (기본값 제공)
|
||||
5. **변경 사항 확인**: 변경 전 최종 확인
|
||||
6. **설정 파일 수정**:
|
||||
- `/etc/network/interfaces` 수정
|
||||
- `/etc/hosts` 수정
|
||||
7. **재부팅 옵션 선택**:
|
||||
- 옵션 1: 즉시 재부팅
|
||||
- 옵션 2: 네트워크 서비스만 재시작
|
||||
- 옵션 3: 나중에 수동으로 재부팅
|
||||
|
||||
## 🔒 안전 기능
|
||||
|
||||
- **자동 백업**: 모든 설정 파일은 변경 전 자동으로 백업됩니다
|
||||
- 백업 파일 위치: `/etc/network/interfaces.backup.날짜시간`
|
||||
- 백업 파일 위치: `/etc/hosts.backup.날짜시간`
|
||||
- **IP 유효성 검증**: 잘못된 IP 주소 입력 방지
|
||||
- **변경 전 확인**: 실제 변경 전 사용자 확인 필수
|
||||
- **변경 내용 표시**: 변경된 설정 파일 내용 즉시 확인
|
||||
|
||||
## ⚠️ 주의사항
|
||||
|
||||
- SSH 연결로 작업 중일 경우, IP 변경 후 연결이 끊어집니다
|
||||
- 새 IP 주소로 다시 연결해야 합니다
|
||||
- 변경 전 현재 설정을 반드시 메모해두세요
|
||||
- 물리적 접근이 가능한 상태에서 작업하는 것을 권장합니다
|
||||
|
||||
## 🔄 복구 방법
|
||||
|
||||
설정 실수로 인한 문제 발생 시:
|
||||
|
||||
```bash
|
||||
# 백업 파일 확인
|
||||
ls -la /etc/network/interfaces.backup.*
|
||||
ls -la /etc/hosts.backup.*
|
||||
|
||||
# 백업 파일로 복구
|
||||
cp /etc/network/interfaces.backup.날짜시간 /etc/network/interfaces
|
||||
cp /etc/hosts.backup.날짜시간 /etc/hosts
|
||||
|
||||
# 네트워크 재시작
|
||||
systemctl restart networking
|
||||
```
|
||||
|
||||
## 📊 테스트 환경
|
||||
|
||||
- ✅ Proxmox VE 8.x
|
||||
- ✅ Proxmox VE 7.x
|
||||
- ✅ Proxmox VE 6.x
|
||||
- ✅ Debian 11 (Bullseye)
|
||||
- ✅ Debian 12 (Bookworm)
|
||||
|
||||
## 🤝 기여
|
||||
|
||||
이슈 발견이나 개선 사항이 있으시면 GitHub Issues를 통해 알려주세요.
|
||||
|
||||
## 📄 라이선스
|
||||
|
||||
MIT License
|
||||
|
||||
## 👤 작성자
|
||||
|
||||
- **시골약사** (thug0bin)
|
||||
- Email: thug0bin@gmail.com
|
||||
- GitHub: [https://git.0bin.in/thug0bin](https://git.0bin.in/thug0bin)
|
||||
|
||||
## 🔗 관련 프로젝트
|
||||
|
||||
- [Proxmox RDP Auto Setup](https://git.0bin.in/thug0bin/proxmox-rdp-autosetup)
|
||||
|
||||
---
|
||||
|
||||
**마지막 업데이트**: 2025년 9월
|
||||
|
||||
> 💡 **팁**: 이 스크립트는 Proxmox 클러스터 환경에서도 사용 가능하지만, 클러스터 설정은 별도로 업데이트해야 합니다.
|
||||
184
change_proxmox_ip.sh
Executable file
184
change_proxmox_ip.sh
Executable file
@ -0,0 +1,184 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Proxmox IP 변경 스크립트
|
||||
# 작성자: Claude
|
||||
# 설명: Proxmox 호스트의 IP 주소를 자동으로 변경하는 스크립트
|
||||
|
||||
# 색상 정의
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 루트 권한 확인
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}이 스크립트는 루트 권한으로 실행해야 합니다.${NC}"
|
||||
echo "사용법: sudo $0"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
clear
|
||||
echo -e "${BLUE}================================================${NC}"
|
||||
echo -e "${BLUE} Proxmox IP 주소 변경 스크립트${NC}"
|
||||
echo -e "${BLUE}================================================${NC}"
|
||||
echo
|
||||
|
||||
# 현재 네트워크 정보 표시
|
||||
echo -e "${GREEN}[현재 네트워크 정보]${NC}"
|
||||
echo -e "${YELLOW}----------------------------------------${NC}"
|
||||
|
||||
# 활성 네트워크 인터페이스 찾기
|
||||
ACTIVE_INTERFACE=$(ip route | grep default | awk '{print $5}' | head -n1)
|
||||
if [ -z "$ACTIVE_INTERFACE" ]; then
|
||||
echo -e "${RED}활성 네트워크 인터페이스를 찾을 수 없습니다.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 현재 IP 주소 가져오기
|
||||
CURRENT_IP=$(ip addr show $ACTIVE_INTERFACE | grep "inet " | awk '{print $2}' | cut -d/ -f1)
|
||||
CURRENT_SUBNET=$(ip addr show $ACTIVE_INTERFACE | grep "inet " | awk '{print $2}' | cut -d/ -f2)
|
||||
CURRENT_GATEWAY=$(ip route | grep default | awk '{print $3}' | head -n1)
|
||||
|
||||
echo -e "인터페이스: ${GREEN}$ACTIVE_INTERFACE${NC}"
|
||||
echo -e "현재 IP: ${GREEN}$CURRENT_IP/$CURRENT_SUBNET${NC}"
|
||||
echo -e "게이트웨이: ${GREEN}$CURRENT_GATEWAY${NC}"
|
||||
|
||||
# 호스트명 가져오기
|
||||
HOSTNAME=$(hostname)
|
||||
echo -e "호스트명: ${GREEN}$HOSTNAME${NC}"
|
||||
echo
|
||||
|
||||
# 백업 생성
|
||||
echo -e "${YELLOW}[설정 파일 백업 중...]${NC}"
|
||||
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
|
||||
cp /etc/network/interfaces /etc/network/interfaces.backup.$BACKUP_DATE
|
||||
cp /etc/hosts /etc/hosts.backup.$BACKUP_DATE
|
||||
echo -e "${GREEN}백업 완료:${NC}"
|
||||
echo " - /etc/network/interfaces.backup.$BACKUP_DATE"
|
||||
echo " - /etc/hosts.backup.$BACKUP_DATE"
|
||||
echo
|
||||
|
||||
# 새 IP 정보 입력
|
||||
echo -e "${BLUE}[새로운 네트워크 정보 입력]${NC}"
|
||||
echo -e "${YELLOW}----------------------------------------${NC}"
|
||||
|
||||
# IP 주소 입력 및 검증
|
||||
while true; do
|
||||
read -p "새 IP 주소 (예: 192.168.10.120): " NEW_IP
|
||||
if [[ $NEW_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
||||
# IP 형식 검증
|
||||
IFS='.' read -ra ADDR <<< "$NEW_IP"
|
||||
valid=true
|
||||
for i in "${ADDR[@]}"; do
|
||||
if [ $i -gt 255 ]; then
|
||||
valid=false
|
||||
break
|
||||
fi
|
||||
done
|
||||
if $valid; then
|
||||
break
|
||||
else
|
||||
echo -e "${RED}유효하지 않은 IP 주소입니다. 다시 입력해주세요.${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}올바른 IP 주소 형식이 아닙니다. (예: 192.168.10.120)${NC}"
|
||||
fi
|
||||
done
|
||||
|
||||
# 서브넷 마스크 입력
|
||||
read -p "서브넷 마스크 (기본값: $CURRENT_SUBNET): " NEW_SUBNET
|
||||
if [ -z "$NEW_SUBNET" ]; then
|
||||
NEW_SUBNET=$CURRENT_SUBNET
|
||||
fi
|
||||
|
||||
# 게이트웨이 입력
|
||||
read -p "게이트웨이 (기본값: $CURRENT_GATEWAY): " NEW_GATEWAY
|
||||
if [ -z "$NEW_GATEWAY" ]; then
|
||||
NEW_GATEWAY=$CURRENT_GATEWAY
|
||||
fi
|
||||
|
||||
echo
|
||||
echo -e "${BLUE}[변경 사항 확인]${NC}"
|
||||
echo -e "${YELLOW}----------------------------------------${NC}"
|
||||
echo -e "현재 IP: $CURRENT_IP/$CURRENT_SUBNET → 새 IP: ${GREEN}$NEW_IP/$NEW_SUBNET${NC}"
|
||||
echo -e "게이트웨이: $CURRENT_GATEWAY → ${GREEN}$NEW_GATEWAY${NC}"
|
||||
echo
|
||||
|
||||
read -p "이 설정으로 변경하시겠습니까? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo -e "${YELLOW}취소되었습니다.${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo
|
||||
echo -e "${YELLOW}[설정 파일 수정 중...]${NC}"
|
||||
|
||||
# /etc/network/interfaces 파일 수정
|
||||
echo -e "${BLUE}1. /etc/network/interfaces 수정${NC}"
|
||||
sed -i "s|address $CURRENT_IP/$CURRENT_SUBNET|address $NEW_IP/$NEW_SUBNET|g" /etc/network/interfaces
|
||||
sed -i "s|gateway $CURRENT_GATEWAY|gateway $NEW_GATEWAY|g" /etc/network/interfaces
|
||||
|
||||
# /etc/hosts 파일 수정
|
||||
echo -e "${BLUE}2. /etc/hosts 수정${NC}"
|
||||
sed -i "s|$CURRENT_IP|$NEW_IP|g" /etc/hosts
|
||||
|
||||
echo -e "${GREEN}설정 파일 수정 완료!${NC}"
|
||||
echo
|
||||
|
||||
# 변경된 내용 확인
|
||||
echo -e "${BLUE}[변경된 설정 확인]${NC}"
|
||||
echo -e "${YELLOW}----------------------------------------${NC}"
|
||||
echo -e "${GREEN}/etc/network/interfaces:${NC}"
|
||||
grep -E "address|gateway" /etc/network/interfaces | grep -v "#"
|
||||
echo
|
||||
echo -e "${GREEN}/etc/hosts:${NC}"
|
||||
grep "$NEW_IP" /etc/hosts
|
||||
echo
|
||||
|
||||
# 재부팅 여부 확인
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
echo -e "${YELLOW}IP 변경을 완료하려면 시스템을 재부팅해야 합니다.${NC}"
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
echo
|
||||
echo "옵션:"
|
||||
echo " 1) 지금 재부팅"
|
||||
echo " 2) 네트워크 서비스만 재시작 (연결이 끊길 수 있음)"
|
||||
echo " 3) 나중에 수동으로 재부팅"
|
||||
echo
|
||||
read -p "선택하세요 (1/2/3): " REBOOT_OPTION
|
||||
|
||||
case $REBOOT_OPTION in
|
||||
1)
|
||||
echo -e "${RED}5초 후 시스템이 재부팅됩니다...${NC}"
|
||||
echo -e "${YELLOW}새 IP 주소: $NEW_IP${NC}"
|
||||
for i in {5..1}; do
|
||||
echo -e "${RED}$i...${NC}"
|
||||
sleep 1
|
||||
done
|
||||
reboot
|
||||
;;
|
||||
2)
|
||||
echo -e "${YELLOW}네트워크 서비스를 재시작합니다...${NC}"
|
||||
echo -e "${RED}주의: SSH 연결이 끊길 수 있습니다!${NC}"
|
||||
echo -e "${YELLOW}새 IP 주소로 다시 연결하세요: $NEW_IP${NC}"
|
||||
sleep 3
|
||||
systemctl restart networking
|
||||
;;
|
||||
3)
|
||||
echo -e "${GREEN}나중에 수동으로 재부팅하세요.${NC}"
|
||||
echo -e "${YELLOW}재부팅 명령: sudo reboot${NC}"
|
||||
echo -e "${YELLOW}또는 네트워크 재시작: sudo systemctl restart networking${NC}"
|
||||
echo
|
||||
echo -e "${GREEN}새 IP 주소: $NEW_IP${NC}"
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}잘못된 선택입니다.${NC}"
|
||||
echo -e "${YELLOW}나중에 수동으로 재부팅하세요: sudo reboot${NC}"
|
||||
echo -e "${GREEN}새 IP 주소: $NEW_IP${NC}"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo
|
||||
echo -e "${GREEN}스크립트 실행 완료!${NC}"
|
||||
Loading…
Reference in New Issue
Block a user