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);