SSH를 HTTPS를 통해 전송하기
- SSH를 HTTPS를 통해 전송하려면 클라이언트와 서버 양쪽을 조정해야 함.
 
- 클라이언트 설정 예시에서는 
~/.ssh/config 파일에 ProxyCommand과 ServerAliveInterval을 설정함. 
- 사용하는 
~/.ssh/https-tunnel.bash 스크립트는 CONNECT 메서드를 헤더로 보내면서 socat을 사용해 TLS 연결을 생성함. 
서버 설정 예시
- 아파치2 HTTPS 서버 설정에서는 
proxy_connect_module을 로드하고 AllowCONNECT 지시어를 사용해 특정 대상에 대한 CONNECT HTTP 메서드 사용을 허용함. 
- 서버 측에서는 
https-server에서 단일 대상인 ssh-server 호스트만을 위해 CONNECT 메서드를 사용할 수 있도록 설정함. 
배경
- 병원에 머무르면서 대부분의 연결 유형이 차단된 병원 Wi-fi를 통해 원격으로 작업을 하고자 함.
 
- 병원 네트워크는 HTTP와 HTTPS 연결만 허용하며, SSH는 완전히 차단됨.
 
- SSH를 HTTP 또는 HTTPS를 통해 전송하는 방법에 대한 탐색.
 
가능한 방법들
- 단일 포트에서 SSH와 HTTPS 프로토콜을 공동 호스팅하고 투명하게 분배하는 
sslh 프로젝트. 
- 
sslh는 프로토콜을 다른 프로토콜에 포함시키지 않고, 다양한 휴리스틱을 사용해 실제 백엔드로 리디렉션함. 
- 
openssh의 ProxyCommand 지시어를 사용해 SSH 프로토콜을 다른 프로토콜에 완전히 포함시키는 방법. 
SSH over HTTP
- 간단한 SSH over HTTP 시도를 위해 아파치2를 설정해 
CONNECT 메서드를 단일 대상 ssh-server:22에 대해 허용함. 
- 클라이언트 측은 
socat을 사용해 쉽게 조정됨. 
- 
ServerAliveInterval을 사용해 HTTP 연결이 유휴 상태에서도 끊기지 않도록 함. 
SSH over HTTPS
- 
socat은 HTTPS 프록시를 지원하지 않으나 TLS 캡슐화는 지원함. 
- 
CONNECT 기반 메서드를 수동으로 구현하기 쉬움. 
- 
~/.ssh/https-tunnel.bash 스크립트를 사용해 SSH over HTTPS 터널링을 구현함. 
마무리
- HTTPS의 보편적인 존재는 매우 제한적인 중간 장치를 통해 데이터를 전송할 수 있게 해줌.
 
- 
CONNECT 메서드는 TCP 페이로드 스트림을 TLS 호스트 스트림으로 래핑하는 유용한 해킹임. 
- 
ServerAliveInterval은 유휴 연결에 친화적이지 않은 하위 전송에 대해 연결을 유지하는 데 사용됨. 
GN⁺의 의견
- 이 글에서 가장 중요한 것은 제한적인 네트워크 환경에서도 SSH 연결을 가능하게 하는 창의적인 해결책을 제시했다는 점임.
 
- SSH와 HTTPS를 결합하는 방법은 네트워크 보안과 관련된 전문 지식을 가진 사람들에게 특히 흥미로울 수 있음.
 
- 
ProxyCommand와 ServerAliveInterval 설정을 통해 네트워크 제한을 우회하는 방법은 네트워크 관리자나 보안 전문가들에게 유용한 정보를 제공함.