headscale-tailscale-replace.../register-client-pharmq-live.sh
PharmQ Admin 560de20778 🔧 Fix sudo dependency for root execution
 Root 사용자 지원 개선
- root 권한일 때 sudo 없이 실행
- sudo 미설치 시 적절한 안내 메시지
- Debian/Proxmox 환경 호환성 강화

🐛 해결된 문제:
- Debian 시스템에서 sudo 미설치로 인한 실행 실패
- root 권한 실행 시 불필요한 sudo 호출

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-22 11:25:24 +00:00

180 lines
4.9 KiB
Bash
Executable File

#!/bin/bash
# 팜큐(FARMQ) Headscale 클라이언트 등록 스크립트 - LIVE 서버용
# 사용법: ./register-client-pharmq-live.sh
# 대상 서버: head.pharmq.kr (Live Production)
set -e
# 설정
HEADSCALE_SERVER="http://head.pharmq.kr"
PREAUTH_KEY="b46923995afeaec90e588168f2e1bf99801775e8657ce003"
# 색상 출력 함수
print_status() {
echo -e "\n🔧 $1"
}
print_success() {
echo -e "\n✅ $1"
}
print_error() {
echo -e "\n❌ $1"
}
print_info() {
echo -e "\n📋 $1"
}
# 운영체제 감지
detect_os() {
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
if command -v apt &> /dev/null; then
OS="ubuntu"
elif command -v yum &> /dev/null; then
OS="centos"
else
OS="linux"
fi
elif [[ "$OSTYPE" == "darwin"* ]]; then
OS="macos"
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
OS="windows"
else
OS="unknown"
fi
echo $OS
}
# Tailscale 설치 확인 및 설치
install_tailscale() {
OS=$(detect_os)
if command -v tailscale &> /dev/null; then
print_info "Tailscale이 이미 설치되어 있습니다."
return 0
fi
print_status "Tailscale 설치 중..."
case $OS in
"ubuntu")
curl -fsSL https://tailscale.com/install.sh | sh
;;
"centos")
curl -fsSL https://tailscale.com/install.sh | sh
;;
"macos")
echo "macOS용 Tailscale을 다운로드합니다."
echo "다음 URL에서 수동으로 설치하세요: https://tailscale.com/download/mac"
exit 1
;;
"windows")
echo "Windows용 Tailscale을 다운로드합니다."
echo "다음 URL에서 수동으로 설치하세요: https://tailscale.com/download/windows"
exit 1
;;
*)
print_error "지원되지 않는 운영체제입니다: $OSTYPE"
exit 1
;;
esac
}
# 기존 Tailscale 연결 해제
disconnect_existing() {
if tailscale status --json &> /dev/null; then
local current_status=$(tailscale status --json 2>/dev/null || echo "{}")
if echo "$current_status" | grep -q '"BackendState":"Running"'; then
print_status "기존 Tailscale 연결을 해제합니다..."
if [ "$EUID" -eq 0 ]; then
tailscale logout || true
else
sudo tailscale logout || true
fi
fi
fi
}
# Headscale에 등록
register_to_headscale() {
print_status "팜큐 Headscale 서버에 등록 중..."
print_info "서버: $HEADSCALE_SERVER"
# Tailscale을 Headscale 서버로 설정하고 등록
if [ "$EUID" -eq 0 ]; then
tailscale up \
--login-server="$HEADSCALE_SERVER" \
--authkey="$PREAUTH_KEY" \
--accept-routes \
--accept-dns=false
else
sudo tailscale up \
--login-server="$HEADSCALE_SERVER" \
--authkey="$PREAUTH_KEY" \
--accept-routes \
--accept-dns=false
fi
}
# 연결 상태 확인
check_connection() {
print_status "연결 상태 확인 중..."
# 잠시 대기
sleep 3
# 상태 확인
if tailscale status &> /dev/null; then
local tailscale_ip=$(tailscale ip -4 2>/dev/null || echo "")
if [[ -n "$tailscale_ip" ]]; then
print_success "성공적으로 연결되었습니다!"
print_info "할당된 IP: $tailscale_ip"
print_info "네트워크 상태:"
tailscale status
return 0
fi
fi
print_error "연결에 실패했습니다."
print_info "수동으로 상태를 확인해보세요: tailscale status"
return 1
}
# 메인 함수
main() {
echo "=========================================="
echo " 🏥 팜큐(FARMQ) Headscale 클라이언트 등록"
echo "=========================================="
# 루트 권한 확인
if [[ $EUID -ne 0 ]] && ! command -v sudo &> /dev/null; then
print_error "이 스크립트는 root 권한 또는 sudo가 필요합니다."
print_info "root로 실행하거나 sudo를 설치한 후 다시 시도하세요."
exit 1
fi
if [[ $EUID -ne 0 ]] && ! sudo -n true 2>/dev/null; then
print_info "sudo 권한이 필요합니다. 비밀번호를 입력해주세요."
fi
# 단계별 실행
install_tailscale
disconnect_existing
register_to_headscale
if check_connection; then
print_success "🎉 등록 완료!"
print_info "이제 팜큐 네트워크에 연결되었습니다."
print_info "문제가 있으면 관리자에게 문의하세요."
else
print_error "등록 과정에서 문제가 발생했습니다."
exit 1
fi
}
# 스크립트 실행
main "$@"