VS Code devcontainer와 외부 터미널: SSH 에이전트 사용 방법

발행: (2026년 1월 31일 오후 11:52 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

외부 터미널을 사용하는 이유

저는 VS Code의 내부 터미널을 크게 선호하지 않습니다. 문자 사라짐, Cmd‑V가 잘못된 창에 붙여넣어지는 문제, 혹은 브랜치를 전환할 때 터미널이 닫히는 버그(scm.workingSets 활성화 시) 등 다양한 버그에 계속 부딪히곤 합니다.
그럼에도 불구하고 저희는 업무에서 VS Code와 devcontainer를 사용하고 있으며, 때때로 외부 터미널에서 명령을 실행해야 할 때가 있습니다.

외부 터미널에서 컨테이너 내 명령 실행

다음 명령은 컨테이너 안에 쉘을 여는 데 정상적으로 동작합니다:

CONTAINER_ID=$(docker ps --format "table {{.ID}}\t{{.Names}}" \
               | grep "my-container-name" \
               | awk '{print $1}')

docker exec -ti -w /workspaces/my-project "$CONTAINER_ID" /bin/zsh

SSH‑agent 문제

외부 터미널을 사용할 경우 SSH 에이전트가 자동으로 제공되지 않아 git pull 같은 작업이 불가능합니다. VS Code는 호스트의 SSH‑agent 소켓을 컨테이너에 마운트하고 SSH_AUTH_SOCK 변수를 설정하지만, 오직 내부 터미널에만 적용됩니다:

vscode /workspaces/my-project (main) $ echo $SSH_AUTH_SOCK
/tmp/vscode-ssh-auth-e85d0936-746e-465d-8382-cbf0bb69b476.sock

해결 방법: SSH‑agent 소켓을 수동으로 노출하기

소켓은 /tmp 디렉터리에서 찾을 수 있습니다. 해당 소켓을 찾아 docker exec 명령 안에서 SSH_AUTH_SOCK을 내보내면 외부 터미널에서도 동일한 SSH 에이전트를 사용할 수 있습니다:

CONTAINER_ID=$(docker ps --format "table {{.ID}}\t{{.Names}}" \
               | grep "my-container-name" \
               | awk '{print $1}')

docker exec -ti \
  -w /workspaces/my-project \
  "$CONTAINER_ID" \
  sh -lc '
    SOCK=$(ls /tmp/vscode-ssh-auth-*.sock 2>/dev/null | head -n1)
    if [ -n "$SOCK" ]; then
      export SSH_AUTH_SOCK="$SOCK"
      echo "Using SSH_AUTH_SOCK=$SSH_AUTH_SOCK"
    else
      echo "No VS Code SSH socket found"
    fi
    exec /bin/zsh
  '

조금 해킹적인 방법이지만 원하는 역할을 합니다. 좋아하는 터미널에서 편하게 작업해 보세요!

Back to Blog

관련 글

더 보기 »

Git 2.53.0의 새로운 기능은?

Git 프로젝트가 최근에 Git 2.53.0을 릴리스했습니다. 이번 릴리스의 몇 가지 주목할 만한 하이라이트를 살펴보겠습니다. 여기에는 GitLab의 Git 팀이 기여한 내용도 포함됩니다.

Git 및 Github 초보자 가이드

Git와 GitHub의 정의 이 두 용어는 처음 접하는 사람에게는 익숙하게 들릴 수 있지만, 동일하지 않습니다. - Git – 변경 사항을 추적하는 데 사용되는 무료 오픈소스 도구.