SSH 인터페이스

SSH 인터페이스 (PTY 지원) (SSH interface with PTY)

ClickHouse 서버는 SSH 프로토콜로 직접 연결되는 것을 지원해요. 임의의 클라이언트가 허용되며, 연결하면 clickhouse-client의 대화형 세션이 있는 슈도 터미널(PTY)이 열려요.

출처: 문서

본문

서문 (Preface)

ClickHouse 서버는 SSH 프로토콜을 사용해 자신에게 직접 연결되는 것을 허용해요. 임의의 클라이언트가 허용돼요.

SSH 키로 식별되는 데이터베이스 사용자를 만든 후:

CREATE USER abcuser IDENTIFIED WITH ssh_key BY KEY '<REDACTED>' TYPE 'ssh-ed25519';

이 키를 사용해 ClickHouse 서버에 연결할 수 있어요. 그러면 clickhouse-client의 대화형 세션을 가진 슈도 터미널(PTY)이 열려요.

> ssh -i ~/test_ssh/id_ed25519 abcuser@localhost -p 9022
ClickHouse embedded version 25.1.1.1.

ip-10-1-13-116.us-west-2.compute.internal :) SELECT 1;

SELECT 1

Query id: cdd91b7f-215b-4537-b7df-86d19bf63f64

   ┌─1─┐
1. │ 1 │
   └───┘

1 row in set. Elapsed: 0.002 sec.

SSH를 통한 명령 실행(비대화형 모드)도 지원돼요:

> ssh -i ~/test_ssh/id_ed25519 abcuser@localhost -p 9022 "select 1"
1

서버 설정 (Server configuration)

SSH 서버 기능을 활성화하려면 config.xml에서 다음 섹션을 주석 해제하거나 배치해야 해요:

<tcp_ssh_port>9022</tcp_ssh_port>
<ssh_server>
   <host_rsa_key>path-to-the-key</host_rsa_key>
   <!--host_ecdsa_key>path-to-the-key</host_ecdsa_key-->
   <!--host_ed25519_key>path-to-the-key</host_ed25519_key-->
</ssh_server>

호스트 키는 SSH 프로토콜의 필수 부분이에요. 이 키의 공개 부분은 클라이언트 쪽의 ~/.ssh/known_hosts 파일에 저장되며 보통 중간자(man-in-the-middle) 공격을 방지하는 데 필요해요. 서버에 처음 연결할 때 다음 메시지를 보게 돼요:

The authenticity of host '[localhost]:9022 ([127.0.0.1]:9022)' can't be established.
RSA key fingerprint is SHA256:3qxVlJKMr/PEKw/hfeg06HAK451Tt0eenhwqQvh58Do.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

이것은 사실상 "이 호스트의 공개 키를 기억하고 계속 연결하시겠습니까?"라는 뜻이에요.

SSH 클라이언트에 호스트를 검증하지 말라고 옵션을 전달할 수도 있어요:

ssh -o "StrictHostKeyChecking no" user@host

임베디드 클라이언트 설정 (Configuring embedded client)

일반적인 clickhouse-client와 비슷하게 임베디드 클라이언트에 옵션을 전달할 수 있지만 몇 가지 제한이 있어요. SSH 프로토콜이므로 대상 호스트에 파라미터를 전달하는 유일한 방법은 환경 변수를 통하는 거예요.

예를 들어 format을 설정하는 방법:

> ssh -o SetEnv="format=Pretty" -i ~/test_ssh/id_ed25519  abcuser@localhost -p 9022 "SELECT 1"
   ┏━━━┓
   ┃ 1 ┃
   ┡━━━┩
1. │ 1 │
   └───┘

이렇게 하면 어떤 사용자 레벨 설정이든 변경할 수 있고, 일반적인 clickhouse-client 옵션 대부분(이 설정에서 의미가 없는 것 제외)도 추가로 전달할 수 있어요.

중요:

query 옵션과 SSH 명령이 모두 전달되면, 후자가 실행할 쿼리 목록에 추가돼요:

ubuntu ip-10-1-13-116@~$ ssh -o SetEnv="format=Pretty query=\"SELECT 2;\"" -i ~/test_ssh/id_ed25519  abcuser@localhost -p 9022 "SELECT 1"
   ┏━━━┓
   ┃ 2 ┃
   ┡━━━┩
1. │ 2 │
   └───┘
   ┏━━━┓
   ┃ 1 ┃
   ┡━━━┩
1. │ 1 │
   └───┘

더 알아보기 (Learn more)