From 638546a55416e46196b7a683f26ebdaeb4cc5b9d Mon Sep 17 00:00:00 2001 From: KWON Date: Tue, 23 Dec 2025 13:04:04 +0900 Subject: [PATCH] Fix stdin redirection for curl | bash execution - add /dev/tty to all read commands --- lxc/setup_mariadb.sh | 60 ++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/lxc/setup_mariadb.sh b/lxc/setup_mariadb.sh index 14bd3ae..fbcecfb 100644 --- a/lxc/setup_mariadb.sh +++ b/lxc/setup_mariadb.sh @@ -4,6 +4,7 @@ # root 계정에서 실행 # Linux / DB 계정 통합 여부 선택 가능 # dotfiles는 git에서 다운로드 +# 파이프 실행 지원 (curl | bash) set -euo pipefail @@ -14,6 +15,21 @@ DOTFILES_BASE_URL="https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch LINUX_USER="" DB_USER="" +# 터미널 입력 헬퍼 함수 +# curl | bash로 실행할 때 /dev/tty에서 입력을 받도록 함 +read_input() { + local prompt="$1" + local var_name="$2" + local is_secret="${3:-false}" + + if [ "$is_secret" = "true" ]; then + read -s -p "$prompt" "$var_name" < /dev/tty + echo "" >&2 + else + read -p "$prompt" "$var_name" < /dev/tty + fi +} + # 오류 처리 및 초기화 함수 cleanup() { EXIT_CODE=$? @@ -25,7 +41,7 @@ cleanup() { # LINUX_USER가 설정되어 있으면 초기화 옵션 제공 if [ -n "$LINUX_USER" ]; then - read -p "초기화하고 다시 시작하시겠습니까? (y/n): " REINIT + read_input "초기화하고 다시 시작하시겠습니까? (y/n): " REINIT if [[ "$REINIT" =~ ^[Yy]$ ]]; then echo "" echo "⚠️ $LINUX_USER 사용자 및 관련 설정을 초기화합니다..." @@ -76,7 +92,7 @@ echo "✓ 필수 패키지 설치 완료" # ------------------------------------------------- # 2. Linux 사용자 정보 입력 # ------------------------------------------------- -read -p "Linux 사용자 이름: " LINUX_USER +read_input "Linux 사용자 이름: " LINUX_USER # 사용자 존재 확인 및 재생성 옵션 if id "$LINUX_USER" &>/dev/null; then @@ -86,11 +102,11 @@ if id "$LINUX_USER" &>/dev/null; then echo " 1) 기존 사용자 사용 (비밀번호는 변경하지 않음)" echo " 2) 사용자 삭제 후 재생성 (홈 디렉토리 포함 삭제)" echo "" - read -p "선택 (1 또는 2): " USER_ACTION + read_input "선택 (1 또는 2): " USER_ACTION case $USER_ACTION in 2) - read -p "정말로 '$LINUX_USER'을(를) 삭제하고 재생성하시겠습니까? (y/n): " CONFIRM + read_input "정말로 '$LINUX_USER'을(를) 삭제하고 재생성하시겠습니까? (y/n): " CONFIRM if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then echo "사용자 삭제 중..." userdel -r "$LINUX_USER" 2>/dev/null || userdel "$LINUX_USER" 2>/dev/null || true @@ -98,7 +114,7 @@ if id "$LINUX_USER" &>/dev/null; then # 새 비밀번호 입력 (재시도 옵션) while true; do - read -s -p "새로운 Linux 사용자 비밀번호: " LINUX_PW + read -s -p "새로운 Linux 사용자 비밀번호: " LINUX_PW < /dev/tty echo "" # 비밀번호 입력 확인 @@ -107,12 +123,12 @@ if id "$LINUX_USER" &>/dev/null; then continue fi - read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM + read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM < /dev/tty echo "" if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다." - read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW_2 + read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW_2 < /dev/tty RETRY_PW_2=${RETRY_PW_2:-Y} if [[ ! "$RETRY_PW_2" =~ ^[Yy]$ ]]; then echo "비밀번호 입력을 취소했습니다." @@ -137,7 +153,7 @@ if id "$LINUX_USER" &>/dev/null; then else # 새 사용자 생성 (비밀번호 입력) while true; do - read -s -p "Linux 사용자 비밀번호: " LINUX_PW + read -s -p "Linux 사용자 비밀번호: " LINUX_PW < /dev/tty echo "" # 비밀번호 입력 확인 @@ -146,16 +162,16 @@ else continue fi - read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM + read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM < /dev/tty echo "" if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다." - read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW + read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW < /dev/tty RETRY_PW=${RETRY_PW:-Y} if [[ ! "$RETRY_PW" =~ ^[Yy]$ ]]; then echo "" - read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT + read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT < /dev/tty RESTART_SCRIPT=${RESTART_SCRIPT:-Y} if [[ "$RESTART_SCRIPT" =~ ^[Yy]$ ]]; then exit 1 @@ -172,7 +188,7 @@ else fi # MariaDB 계정 설정 -read -p "MariaDB 계정을 Linux 계정과 동일하게 사용할까요? (Y/n): " SAME_ACCOUNT +read -p "MariaDB 계정을 Linux 계정과 동일하게 사용할까요? (Y/n): " SAME_ACCOUNT < /dev/tty SAME_ACCOUNT=${SAME_ACCOUNT:-Y} if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then @@ -182,7 +198,7 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then else # 기존 사용자의 경우 비밀번호 입력 while true; do - read -s -p "MariaDB 비밀번호: " DB_PW + read -s -p "MariaDB 비밀번호: " DB_PW < /dev/tty echo "" # 비밀번호 입력 확인 @@ -191,16 +207,16 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then continue fi - read -s -p "MariaDB 비밀번호 확인: " DB_PW_CONFIRM + read -s -p "MariaDB 비밀번호 확인: " DB_PW_CONFIRM < /dev/tty echo "" if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then echo "❌ MariaDB 비밀번호가 일치하지 않습니다." - read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW + read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW < /dev/tty RETRY_DB_PW=${RETRY_DB_PW:-Y} if [[ ! "$RETRY_DB_PW" =~ ^[Yy]$ ]]; then echo "" - read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT2 + read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT2 < /dev/tty RESTART_SCRIPT2=${RESTART_SCRIPT2:-Y} if [[ "$RESTART_SCRIPT2" =~ ^[Yy]$ ]]; then exit 1 @@ -216,10 +232,10 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then fi echo "→ DB 사용자/비밀번호를 Linux 계정과 동일하게 사용합니다." else - read -p "MariaDB 사용자 이름: " DB_USER + read -p "MariaDB 사용자 이름: " DB_USER < /dev/tty # MariaDB 사용자 비밀번호 입력 (재시도 옵션) while true; do - read -s -p "MariaDB 사용자 비밀번호: " DB_PW + read -s -p "MariaDB 사용자 비밀번호: " DB_PW < /dev/tty echo "" # 비밀번호 입력 확인 @@ -228,16 +244,16 @@ else continue fi - read -s -p "MariaDB 사용자 비밀번호 확인: " DB_PW_CONFIRM + read -s -p "MariaDB 사용자 비밀번호 확인: " DB_PW_CONFIRM < /dev/tty echo "" if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then echo "❌ MariaDB 비밀번호가 일치하지 않습니다." - read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW2 + read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW2 < /dev/tty RETRY_DB_PW2=${RETRY_DB_PW2:-Y} if [[ ! "$RETRY_DB_PW2" =~ ^[Yy]$ ]]; then echo "" - read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT3 + read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT3 < /dev/tty RESTART_SCRIPT3=${RESTART_SCRIPT3:-Y} if [[ "$RESTART_SCRIPT3" =~ ^[Yy]$ ]]; then exit 1 @@ -363,7 +379,7 @@ EXISTING_USER=$(mysql -u root -se "SELECT COUNT(*) FROM mysql.user WHERE User='$ if [ "$EXISTING_USER" -gt 0 ]; then echo "⚠️ DB 사용자 '$DB_USER'이(가) 이미 존재합니다." - read -p "기존 사용자의 비밀번호를 변경하시겠습니까? (Y/n): " UPDATE_PW + read -p "기존 사용자의 비밀번호를 변경하시겠습니까? (Y/n): " UPDATE_PW < /dev/tty UPDATE_PW=${UPDATE_PW:-Y} if [[ "$UPDATE_PW" =~ ^[Yy]$ ]]; then mysql -u root <