VS Code devcontainer와 외부 터미널: SSH 에이전트 사용 방법
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
'
조금 해킹적인 방법이지만 원하는 역할을 합니다. 좋아하는 터미널에서 편하게 작업해 보세요!