GitHub Copilot CLI는 지원되는 Windows 클라이언트에서 Windows Server에 호스팅된 OpenAI 호환 추론 엔드포인트로 모델 요청을 보낼 수 있는 AI 코딩 에이전트입니다. 이 구성은 터미널에서 조직 호스팅 모델을 사용하는 동안 Windows Server가 모델 호스팅과 컴퓨팅을 중앙 집중화할 수 있게 합니다.
이 글에서는 클라이언트 연결을 어떻게 구성하고 설정된 모델이 응답하는지 확인하는 방법을 안내합니다. 추론 서비스를 배포하거나 보호하지 않습니다.
Prerequisites
- GitHub Copilot CLI가 지원하는 Windows 버전을 실행하는 클라이언트 컴퓨터로, 다음과 같습니다:
- PowerShell 6 이상.
- Windows 패키지 관리자 (윙겟).
- 활성 GitHub Copilot 구독입니다. 조직이나 기업이 구독을 제공한다면, 관리자는 GitHub Copilot CLI를 허용해야 합니다.
- GitHub Copilot CLI를 시작할 수 있는 신뢰할 수 있는 작업 디렉터리입니다.
- Windows Server에 존재하는 기존 OpenAI 호환 엔드포인트:
- 클라이언트 컴퓨터에서 접근 가능합니다.
- 인증이 필요합니다. 이 절차는 원격 Windows Server 연결에도 적용됩니다. 인증 없이 엔드포인트는 이 절차 외의 루프백 전용 시나리오를 위해 예약하세요.
- 의도된 서버 네트워크 인터페이스에서만 청취하며, 권한 있는 클라이언트 컴퓨터나 서브넷에서만 인바운드 연결을 허용하고, 공용 인터넷에서의 직접 연결은 허용하지 않습니다.
- 스트리밍과 도구 또는 함수 호출을 지원합니다. OpenAI 호환성만으로 모든 GitHub Copilot CLI 기능에 대한 지원을 보장하지는 않습니다. 엔드포인트 운영자와 선택된 모델 기능을 검증하세요.
- Windows 클라이언트에서 Windows Server로의 네트워크 연결은 다음과 같습니다:
- 클라이언트 컴퓨터에서 해결되는 Windows Server 추론 엔드포인트의 DNS 이름입니다.
- 네트워크 라우팅과 방화벽 규칙으로, 권한 있는 클라이언트나 서브넷만 엔드포인트 포트에 연결할 수 있습니다.
- 클라이언트가 신뢰하는 HTTPS 인증서로, 그 주제 이름 또는 주제 대체 이름이 엔드포인트 DNS 이름과 일치합니다.
- 엔드포인트 기본 URL, 예를 들어
https://inference.contoso.com/v1. - 엔드포인트 운영자가 지정한 엔드포인트 자격 증명과 인증 유형.
GitHub Copilot CLI 설치
PowerShell을 엽니다.
안정적인 GitHub Copilot CLI 패키지를 설치하세요:
winget install GitHub.Copilot설치가 성공했는지 확인하세요:
copilot --version명령어는 설치된 GitHub Copilot CLI 버전을 반환합니다.
Windows Server 추론 엔드포인트에서 모델 ID를 얻습니다
엔드포인트 운영자가 제공한 기본 URL을 설정하세요:
$BaseUrl = 'https://inference.contoso.com/v1'엔드포인트 운영자가 지정한 API 키 또는 베어러 토큰을 입력하세요. 단기간 사용 가능한 최소 권한 자격 증명을 사용하세요. 조직에서 승인된 비밀 저장 명령어를 제공할 때, 직접 입력하지 않고 자격 증명을 가져오는 데 사용하세요. 다음 명령어는 값 값을
SecureString평문$endpointCredential값으로 변환하며, 이 값은 이 PowerShell 세션 동안 메모리에 남아 있습니다.$secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).PasswordGET에$BaseUrl/models요청을 보내세요.$endpointCredential헤더에Authorization: Bearer을(를) 포함하고, 응답의data배열에서 각 모델 ID를 읽습니다:$requestParameters = @{ Uri = "$BaseUrl/models" Method = 'Get' } try { $requestParameters.Headers = @{ Authorization = "Bearer $endpointCredential" } $models = Invoke-RestMethod @requestParameters $models.data | Select-Object -ExpandProperty id } finally { $requestParameters.Headers = $null }이 명령어는 하나 이상의 모델 ID를 반환합니다. 스트리밍과 도구 또는 함수 호출을 지원하는 모델의 정확한 ID를 복사하세요.
GitHub Copilot CLI 제공자 및 모델을 구성하세요
$endpointCredential를 Windows Server 엔드포인트 기본 URL로 설정하고$BaseUrl를 해당 API 키 또는 베어러 토큰으로 설정하세요. 같은 PowerShell 세션에서 제공자 유형, 엔드포인트 기본 URL, 정확한 모델 ID를 설정하세요. Windows Server 엔드포인트가 반환하는 ID로 대체<MODEL_ID>하세요.$env:COPILOT_PROVIDER_TYPE = 'openai' $env:COPILOT_PROVIDER_BASE_URL = $BaseUrl $env:COPILOT_MODEL = '<MODEL_ID>'제공자 유형은
openaivLLM을 포함한 OpenAI 호환 엔드포인트를 지원합니다.현재 PowerShell 세션이 상속받은 모든 제공자 인증 변수를 삭제하세요:
Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue엔드포인트 운영자가 지정한 인증 방법을 구성하세요:
표준 OpenAI API 키 인증을 위해서는 조직에서 승인한 비밀 저장 명령어가 있을 때 사용할 수 있습니다:
$env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'명령어는 승인된 비밀 저장소에서 자격 증명을 가져와야 하며, 자격 증명만 출력하고 기록하거나 보존하지 않아야 합니다.
COPILOT_PROVIDER_API_KEY_COMMAND가COPILOT_PROVIDER_API_KEY보다 우선합니다.승인된 비밀 저장소 명령어가 없다면, 현재 PowerShell 세션의 단기 백업으로 API 키를 직접 설정하세요:
$env:COPILOT_PROVIDER_API_KEY = $endpointCredential베어러-토큰 인증을 위해 베어러 토큰을 설정하세요:
$env:COPILOT_PROVIDER_BEARER_TOKEN = $endpointCredential
Important
스크립트, 소스 컨트롤, 명령 예제에 API 키를 넣지 마세요.
copilot그리고 시작한 모든 프로세스는 제공자 인증 환경 변수를 상속받습니다. 단기간의 최소 권한 자격 증명을 사용하고, GitHub Copilot CLI를 종료한 후 변수를 제거하세요.설치된 버전에서 지원되는 제공자 변수를 검토하세요:
copilot help providers
GitHub Copilot CLI 시작 및 검증
신뢰할 수 있는 파일이 있는 디렉터리로 변경하세요:
Set-Location 'C:\path\to\trusted-project'
Important
시작하기 copilot전에 멈췄거나 이전 명령이 실패하면, 제공자 인증 변수를 제거하고 요청 헤더를 지우고 보안 자격 증명을 폐기한 후 PowerShell을 종료하세요:
if ($requestParameters) {
$requestParameters.Headers = $null
}
Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
if ($secureEndpointCredential) {
$secureEndpointCredential.Dispose()
}
정리가 실행되면 PowerShell 세션을 종료하세요. 변경 불가능한 평문 $endpointCredential 문자열은 프로세스가 종료될 때까지 메모리에 남아 있습니다.
GitHub Copilot CLI를 시작하고 검증 단계를
try블록에서 실행하여, 종료할 때 또는 명령이 실패할 때 PowerShell이 공급자 인증 환경 변수를 제거하고SecureString값을 삭제하도록 하세요:try { copilot } finally { if ($requestParameters) { $requestParameters.Headers = $null } Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue if ($secureEndpointCredential) { $secureEndpointCredential.Dispose() } }trusted-directory 프롬프트를 확인하세요. 디렉터리의 내용을 통제하고 신뢰를 유지할 것으로 기대할 때만 향후 세션에 대해 신뢰하세요.
GitHub Copilot CLI에서 입력하라는 메시지가 표시되면
/login을 입력하고 GitHub에 인증하라는 안내에 따라 진행하세요. GitHub 인증은 추론 엔드포인트에 인증하는 API 키와는 별개입니다.이 테스트 프롬프트를 입력하세요:
Reply with exactly: Local inference test succeededWindows Server 엔드포인트에서 구성된 모델은 제공자, 인증, 모델 호환성 오류 없이 반환
Local inference test succeeded됩니다. GitHub Copilot CLI를 종료하면 PowerShell이 블록을finally실행합니다. PowerShell은 변경 불가능한 평문$endpointCredential문자열을 메모리에서 신뢰성 있게 지울 수 없으므로, 명령이 완료된 후 PowerShell 세션을 종료하여 프로세스 메모리를 해제하세요.
GitHub Copilot CLI Windows Server 추론 엔드포인트 연결 문제 해결
| 문제 | 확인할 사항 |
|---|---|
| 모델 요청이 엔드포인트에 도달할 수 없습니다 | 엔드포인트 기본 URL, DNS 해석, 포트, 네트워크 경로, 서비스 상태, TLS 인증서 신뢰도를 확인하세요. 기본 URL에는 엔드포인트 운영자가 제공하는 API 프리픽스(예: /v1.)가 포함되어야 합니다. |
모델들은 반품 401 을 요청하거나 403 |
자격 증명이 유효한지 확인하세요. API 키 인증의 경우, 승인된 secret-store 명령과 함께 COPILOT_PROVIDER_API_KEY_COMMAND를 사용하는 것이 좋습니다. 단기간 대비책으로만 사용 COPILOT_PROVIDER_API_KEY 하세요. 베어러 토큰 인증의 경우, 엔드포인트 연산자가 지정한 대로 로 설정합니다 COPILOT_PROVIDER_BEARER_TOKEN. |
| GitHub Copilot CLI는 다른 공급자나 모델을 사용합니다 | 제공자 유형, 기본 URL, 모델, 그리고 선택한 인증 변수를 같은 PowerShell 세션에서 설정 copilot하세요. 엔드포인트가 반환하는 정확한 모델 ID를 사용하세요. 또한 $HOME\.copilot\providers.json도 확인해 보세요; 해당 파일의 공급자 또는 모델 선언이 COPILOT_PROVIDER_* 변수보다 우선 적용됩니다. |
| GitHub Copilot CLI가 모델을 찾을 수 없습니다 |
$BaseUrl/models에 다시 쿼리한 후, id 값을 엔드포인트가 반환하는 COPILOT_MODEL 값과 대소문자와 구두점까지 포함하여 비교하세요. |
| 엔드포인트가 요청을 수락한 후 프롬프트는 실패합니다 | 모델과 엔드포인트가 스트리밍과 도구 또는 함수 호출을 모두 지원하는지 확인하세요. 엔드포인트 로그에서 지원되지 않는 요청 필드, 도구 스키마, 컨텍스트 제한, 응답 형식이 있는지 검토하세요. |