Documentation

/

White Papers

보안성과 업무 효율성을 동시에 높이는 Seamless SSH Connection 전략

ryan

2025년 3월 10일

보안성과 업무 효율성을 동시에 높이는 Seamless SSH Connection 전략

서문

기존 접근제어 솔루션의 가장 큰 문제점은 무엇일까요? 대부분의 솔루션은 사용자 PC에 별도의 에이전트를 설치하고, GUI 기반의 인터페이스를 통해서만 서버에 접속할 것을 요구합니다. 이는 기존 CLI 환경에 익숙한 개발자와 시스템 관리자들의 워크플로우를 크게 방해합니다. 단축키와 스크립트를 활용한 효율적인 작업 방식을 포기하고 GUI 에이전트를 통한 접속만을 사용해야 한다면, 업무 효율성이 크게 저하될 수밖에 없습니다.

QueryPie는 이러한 문제를 해결하기 위해 'Seamless SSH Connection'을 개발했습니다. 이 접근법은 보안성을 유지하면서도 사용자들이 기존에 사용하던 SSH 워크플로우를 그대로 활용할 수 있게 해줍니다. 간단한 SSH 설정 파일 수정만으로 접근제어를 적용하면서 동시에 익숙한 CLI 환경을 유지할 수 있다는 점이 이 솔루션의 핵심입니다.

123
Host *.querypie.io  Port 22  ProxyCommand qpa ssh %r %h %p

위 설정 후에는 기존에 SSH 사용 방법과 동일한 방법으로 타겟 서버에 접속할 수 있습니다.

1
ssh ryan@test.querypie.io

Seamless SSH Connection 동작 방식

Seamless SSH의 동작 방식을 이해하기 위해서는 SSH ProxyCommand에 대한 이해가 우선적으로 필요합니다.

SSH ProxyCommand

ProxyCommand 는 SSH 연결 과정에서 중간 단계로 다른 서버를 경유해 최종 목적지에 데이터를 전송하는 방식입니다. 이 기능은 SSH 클라이언트 설정에서 지정할 수 있으며, SSH 연결이 ProxyCommand에 지정된 명령을 실행하여 그 결과를 통해 최종 목적지와 통신합니다.

동작 방식

  1. 사용자 실행: 사용자가 SSH 클라이언트를 통해 원격 서버에 연결을 시도합니다. 이 때, SSH 클라이언트 설정에 ProxyCommand가 지정되어 있다면, SSH 클라이언트는 우선 ProxyCommand에 설정된 명령을 실행합니다.

  1. 데이터 스트림 연결:

  • stdin: SSH 클라이언트는 ProxyCommand를 실행할 때, 해당 명령의 stdin을 통해 데이터를 전송합니다. 이 데이터는 사용자로부터 오는 명령어나 파일 전송 요청 등이 될 수 있습니다.

  • stdout: SSH 클라이언트는 ProxyCommand를 실행할 때, 해당 명령의 stdin을 통해 데이터를 전송합니다. 이 데이터는 사용자로부터 오는 명령어나 파일 전송 요청 등이 될 수 있습니다.

  1. 양방향 데이터 전송: 이 과정에서, ProxyCommand는 stdin을 통해 받은 데이터를 타겟 서버에 전송하고, 서버로부터의 응답을 stdout을 통해 SSH 클라이언트로 다시 전송합니다. 결과적으로, SSH 클라이언트와 타겟 서버 사이에 양방향 통신 채널이 구성됩니다.

특수변수

  • %r → SSH 커맨드에 작성된 타겟 서버의 사용자입니다.

  • %h → SSH 커맨드에 작성된 타겟 서버 주소입니다.

  • %p → SSH 커맨드에 작성된 타겟 서버 포트 입니다. (옵션: -p, 기본값: 22)

QueryPie Agent - CLI 확장

Seamless SSH Connection에서 ProxyCommand에 사용되는 qpa는 QueryPie Agent의 사용자용 에이전트 클라이언트에 CLI를 확장한 것으로 QueryPie를 통해 SSH 접속을 할 수 있도록 합니다. SSH 클라이언트의 연결은 Agent를 통해 터널링이 되며, 이를 통한 사용자 인증이 가능하도록 합니다.

연결 구조

SSH Client → Agent CLI → ARiSA Proxy Server → Target Server

컴포넌트 정리

컴포넌트

설명

SSH

OpenSSH 클라이언트 입니다.

Agent - CLI (qpa)

ProxyCommand 통해 실행되는 쉘 커맨드입니다. Agent에선 SubProcess 라고 하며 MainProcess 간 메시징을 위한 IPC 통신이 구현되어 있습니다.

Agent - Main

로그인 및 터널링 등 UI 로 실행되는 사용자 에이전트 입니다.

API

agentService.proto 에 작성된 서비스를 구현 & 제공하는 컴포넌트입니다.

TargetServer

목적 서버 입니다. (e.g., test.querypie.com)