오늘도 공부
🚀 원격 서버(SSH)에서 Codex CLI 로그인하기 — 브라우저 없이 Headless 환경에서 인증하는 방법 본문
CI 서버나 클라우드 서버처럼 브라우저가 없는 환경에서 Codex CLI를 사용하려고 하면, 로그인 과정에서 OAuth 인증과 http://localhost:1455/auth/callback 콜백이 필요해 곤란해지는 경우가 있습니다.
이 글에서는 SSH 포트 포워딩을 활용해 원격 서버에서 Codex CLI 로그인 플로우를 정상적으로 완료하는 방법을 정리합니다.
🧩 문제 상황
원격 서버에서 Codex CLI 로그인 시도 중, 브라우저 로그인 후 콜백이 이렇게 떨어집니다:
http://localhost:1455/auth/callback?code=...&scope=...&state=...
하지만:
- 콜백 서버는 원격 서버에서 실행 중
- 콜백 URL은 브라우저의 localhost(내 PC)로 호출됨
즉,
브라우저는 내 PC로 요청을 보냈고
Codex CLI는 원격 서버에서 기다리고 있어서
인증이 연결되지 않음
✅ 해결 방법: SSH 포트 포워딩 사용
핵심 아이디어는 간단합니다:
내 PC의 localhost:1455 ↔ 원격 서버의 localhost:1455 를 SSH 터널로 연결한다.
그럼 브라우저에서 호출되는 콜백이 그대로 원격 Codex CLI로 전달됩니다.
1️⃣ SSH 접속 시 포트포워딩 옵션 추가
로컬(맥/PC)에서:
ssh -i <pem-key>.pem -L1455:localhost:1455 ubuntu@<SERVER_IP>
의미:
- -L1455:localhost:1455
→ 내 PC localhost:1455 ⇄ 원격 서버 localhost:1455
이 세션은 로그인 과정이 끝날 때까지 계속 열어둡니다.
2️⃣ 원격 서버에서 Codex 로그인 실행
원격 쉘 내부에서:
codex login
터미널에 아래와 같은 메시지가 표시됩니다:
Open this URL in your browser to log in:
https://auth.openai.com/authorize?...redirect_uri=http://localhost:1455/auth/callback
⚠️ 여기서 복사해야 하는 것은
https://auth.openai.com/... 로 시작하는 로그인 URL 입니다.
콜백 URL이 아닙니다.
3️⃣ 로그인 URL을 로컬 브라우저에서 열기
1️⃣ 로그인 URL을 브라우저에 붙여넣기
2️⃣ OpenAI 계정 로그인
3️⃣ 로그인 완료 후 자동으로 리다이렉트:
http://localhost:1455/auth/callback?code=...
하지만 이 시점에서:
- 브라우저 기준 localhost:1455 → 내 PC
- SSH 포워딩 덕분에
→ 실제로는 원격 서버 localhost:1455 로 전달됨
👉 원격 서버에서 대기 중이던 Codex CLI가 콜백을 정상적으로 수신!
4️⃣ 로그인 완료 확인
원격 서버 터미널에서:
codex exec "echo hello"
정상 동작하면 로그인 성공 🎉
🧠 왜 이 방식이 필요한가?
Codex CLI의 OAuth 인증은:
- 콜백 서버 = CLI 실행 머신(localhost)
- 브라우저 = 로그인 UI가 열리는 머신
으로 가정되어 있습니다.
하지만 서버는 브라우저가 없기 때문에
SSH 포트 포워딩으로 둘을 “같은 localhost처럼 연결”
하여 인증 흐름을 완성하는 방식입니다.
🔁 대안: 인증 파일을 번들로 이동(Headless 서버 다수일 때 추천)
- 로컬에서 로그인 후
- Codex 인증 디렉터리를 export
- 서버에 import
전용 스크립트를 사용하면 CI 환경에서 매우 편리합니다.
(예: ~/.config/codex, ~/.local/share/codex 복사)
큰 규모 환경에서는 이 방법 + Vault 조합이 더 안정적입니다.
📝 마무리
이번 과정에서 배운 포인트:
- 브라우저 콜백 URL은 터미널에서 실행하는 명령이 아님
- 콜백은 CLI 프로세스가 떠 있는 곳으로 전달되어야 함
- SSH 포트포워딩으로 이를 해결 가능
- Headless 환경에서도 Codex CLI 사용 가능
💡 참고 팁
- -N 옵션으로 포트포워딩만 유지 가능
ssh -i key.pem -N -L1455:localhost:1455 ubuntu@SERVER
- 여러 서버에 배포 시:
→ 인증 번들 이관 방식이 더 효율적
🎯 결론
SSH 포트포워딩을 통해
원격 서버에서도 Codex CLI OAuth 로그인을
안전하게 완료할 수 있다.
