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

서문
기존 접근제어 솔루션의 가장 큰 문제점은 무엇일까요? 대부분의 솔루션은 사용자 PC에 별도의 에이전트를 설치하고, GUI 기반의 인터페이스를 통해서만 서버에 접속할 것을 요구합니다. 이는 기존 CLI 환경에 익숙한 개발자와 시스템 관리자들의 워크플로우를 크게 방해합니다. 단축키와 스크립트를 활용한 효율적인 작업 방식을 포기하고 GUI 에이전트를 통한 접속만을 사용해야 한다면, 업무 효율성이 크게 저하될 수밖에 없습니다.
QueryPie는 이러한 문제를 해결하기 위해 'Seamless SSH Connection'을 개발했습니다. 이 접근법은 보안성을 유지하면서도 사용자들이 기존에 사용하던 SSH 워크플로우를 그대로 활용할 수 있게 해줍니다. 간단한 SSH 설정 파일 수정만으로 접근제어를 적용하면서 동시에 익숙한 CLI 환경을 유지할 수 있다는 점이 이 솔루션의 핵심입니다.
Host *.querypie.io
Port 22
ProxyCommand qpa ssh %r %h %p
위 설정 후에는 기존에 SSH 사용 방법과 동일한 방법으로 타겟 서버에 접속할 수 있습니다.
ssh ryan@test.querypie.io
Seamless SSH Connection 동작 방식
Seamless SSH의 동작 방식을 이해하기 위해서는 SSH ProxyCommand에 대한 이해가 우선적으로 필요합니다.
SSH ProxyCommand
ProxyCommand
는 SSH 연결 과정에서 중간 단계로 다른 서버를 경유해 최종 목적지에 데이터를 전송하는 방식입니다. 이 기능은 SSH 클라이언트 설정에서 지정할 수 있으며, SSH 연결이 ProxyCommand에 지정된 명령을 실행하여 그 결과를 통해 최종 목적지와 통신합니다.
동작 방식
-
사용자 실행: 사용자가 SSH 클라이언트를 통해 원격 서버에 연결을 시도합니다. 이 때, SSH 클라이언트 설정에
ProxyCommand
가 지정되어 있다면, SSH 클라이언트는 우선ProxyCommand
에 설정된 명령을 실행합니다. -
데이터 스트림 연결:
- stdin: SSH 클라이언트는
ProxyCommand
를 실행할 때, 해당 명령의 stdin을 통해 데이터를 전송합니다. 이 데이터는 사용자로부터 오는 명령어나 파일 전송 요청 등이 될 수 있습니다. - stdout: SSH 클라이언트는
ProxyCommand
를 실행할 때, 해당 명령의 stdin을 통해 데이터를 전송합니다. 이 데이터는 사용자로부터 오는 명령어나 파일 전송 요청 등이 될 수 있습니다.
- 양방향 데이터 전송: 이 과정에서,
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 ) |
활용 예시
Seamless SSH Connection 기능을 이용하면 기존에 서버 개발자들이 사용하던 다음과 같은 테크닉들을 접근제어 솔루션이 있는 환경에서도 동일하게 사용할 수 있습니다.
예를 들어, 1번부터 10번까지의 테스트 서버에 동일하게 특정 설정을 적용해야 할 경우, ssh 접속부터 명령어 수행까지에 이르는 작업을 하나 하나씩 입력하여 처리하는 것은 번거롭습니다. 이 경우 다음과 같은 방법을 이용해서 동일 명령어를 여러 서버에 수행되도록 할 수 있습니다.
iTerm2을 여러 창으로 분리 후 동시 커맨드 입력
iTerm2에서 cmd + d
를 누르면 창이 세로로 분할되고, cmd + shift + d
를 누르면 창이 가로로 분할됩니다. 그리고 option + cmd + i
를 입력하면 분할된 모든 pane에 동일한 명령어가 입력되도록 설정할 수 있습니다. 이런 기능을 이용하여 여러 서버에 접속할 때 최소한의 입력으로 빠르게 명령어를 입력할 수 있습니다.

QueryPie에서 제공하는 Seamless SSH Connection 기능을 이용하면 기존에 사용하던 이런 방법들도 사용성의 변화 없이 그대로 사용할 수 있습니다.
서버 다중 접속을 위한 스크립트 작성
iTerm2을 터미널로 사용하지 않거나 프로그램 작성이 용이할 경우, 여러 서버에 접속하고 명령어를 수행하는 과정을 스크립트로 작성해서 수행하기도 합니다.
#!/bin/bash
# 서버 리스트
SERVERS=("test1.querypie.io" "test2.querypie.io" "test3.querypie.io" "test4.querypie.io")
# 사용자 계정
USER="ryan"
# 실행할 명령
COMMANDS=(
"echo 'TMOUT=300' >> ~/.bashrc"
"source ~/.bashrc"
)
# 서버 접속 및 명령 실행
for SERVER in "${SERVERS[@]}"; do
echo "Connecting to ${SERVER}..."
ssh "${USER}@${SERVER}" <<EOF
$(printf "%s\n" "${COMMANDS[@]}")
EOF
if [ $? -eq 0 ]; then
echo "Commands executed successfully on ${SERVER}"
else
echo "Failed to execute commands on ${SERVER}"
fi
done
test 서버 1번부터 4번까지 접속해서 타임아웃 설정을 바꾸는 스크립트인데, 모든 서버에 interactive shell을 띄워 명령을 수행할 필요없이 스크립트 한번만 실행하면 되므로 간단하게 작업을 할 수 있습니다.
tmux 다중 접속을 이용한 여러 서버 동시 접속하기
tmux-cssh라는 오픈소스를 이용하면 아래와 같은 명령어를 이용하여 여러 서버에 동시에 접속하는 것이 가능합니다.
tmux-cssh -ns -ss
'ssh -oProxyCommand='\''qpa ssh %r %h %p'\''
-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null'
-u admin test{001..01}.querypie.io

결론

접근제어 솔루션의 도입은 조직의 보안을 강화하는 중요한 단계이지만, 사용자 경험을 저해해서는 안 됩니다. 기존 GUI 기반 접근제어 솔루션은 보안은 강화했지만, CLI 환경에서 작업하는 개발자와 시스템 관리자들의 생산성을 저하시키는 부작용이 있었습니다.
QueryPie의 Seamless SSH Connection은 보안성과 편의성 두 가지 목표를 모두 달성합니다. 보안 접근제어를 유지하면서도, 사용자들이 익숙한 SSH 워크플로우와 도구들(iTerm2 다중 창, 자동화 스크립트, tmux 등)을 그대로 활용할 수 있게 해줍니다. 단순한 설정 변경만으로 기존 작업 방식을 유지할 수 있다는 것은 조직 전체의 생산성 측면에서 큰 이점입니다. 이런 방식으로 QueryPie는 보안성과 사용성 사이의 균형을 찾아, 사용자들이 접근제어 솔루션 도입으로 인한 불편함 없이 효율적으로 작업할 수 있는 환경을 제공합니다.
무엇이 있을까요?
지금 바로 확인해보세요!
아래 양식을 작성하시면 특별한 콘텐츠가 열려요!