GN⁺: VSCode의 SSH Agent는 황당함
(fly.io)-
VSCode와 원격 편집
- VSCode는 SSH를 통해 원격 편집을 지원하는 기능을 가지고 있음.
- 많은 사용자가 VSCode와 LLM(대형 언어 모델)을 사용하여 코드 생성을 하고 있음.
- LLM이 잘못된 코드를 생성하는 경우를 "환각"이라고 부르며, 이를 해결하기 위해 "에이전트" 설정을 통해 LLM과 실행 환경 간의 루프를 닫는 것이 중요함.
- 이 과정은 LLM이 코드를 생성하고, 에이전트가 코드를 실행하며, 오류를 생성하고, 이를 LLM에 피드백하여 반복하는 방식으로 이루어짐.
-
개발 환경에서의 문제점
- 이러한 반복적인 개발 프로세스가 개발자 노트북에서 발생하는 것은 바람직하지 않음.
- LLM은 시스템 구성에도 영향을 미칠 수 있기 때문에, 깨끗한 상태의 Linux 인스턴스에서 이러한 작업을 수행하는 것이 좋음.
-
Emacs와 Tramp
- Emacs는 Tramp라는 유용한 Elisp를 통해 원격 편집 시스템을 지원함.
- Tramp는 SSH 세션을 통해 Bourne 쉘 명령을 실행할 수 있는 인터랙티브 환경에 연결할 수 있음.
-
VSCode의 접근 방식
- VSCode는 Tramp와 유사한 기능을 가지고 있지만, Tramp와 달리 원격 연결에서 전체적인 침입을 시도함.
- Bash 스니펫 스테이저를 실행하여 에이전트를 다운로드하고, Node의 바이너리 설치를 포함함.
- 에이전트는 포트 포워딩된 SSH를 통해 실행되며, WebSockets 연결을 통해 VSCode 프론트엔드와 연결됨.
- 이 연결의 기본 프로토콜은 파일 시스템을 탐색하고, 임의의 파일을 편집하며, 자체 쉘 PTY 프로세스를 시작하고, 지속성을 가질 수 있음.
-
보안 우려
- 개발 서버에서 VSCode를 원격 편집 용도로 무분별하게 쓰면 민감 정보나 인프라 보호에 문제를 일으킬 수 있음
- 특히 실제 운영 환경(프로덕션)에서 문제가 발생했을 때 VSCode 원격 편집을 사용하는 것은 매우 위험하다는 우려가 있음
-
결론
- Fly.io 내부적으로는 Fly Machine과 VSCode를 직접 연결하는 데 이런 방식의 복잡한 에이전트가 반드시 필요한 것은 아님
- 다만 블로그 목적상 VSCode 원격 연결 방식을 조사하게 되었고, 조사 과정에서 위와 같은 사실을 알게 되었음
Hacker News 의견
-
한 달 동안 소프트웨어에 대한 장문의 글을 쓰려고 했음. Kurt는 블로그에 글을 쓰지 않아 걱정하고 있음. 간단한 글을 쓰기로 결정했음. 30분 안에 쓸 수 있을 것 같음
- 우리가 다루던 소프트웨어에 대해 간단히 썼음
-
VSCode의 작동 방식을 알수록 임시방편으로 유지되는 것 같음. SSH 확장만 봐도 워크스페이스 URI가 두 가지 형식을 가짐
- 호스트 이름과 16진수로 인코딩된 JSON 문서가 있음
- 호스트 이름에 대문자가 포함되면 추가 정보가 필요함
- SSH 연결은 서버에 설치할 확장을 구성할 수 있음. 하지만 너무 많이 설치하면 Windows 호스트에 연결할 수 없음
-
보안 문제를 이해하지 못하겠음. SSH로 머신에 접속하고 소켓을 포워딩할 수 있다면 다른 작업도 할 수 있음
- 같은 네트워크에 있는 사람이 SSH 없이 포워딩된 포트에 연결할 수 있는 것이 문제인지 궁금함
- 사용자로서 VSCode의 SSH 시스템이 잘 작동하는 것이 마음에 듦
-
네트워크 서버를 운영하며 학생들이 OpenSSH 클라이언트를 이해하지 못하는 것이 큰 문제임
- 학생들에게 VSCode 원격 서버 플러그인을 사용하지 말라고 알림
- 디스크 사용량이 100MB 이상인 학생들이 모두 VSCode 사용자임을 보여줌
- 사용자 프로세스 제한을 45로 설정했음. 학생들이 경고를 무시하면 프로세스 제한에 걸림
- 10초마다 .vscode-server 프로세스를 종료하는 스크립트를 사용함
-
VSCode의 SSH 편집 기능이 잘 작동함. 원격 머신에서 vim, nano, micro를 사용하지 않게 됨
- 에이전트가 방해하지 않아 작업이 수월함
- 보안 위험이 있을 수 있지만 개발 경험이 뛰어남
-
원격 코드 실행이 가능하다는 것을 배웠음. 개발 도구에 대한 잘못된 신뢰가 종종 후회로 이어짐
- SSH는 90년대의 솔루션임. Telnet에 몇 가지 기능이 추가된 것임
- SSH를 통해 구현된 많은 것들이 비효율적임
- 우리는 적절한 도구를 만들지 않았음. 기존 도구에 더 많은 기능을 추가함
-
"SSH 에이전트"라는 용어는 혼란스러움. 보통 인증 토큰을 캐시하는 데몬을 의미함
-
sshfs를 추천하는 사람들은 VSCode SSH Remote 환경의 이점을 이해하지 못함
- 전체 개발 환경을 원격에서 로컬처럼 실행할 수 있음
- 구형 머신이나 얇은 클라이언트를 완전한 워크스테이션으로 변환할 수 있음
- VSCode 마켓플레이스에는 보안 위협이 되는 플러그인이 많음. SSH Remote나 VS Tunnel은 아님
-
개발 서버에서 VSCode 원격 편집을 허용하는 것이 불안함. 프로덕션 서버에서는 더욱 그렇다고 생각함
- 프로덕션 서버에서 VSCode 원격을 사용하는 것은 미친 짓임
- 다른 기능은 예상된 기능임
-
로컬 VSCode 인스턴스가 얇은 클라이언트가 되고, 원격 인스턴스가 무거운 작업을 처리함
- 작은 노트북에서 강력한 워크스테이션으로 SSH 연결하는 경우에 적합함
- 강력한 워크스테이션에서 작은 VM/VPS로 SSH 연결하는 경우에는 sshfs나 다른 원격 파일 시스템 마운트 설정을 권장함