Recent Posts
Recent Comments
반응형
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

오늘도 공부

🚀 원격 서버(SSH)에서 Codex CLI 로그인하기 — 브라우저 없이 Headless 환경에서 인증하는 방법 본문

AI/생성형 AI

🚀 원격 서버(SSH)에서 Codex CLI 로그인하기 — 브라우저 없이 Headless 환경에서 인증하는 방법

행복한 수지아빠 2026. 1. 2. 11:39
반응형

 

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 로그인을
안전하게 완료할 수 있다.

 

반응형