#!/bin/bash # 팜큐(FARMQ) Pre-auth Key 생성 스크립트 # 사용법: ./create-preauth-key.sh [사용자명] [유효기간(시간)] set -e # 기본 설정 DEFAULT_USER="myuser" DEFAULT_EXPIRY="24h" # 24시간 # 사용법 출력 usage() { echo "사용법: $0 [사용자명] [유효기간]" echo "" echo "예시:" echo " $0 # myuser 사용자, 24시간 유효" echo " $0 pharmacy1 # pharmacy1 사용자, 24시간 유효" echo " $0 pharmacy1 7d # pharmacy1 사용자, 7일 유효" echo " $0 pharmacy1 1h # pharmacy1 사용자, 1시간 유효" echo "" echo "유효기간 형식: 1h, 24h, 7d, 30d 등" } # 색상 출력 함수 print_status() { echo -e "\n🔧 $1" } print_success() { echo -e "\n✅ $1" } print_error() { echo -e "\n❌ $1" } print_info() { echo -e "\n📋 $1" } # 사용자 존재 확인 check_user_exists() { local username=$1 print_status "사용자 '$username' 확인 중..." if docker exec headscale headscale users list | grep -q "$username"; then print_info "사용자 '$username'이 존재합니다." return 0 else print_error "사용자 '$username'이 존재하지 않습니다." print_info "사용자 생성 중..." if docker exec headscale headscale users create "$username"; then print_success "사용자 '$username'이 생성되었습니다." else print_error "사용자 생성에 실패했습니다." exit 1 fi fi } # 사용자 ID 가져오기 get_user_id() { local username=$1 local user_id=$(docker exec headscale headscale users list | grep "$username" | awk '{print $1}') if [[ -n "$user_id" ]]; then echo $user_id else print_error "사용자 ID를 찾을 수 없습니다." exit 1 fi } # Pre-auth key 생성 create_preauth_key() { local username=$1 local expiry=$2 print_status "Pre-auth key 생성 중..." print_info "사용자: $username" print_info "유효기간: $expiry" local user_id=$(get_user_id "$username") print_info "사용자 ID: $user_id" # Pre-auth key 생성 (재사용 가능, 임시 아님) local preauth_output=$(docker exec headscale headscale preauthkeys create \ -u "$user_id" \ --expiration "$expiry" \ --reusable) if [[ $? -eq 0 ]]; then # Key 값 추출 local preauth_key=$(echo "$preauth_output" | grep -o '[a-f0-9]\{48\}') if [[ -n "$preauth_key" ]]; then print_success "Pre-auth key가 생성되었습니다!" print_info "Key: $preauth_key" # 클라이언트 등록 스크립트에 추가할 명령어 출력 echo "" echo "==========================================" echo "📋 클라이언트에서 사용할 명령어:" echo "==========================================" echo "" echo "Linux/macOS:" echo "sudo tailscale up \\" echo " --login-server=\"https://head.0bin.in\" \\" echo " --authkey=\"$preauth_key\" \\" echo " --accept-routes \\" echo " --accept-dns=false" echo "" echo "==========================================" echo "📋 등록 스크립트 업데이트:" echo "==========================================" echo "" echo "register-client.sh 파일의 PREAUTH_KEY 값을 다음으로 업데이트하세요:" echo "PREAUTH_KEY=\"$preauth_key\"" echo "" return 0 fi fi print_error "Pre-auth key 생성에 실패했습니다." exit 1 } # 기존 Pre-auth key 목록 표시 list_existing_keys() { local username=$1 local user_id=$(get_user_id "$username") print_info "기존 Pre-auth key 목록 (사용자: $username):" docker exec headscale headscale preauthkeys list -u "$user_id" } # 메인 함수 main() { local username="${1:-$DEFAULT_USER}" local expiry="${2:-$DEFAULT_EXPIRY}" echo "==========================================" echo " 🔑 팜큐(FARMQ) Pre-auth Key 생성" echo "==========================================" # 도움말 요청 확인 if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then usage exit 0 fi check_user_exists "$username" list_existing_keys "$username" create_preauth_key "$username" "$expiry" echo "" print_success "완료!" print_info "이 key는 $expiry 동안 유효하며, 여러 번 사용할 수 있습니다." } # 스크립트 실행 main "$@"