헤드리스 서버에서 Codex에 로그인하는 방법

브라우저가 없는 서버에서 디바이스 코드 로그인, SSH 터널, auth.json 복사, API 키로 Codex CLI에 로그인하고, 휴대폰에서도 로그인을 쓸 수 있게 유지하는 방법.

기준 버전
CLI
0.2.17
프리뷰 ref
a2c45c8

요약

codex login은 머신에서 작은 콜백 서버를 시작하고 브라우저가 localhost로 돌아오기를 기다립니다. 헤드리스 서버에서는 그 브라우저가 다른 곳에 있습니다. 시도할 순서대로 정리한 선택지:

  1. 디바이스 코드: codex login --device-auth. 아무 기기에서나 링크를 열고 일회용 코드를 입력하면 끝입니다. 먼저 ChatGPT 보안 설정에서 스위치를 켜야 할 수 있습니다.
  2. SSH 터널: 노트북에서 1455 포트를 포워딩한 뒤 codex login을 실행하고 일반 브라우저 흐름을 마칩니다.
  3. auth.json 복사: 브라우저가 있는 컴퓨터에서 로그인한 뒤 ~/.codex/auth.json을 서버로 복사합니다.
  4. API 키: 어차피 토큰 단위 과금을 원하는 스크립트와 CI용입니다.

결과는 codex login status로 확인하세요.

문제

흔한 구성: 노트북이 잠들어도 긴 작업이 계속되도록 Codex를 작은 Linux 서버에서 실행합니다. 거기서 처음 codex login을 실행하면 URL이 출력됩니다. 노트북에서 열어 로그인하면 마지막 리디렉션이 노트북의 localhost:1455에 도착합니다. 거기에는 아무것도 수신 대기하고 있지 않으므로 로그인이 어디에도 닿지 않습니다.

내 계정에 맞는 경로만 알면 해결은 쉽습니다. 번거로운 점은 손쉬운 경로인 디바이스 코드가 일부 계정에서는 설정을 바꾸기 전까지 꺼져 있다는 것입니다.

방법 1: codex login --device-auth로 Codex 로그인

서버에서:

codex login --device-auth

Codex가 링크와 일회용 코드를 출력합니다. 노트북이나 휴대폰 브라우저에서 링크를 열고 ChatGPT에 로그인한 뒤 코드를 입력하세요. 터미널은 알아서 완료됩니다. 서버로 다시 연결할 필요가 없어서 NAT 뒤나 컨테이너에서도 동작합니다.

알아 둘 점:

  • 스위치. 디바이스 코드 로그인은 ChatGPT 보안 설정에서, 또는 관리자가 워크스페이스 설정에서 켜야 할 수 있습니다. 명령이 바로 실패한다면 먼저 이것을 확인하세요.
  • 코드는 수명이 짧습니다. 중간에 다른 일을 했다면 예전 코드를 재사용하지 말고 다시 시작하세요.
  • 내 터미널이 출력한 코드만 입력하세요. 디바이스 코드는 그것을 요청한 터미널을 로그인시킵니다. 누군가 보내 준 코드는 그 사람의 컴퓨터를 내 계정에 로그인시키려는 요청입니다.

방법 2: SSH로 Codex 로그인 콜백 터널링

디바이스 코드가 꺼져 있고 바꿀 수 없다면, 일반 브라우저 흐름을 유지하고 콜백을 SSH로 전달하세요. 노트북에서:

ssh -L 1455:localhost:1455 you@server

그 SSH 세션 안에서 codex login을 실행하고 출력된 URL을 노트북 브라우저에서 엽니다. 로그인이 localhost:1455로 리디렉션되면 터널이 서버의 Codex 프로세스로 전달합니다.

실패한다면:

  • 노트북에서 1455 포트를 다른 것이 쓰고 있지 않은지 확인하세요.
  • 새로 시작하기 전에 서버의 오래된 codex login 프로세스를 종료하세요. 남은 프로세스가 포트를 잡고 있을 수 있습니다.
  • codex login은 Codex 로그 디렉터리에 codex-login.log 파일을 씁니다. 브라우저 단계와 터미널 결과가 다를 때 읽어 보세요.

방법 3: 브라우저가 있는 컴퓨터에서 Codex auth.json 복사

노트북에서 codex login으로 로그인한 뒤 자격 증명 파일을 복사합니다.

scp ~/.codex/auth.json you@server:~/.codex/auth.json

OpenAI는 이를 대체 방법으로 안내하며, 자주 다시 만드는 머신에 편리합니다. 이 파일은 비밀번호처럼 다루세요. 가진 사람은 누구든 내 ChatGPT 계정에 로그인됩니다.

노트북이 Codex 자격 증명을 auth.json이 아니라 OS 키링에 보관한다면 복사할 파일이 없습니다. cli_auth_credentials_store로 파일 저장으로 바꾸는 방법은 OpenAI 문서에 나와 있습니다.

방법 4: 스크립트와 CI에는 OpenAI API 키 사용

printenv OPENAI_API_KEY | codex login --with-api-key

API 키 인증은 OpenAI Platform 계정을 통해 표준 API 요금으로 과금되며 ChatGPT 구독과는 별개입니다. OpenAI는 CI 작업 같은 프로그래밍 방식의 워크플로에 이를 권장하며, 일부 ChatGPT 워크스페이스 기능은 쓸 수 없습니다.

휴대폰에서도 Codex 로그인을 쓸 수 있게 유지하기

한 번 로그인하는 것은 쉽습니다. 어려운 것은 자리를 비운 사이 서버의 로그인이 만료되고, 휴대폰에서 시작한 세션이 아무것도 하지 않고 있는 걸 보고서야 알게 되는 상황입니다.

서버의 Codex 세션을 휴대폰에서 시작하고, SSH 앱을 열지 않고 상태를 확인하고 명령을 승인하고 싶다면, Happier는 Codex, Claude Code 등 여러 에이전트를 휴대폰, 데스크톱, 웹에서 크로스 디바이스로 실행하고 오케스트레이션할 수 있는 오픈 소스 앱입니다.

에이전트는 내 컴퓨터에서 실행되고 휴대폰, 데스크톱, 웹 앱이 여기에 연결됩니다. 설정 방법은 휴대폰에서 Happier 사용하기에 있습니다. GitHub에 공개되어 있고, 여기서 다운로드할 수 있으며, Discord도 있습니다.

1) 서버에 Happier를 설치하고 휴대폰과 페어링

curl -fsSL https://happier.dev/install | bash
happier auth login --method mobile

휴대폰의 Happier 앱으로 QR 코드를 스캔하고 승인하세요. 서버가 세션을 시작할 수 있는 컴퓨터(Happier에서는 machine)로 표시됩니다.

2) Happier 앱에서 Codex 로그인 확인 및 새로 고침

Settings → AI & Agents → AI backends → Codex를 열고, 컨텍스트 바에서 서버를 고른 뒤 Authentication 섹션을 읽으세요. 그 컴퓨터에서 Codex가 로그인되어 있는지, 어떤 방식인지 보여 줍니다.

Log in 또는 Reauthenticate는 서버에서 codex login을 실행하는 Provider login terminal을 엽니다. SSH로 codex login --device-auth를 실행하는 등 다른 방법으로 로그인한 뒤에는 Check now로 상태를 새로 고칩니다.

3) Codex 로그인을 Happier에 연결된 서비스로 저장

Happier는 Codex 구독 로그인을 연결된 서비스로 저장할 수도 있습니다. Happier 계정에 암호화되어 저장되고 내 기기에서만 복호화되므로, 어느 컴퓨터의 세션에서든 쓸 수 있습니다.

happier connect codex --device    # device-code flow, for a headless box
happier connect codex --paste     # fallback: paste the final redirect URL
happier connect codex --api-key   # store an OpenAI API key instead

--device는 방법 1과 같은 디바이스 코드 로그인을 쓰므로 같은 ChatGPT 설정이 적용됩니다. --paste는 방법 2의 터널 없는 버전입니다. 노트북에서 로그인하고 브라우저가 마지막에 머문 URL을 복사해 터미널에 붙여 넣습니다. 그러면 계정이 Settings → Connected services에 나타나고 Codex 세션을 시작할 때 고를 수 있습니다.

한계는 한 번만 말씀드리겠습니다. 서버는 여전히 켜져 있고 온라인이어야 합니다. Happier는 로그인 상태를 휴대폰에서 보이고 고칠 수 있게 할 뿐, 꺼진 머신의 로그인을 유지하지는 않습니다.

문제 해결

codex login --device-auth가 바로 실패함

계정에서 디바이스 코드 로그인이 꺼져 있을 가능성이 큽니다. ChatGPT 보안 설정에서 켜거나 워크스페이스 관리자에게 요청하세요. 그럴 수 없다면 SSH 터널이나 auth.json 복사를 쓰세요.

Codex 로그인 브라우저 탭이 localhost:1455에 닿지 못함

콜백이 노트북에 닿으려는 것입니다. SSH 터널을 열고 다시 시도하거나, happier connect codex --paste를 쓰고 주소창의 URL을 붙여 넣으세요.

codex login status는 로그인됨이라는데 서비스의 Codex 세션이 실패함

서비스가 다른 사용자나 다른 홈 디렉터리로 실행되어 다른 ~/.codex를 읽고 있을 수 있습니다. 서비스가 실행되는 사용자로 로그인하거나, 로그인을 연결된 서비스로 저장해 세션이 시작 시 받도록 하세요.

Codex 원격 제어가 ChatGPT 인증이 필요하다고 함

API 키로 로그인되어 있습니다. 원격 제어에는 ChatGPT 로그인이 필요하므로 방법 1, 2, 3 중 하나를 쓰세요.

자주 묻는 질문

어디에도 브라우저 없이 Codex에 로그인할 수 있나요?

API 키로만 가능합니다. ChatGPT 로그인 방법은 모두 어떤 기기의 브라우저를 쓰지만, 휴대폰이어도 됩니다.

auth.json을 복사해도 안전한가요?

동작은 하지만 비밀번호만큼 민감합니다. 내 사용자만 읽을 수 있게 하고, 커밋하거나 공유 이미지에 넣지 마세요.

디바이스 코드 로그인이 Docker에서도 되나요?

네. 컨테이너로 콜백이 들어오지 않으므로 잘 맞습니다.

어떤 구독에서 되나요?

Codex가 포함된 ChatGPT 구독이나 OpenAI API 키입니다. 어떤 구독에 Codex가 포함되는지는 OpenAI 요금 페이지에 나와 있습니다.

관련 가이드

codexsshlinuxheadlessself-host
마지막 업데이트: 2026-10-26