Google의 Gemini CLI를 SSH를 통해 서버에 안전하게 연결하는 방법
요약
본 문서는 Google의 Gemini CLI를 SSH를 통해 외부 서버 환경에서 안전하게 사용하는 방법을 안내합니다. 기존 방식처럼 키 파일 전체 접근 권한을 넘기는 대신, Termalin이라는 MCP(Message Channel Protocol) 기반 클라이언트를 사용하면 에이전트가 직접 키에 접근하지 않고도 서버 명령 실행 및 관리가 가능해집니다.
핵심 포인트
- Gemini CLI는 터미널에서 유능한 에이전트로 작동하며 서버 접근이 필수적입니다.
- Termalin은 MCP 프로토콜을 사용하여 Gemini와 안전하게 통신하는 SSH 클라이언트 역할을 합니다.
- 에이전트 접근은 기본적으로 비활성화되어 있으며, Termalin 내에서 호스트 및 정책 설정을 통해 제어해야 합니다.
- 최소 권한 원칙(Principle of Least Privilege)에 따라 명령어 허용 목록을 설정하는 것이 중요합니다.
Gemini CLI는 MCP(Message Channel Protocol)로 통신하므로, ~/.gemini/settings.json 파일에 단 하나의 항목만 추가하고 키를 전달할 필요 없이 Termalin을 통해 서버에서 명령을 실행하고 파일을 관리합니다.
Google의 Gemini CLI는 터미널 내에서 유능한 에이전트이며, 다른 코딩 에이전트들과 마찬가지로 결국 노트북을 벗어나 실제 서버에 접근해야 합니다. 서비스를 재시작하거나, 로그를 확인(tail)하거나, 박스 자체에서 배포를 실행하는 등의 작업이 필요합니다. 가장 쉬운 지름길은 Gemini CLI가 ssh를 직접 실행하도록 하는 것입니다. 이미 CLI는 셸 명령을 실행할 수 있으므로, 만약 키가 ~/.ssh나 실행 중인 ssh-agent에 잠금 해제된 상태라면, 사용자가 의도했든 아니든 ssh prod이 작동하게 됩니다. 이것이 바로 한 줄의 코드 안에 담긴 전체 서버 접근 권한을 기본적으로 넘겨주는 문제입니다.
Gemini CLI는 더 깔끔한 경로를 내장하고 있습니다. Gemini CLI는 MCP라는 프로토콜로 통신하며, 이 프로토콜은 Claude Code, Cursor 및 Codex가 사용하는 것과 동일합니다. Termalin은 내장된 MCP 서버를 가진 SSH 클라이언트이므로, Gemini CLI를 이 서버에 연결하면 에이전트가 키를 보유하지 않으면서도 실제로 호스트에서 작동하게 됩니다. 약 20분 만에 하나의 호스트를 설정할 수 있습니다.
필요한 것들
- Termalin: 데스크톱 앱입니다. 무료 등급(Free tier)으로 충분합니다. Gemini가 통신하는 것은 여기에 내장된 MCP 서버입니다.
- Gemini CLI: 동일한 기기에 설치되어 있어야 합니다.
- Termalin에 저장된 호스트 하나: 첫 실행을 위해 위험도가 낮은(low-stakes) 호스트를 선택합니다.
1단계 — 에이전트 접근 활성화 및 정책 설정
에이전트 접근은 기본적으로 비활성화되어 있습니다. Termalin에서 설정(Settings) → MCP로 이동하여 이를 활성화하고, Gemini가 도달할 수 있는 호스트를 체크합니다. 이 목록 외에는 에이전트 입장에서 존재하지 않습니다. 새로운 호스트는 앱 내에서 사용자가 결정하는 것이지, 에이전트가 임의로 접근할 수 있는 것이 아닙니다.
내부적으로 Termalin은 MCP 서버를 위해 **에이전트 전용 인증 항목(agent-only auth entries)**을 가진 호스트 인벤토리 파일을 작성하며, 이 파일에는 비밀번호나 키가 포함되지 않습니다. 그리고 인증은 앱의 키 관리자에게 남아 있습니다. 즉, 한 번 잠금을 해제하면 Termalin이 에이전트를 대신하여 로그인합니다. Gemini가 읽을 수 있는 키 파일이 없으므로 유출될 것이 없어지고, 위에서 언급된 ~/.ssh 백도어는 함께 닫힙니다.
참고로, 각 호스트의 **에이전트 정책(agent policy)**도 설정하세요: 전체 접근 권한, 명령어 허용 목록(allowlist), 또는 차단. 관심 있는 모든 것에 대해서는 허용 목록으로 시작하는 것이 좋습니다. 최소 권한 원칙을 위한 설정은 그 자체로 짧은 게시물입니다.
2단계 — Gemini 설정에 서버 등록하기
Gemini CLI는 설정 파일의 mcpServers 객체에서 MCP 서버를 읽습니다. 모든 프로젝트의 경우 ~/.gemini/settings.json이며, 프로젝트별 로컬 파일은 .gemini/settings.json입니다. 번들된 termalin-mcp 바이너리를 가리키는 항목을 추가하세요:
{
"mcpServers": {
"termalin": {
...
이것으로 통합이 완료됩니다. Gemini CLI를 다시 시작하거나 (또는 MCP 서버를 새로고침) 하면, 에이전트에게 도구들이 나타납니다: hosts_list, ssh_exec, 영속 세션(session_open / session_exec), SFTP 읽기 및 쓰기, 포트 포워딩 등입니다. Gemini에서 /mcp를 실행하여 서버가 연결되었는지 확인하고 노출되는 도구들을 살펴보세요. 전체 도구 목록에 모든 것이 문서화되어 있습니다.
만약 MCP 자체를 연결하고 싶지 않다면, 더 가벼운 옵션이 있습니다: Termalin에는 로컬 터미널 탭이 있어, SSH 세션 옆에서 앱 내부에 gemini를 입력하여 CLI를 실행할 수 있습니다. 이렇게 하면 같은 창에서 Gemini를 사용할 수 있지만, 위에서 설명한 MCP 설정만이 키 관리자를 통해 Gemini가 사용자의 서버에 행동할 수 있게 해주며, 이것이 키를 접근 불가능하게 유지하는 부분입니다.
3단계 — 실제 과제를 부여하기
데모는 건너뛰세요. 실제로 할 일을 주세요:
staging-1 배포는 완료되었지만 상태 확인(health check)이 계속 불안정합니다. 원인을 찾아내고 수정하세요.
Gemini는 hosts_list를 호출하여 staging-1을 확인하고, 세션을 열어 스레드를 가져오기 시작합니다. 여기에는 서비스 상태, 최근 100개 로그 라인, 현재 실행 중인 것과의 설정 차이(config diff)가 포함됩니다. Gemini는 수정 사항을 제안하고, 사용자가 설정한 정책 내에서 이를 적용하며, 확인 절차가 정상적으로 완료되었음을 알려줍니다.
이 과정이 긴장되기보다는 편안하게 느껴지는 이유는 과정을 지켜볼 수 있기 때문입니다. 설정(Settings)에서 **터미널의 에이전트 활성화(Agent in Terminal)**를 켜면 Gemini가 앱 자체의 터미널 탭(terminal_open / terminal_run) 내에서 작업할 수 있습니다. 열리는 각 탭은 에이전트의 것으로 표시되며, watch grid 기능은 모든 열린 세션을 나란히 배치하고 에이전트의 타일이 빛나도록 표시하여, 사용자가 명령어가 실행되는 것을 보고 어느 시점에서든 개입할 수 있게 합니다. 헤드리스 호출(ssh_exec, session_*)은 탭을 열지 않고, 설정한 호스트 목록과 정책 내부에서 MCP 서버로부터 직접 실행됩니다.
경계가 되는 지점들
중요한 곳에 연결하기 전에 알아두면 좋은 기본 사항들:
- 사용자의 키는 Gemini의 환경으로 절대 들어가지 않습니다. 관리자(custodian)가 서명하고, 에이전트가 요청합니다. 접근 권한을 취소하는 것은 설정에서 토글 버튼을 누르는 것이지, 전체 시스템에 걸친 키 로테이션은 아닙니다.
- 접근 범위는 1단계에서 체크한 호스트 목록이며, 각 호스트의 명령 정책이 실행할 수 있는 범위를 제한합니다. 프로덕션 환경에서 '전체(Full)' 권한이라도 여전히 전체 셸(full shell)입니다. 의도적으로 설정해야 합니다.
- 사용자 본인의 세션을 입력하는 것은 별개입니다. 기본적으로 Gemini는 자체 세션을 열며, 이미 열려 있는 세션에 참여하려면 별도의 동의 토글이 필요합니다.
- 지켜보거나 기록할 수 있습니다. 앱 터미널 탭에서 에이전트가 수행하는 작업은 실시간으로 보이며 녹화될 수 있습니다. 출력 내용만 기록되며, 키 입력 내용은 절대 기록되지 않습니다. 에이전트 감사 방법(How auditing an agent works)에서 나머지 내용을 다룹니다.
Gemini가 클라우드에서 실행될 때
Gemini가 데스크톱이 아닌 곳(CI 작업, 클라우드 샌드박스 등)에서 실행되는 경우, 로컬 바이너리는 접근할 수 없지만 Termalin의 호스팅 MCP 엔드포인트는 (Pro 또는 14일 체험판 사용 시) 가능합니다. 웹 대시보드에서 API 키를 발급받고, 적절한 서버에 범위를 지정하며, 읽기 전용으로 설정하거나 허용 목록을 지정하고, 만료일을 부여한 다음, 에이전트를 https://termal.in/api/v1/mcp로 지정합니다. 이는 Connector 등록된 서버에 키 없이 접근하여, 짧은 수명의 인증서로 각 실행을 인증합니다—완벽한 CI/CD 패턴은 여기에를 참조하세요.
습관을 만드는 방법
첫 주는 빠르게 적응하는 팀원을 온보딩하는 것처럼 다루세요. 모니터링 그리드를 열어두고, Gemini에게 명확한 완료 상태(done-state)가 있는 작업을 맡기며, 무언가를 확장하기 전에 그것이 어떻게 작동하는지 읽어보세요. 핵심은 이겁니다: Gemini는 서버에서 실제적인 도달 범위를 얻지만, 당신은 한 가지—절대 넘겨줄 수 없는 키—를 간직하게 됩니다.
Termalin은 내장 MCP 서버, 키 관리자 및 호스트별 에이전트 정책을 갖춘 크로스 플랫폼 SSH 클라이언트입니다—다운로드, MCP 참조를 읽거나, 어떻게 키를 처리하는지 확인하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기