From 35ce362d202cecc47a4c42e25e078c08a7d50c14 Mon Sep 17 00:00:00 2001 From: gahusb Date: Fri, 1 May 2026 09:39:27 +0900 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20-e=20=EC=9D=B8=EC=9E=90=20?= =?UTF-8?q?=EB=8B=A8=EB=94=B0=EC=98=B4=ED=91=9C=20=EB=B3=80=EA=B2=BD=20+?= =?UTF-8?q?=20=ED=82=A4=ED=8C=8C=EC=9D=BC=20=EC=A1=B4=EC=9E=AC=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - -e 'ssh ...' 단따옴표 사용으로 -i 경로의 따옴표 충돌 방지 - 키 파일 없을 때 명확한 에러 메시지 출력 후 종료 Co-Authored-By: Claude Sonnet 4.6 --- scripts/deploy-nas.cjs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/scripts/deploy-nas.cjs b/scripts/deploy-nas.cjs index 751ba60..6694e29 100644 --- a/scripts/deploy-nas.cjs +++ b/scripts/deploy-nas.cjs @@ -57,14 +57,24 @@ if (isWin) { } // macOS Keychain은 서브프로세스(rsync)에서 SSH 키를 자동 로드하지 못함 → -i 명시 - const keyFile = process.env.NAS_SSH_KEY || path.join(os.homedir(), ".ssh", "id_rsa"); + const keyFile = (process.env.NAS_SSH_KEY || path.join(os.homedir(), ".ssh", "id_rsa")) + .replace(/[\r\n]/g, "").trim(); + + if (!fs.existsSync(keyFile)) { + console.error(`SSH 키 파일을 찾을 수 없습니다: ${keyFile}`); + console.error("NAS_SSH_KEY 환경변수를 올바른 키 경로로 설정하거나, ~/.ssh/id_rsa 가 있는지 확인하세요."); + process.exit(1); + } + const portOpt = cleanPort ? `-p ${cleanPort}` : ""; - const sshCmd = `ssh ${portOpt} -i "${keyFile}" -o StrictHostKeyChecking=accept-new -o BatchMode=yes`.trim(); + // -e 인자는 단따옴표로 감싸야 -i 경로의 공백/따옴표 충돌을 방지 + const sshCmd = `ssh ${portOpt} -i ${keyFile} -o StrictHostKeyChecking=accept-new -o BatchMode=yes` + .replace(/\s+/g, " ").trim(); console.log(`Deploying via SSH → ${cleanTarget}:${cleanPath}`); console.log(`SSH command: ${sshCmd}`); execSync( - `rsync -r --delete --delete-delay -e "${sshCmd}" ${src}/ ${cleanTarget}:${cleanPath}`, + `rsync -r --delete --delete-delay -e '${sshCmd}' ${src}/ ${cleanTarget}:${cleanPath}`, { stdio: "inherit" } ); process.exit(0);