웹 기반 SSH
Web-based SSH웹 기반 SSH를 사용하면 표준 웹 브라우저를 통해 Secure Shell(SSH) 서버에 액세스할 수 있습니다.각 클라이언트는 일반적으로 JavaScript/Ajax 또는 JavaScript/WebSockets를 기반으로 하며 Ajax/WebSocket-to-SSH 프록시와 함께 작동하는 경우 HTTP 트래픽을 허용하지만 SSH 트래픽을 허용하지 않는 방화벽 또는 프록시 뒤에서 SSH 서버에 액세스할 수 있습니다.
테크놀로지
웹 기반 SSH 클라이언트는 기본적으로 다음 부분으로 구성됩니다.
- 클라이언트 측:일반적으로 JavaScript 및 동적 HTML 페이지는 키 스트로크를 캡처하고 서버와의 메시지 송수신 및 사용자 웹 브라우저에 결과를 표시하기 위해 사용됩니다.
- 서버 측/웹 응용 프로그램:수신 요청은 웹 응용 프로그램 서버에서 처리됩니다.키보드 이벤트는 연결된 SSH 서버와 통신하는 시큐어 셸 클라이언트로 전송됩니다.터미널 출력은 JavaScript를 통해 클라이언트에 전달되며, 클라이언트에 전송되기 전에 서버에 의해 HTML로 변환됩니다.
클라이언트 측 터미널 에뮬레이션
클라이언트측의 단말 에뮬레이션을 이용하는 Web 베이스의 SSH 서버는, 통상, SSH 서버로부터의 미가공 단말 출력을 클라이언트에 직접 송신합니다.이것은 단말 출력을 HTML로 변환하는 프로세스를 클라이언트에 오프로드하는 장점이 있습니다.이 방법의 단점은 JavaScript의 기능에 의해 제한되고 착신 문자 스트림을 처리하기 위해 클라이언트의 CPU와 메모리를 그다지 많이 사용하지 않는다는 것입니다.또, 클라이언트에 의존해 단말 상태를 추적해, 이스케이프 시퀀스에 응답합니다.
클라이언트 측 터미널 에뮬레이터의 예: vt100.js[1]
서버측 터미널 에뮬레이션
서버측의 단말 에뮬레이션을 이용하는 Web 베이스의 SSH 서버는, 통상, 메모리내의 단말의 화면과 상태를 추적해, 화면 갱신이 발생했을 때나 클라이언트가 명시적으로 갱신을 요구했을 때에 HTML 로 변환합니다.이 방법의 장점은 사용자가 다른 웹 브라우저에서 기존 세션에 접속해도 단말기 상태가 유지된다는 것입니다.또, 유저가 [2]절단되어 있는 경우에서도, 서버는 단말기의 출력에 따라 동작할 수 있습니다.이 방법의 단점은 서버의 CPU와 메모리를 더 많이 사용한다는 것입니다.
서버측 터미널 에뮬레이터의 예: terminal.화이[3]
이점
웹 기반 SSH의 주요 장점은 다음과 같습니다.
- 접근성: 이 문서에서 설명한 바와 같이 웹 기반 SSH에서는 클라이언트소프트웨어를 로컬에 설치할 필요가 없습니다.따라서 어디서나 웹 브라우저를 통해 SSH 서버에 액세스할 수 있습니다.통신은 HTTP 또는 HTTPS를 기반으로 하기 때문에 인터넷접속을 포트 80(HTTP) 또는 443(HTTPS)만으로 제한하는 방화벽 또는 프록시 뒤에서 SSH 서버에 액세스 할 수도 있습니다.
- 익명 액세스:SSH 액세스는 중간 웹 응용 프로그램서버를 통해 터널링되므로 실제로 SSH 서버와 통신하는 것은 이 서버입니다.즉, SSH 서버는 웹 응용 프로그램서버의 IP 주소만 인식하고 실제 클라이언트의 IP 주소는 숨김 상태로 유지됩니다.
- 감사 기능:클라이언트와 SSH 서버 간의 모든 통신은 웹 애플리케이션 서버를 통과해야 하므로 이 통신은 로깅할 수 있습니다.이렇게 하면 악의적인 클라이언트가 작업 로그를 삭제하는 것을 방지할 수 있습니다.이 상황은 기존 SSH 서버와 동일합니다.
- 세션 재개: 일부 웹 기반 SSH 구현에서는 사용자가 연결 해제 후 SSH 세션을 재개할 수 있습니다.이것은 기존의 SSH 클라이언트에서는 가능하지 않습니다.
- 내장 가능: 웹 기반 SSH 구현은 모든 웹 페이지에 내장할 수 있으며 다른 웹 기반 응용 프로그램에 통합할 수 있습니다.
- 독자적인 기능:많은 웹 기반 SSH 도구에는 다른 사용자와 단말기를 공유하는 기능, 단말기 내의 이미지 표시 기능 및 기타 유용한 기능 등 고유한 기능이 있습니다.
중요한 문제
Web 베이스 SSH 클라이언트를 사용할 때는, 다음의 문제를 고려할 필요가 있습니다.
- 보안:웹 응용 프로그램서버와 통신할 때는, HTTPS 가 사용되고 있는 것을 확인하는 것이 중요합니다.그렇지 않으면 전송되는 모든 데이터를 단순한 패킷스니퍼를 사용하여 읽을 수 있게 되어 기밀 정보가 노출될 수 있습니다.
- 신뢰: 웹 응용 프로그램 서버로 전송되는 데이터는 여기에서 복호화됩니다.이는 발행된 명령어를 실제 SSH 서버로 전송하기 위해 필요합니다.웹 기반 SSH 솔루션 운영자는 일반적으로 중요한 데이터를 기록하지 않지만 이론적으로는 데이터를 일반 형식으로 사용할 수 있습니다.웹 애플리케이션서버와 SSH 서버가 같은 서버상에서 동작하고 있는 경우, 또는 같은 엔티티에 의해서 제어되고 있는 경우, 시큐러티상의 문제는 발생하지 않습니다.
- 터널링:대부분의 기존 애플리케이션 기반 SSH 클라이언트와 달리 웹 기반 SSH 클라이언트는 트래픽을 터널링(전송)할 수 없습니다.예를 들어 웹 기반 SSH 세션에서는 X 세션을 실행할 수 없습니다.그러나 능력 부족은 구현 문제로 인해 발생하며 어떤 방식으로든 [4]내재되어 있지 않습니다.
프리 소스 및 오픈 소스 예시
- Google의 Chrome 및 Chromium용[5] Secure Shell 확장 기능은 JavaScript hterm 터미널 에뮬레이터와 Native [6]Client에서 실행되는 OpenSSH 클라이언트 코드를 쌍으로 합니다.시큐어 셸 확장은 프록시 훅을 통해 비구글 HTTP-to-SSH 프록시와 연동되며, 서드파티 애플리케이션 nassh-relay는[7] 이러한 훅을 사용하여 시큐어 셸 확장이 XMLHtpRequest 또는 WebSocket 트랜스포트를 통해 SSH 연결을 확립할 수 있도록 할 수 있습니다.
- shellinabox는[8] 스탠드아론 서비스로 동작하거나 nginx와 연계하여 로그인 셸에 HTTPS 접근을 제공하며 Debian 및 RedHat에서 파생된 Linux 배포용으로 패키지화되어 있습니다.
- webssh는[9] Python으로 작성된 유사한 솔루션입니다.
- Bastillion은[10] 감사 및 주요 관리 기능을 갖춘 자체 호스팅된 웹 기반 기본 호스트입니다.사용자는 HTTPS를 통해 중앙 서버에 접속하고 SSH 연결은 안전한 WebSocket 전송을 통해 프록시됩니다.
- FireSSH는 Firefox ESR 및 Waterfox에서 작동하는 브라우저 플러그인입니다.
레퍼런스
- ^ "Google Code Archive - Long-term storage for Google Code Project Hosting".
- ^ 게이트 1의 종단으로부터의 기대 함수.py 모듈은 사용자가 연결을 끊은 경우에도 터미널 출력에 대해 작동할 수 있습니다.
- ^ "Terminal.py - A Pure Python Terminal Emulator — Gate One 1.2.0 documentation".
- ^ jcterm은 X11 전송 등의 포트 전송을 처리할 수 있다고 주장합니다.
- ^ "Secure Shell App".
- ^ Chromium Secure Shell FAQ
- ^ nassh-relay GitHub 저장소
- ^ "Shellinabox". 28 October 2021.
- ^ "Webssh: Web based SSH client".
- ^ Bastillion - 웹 기반 SSH 액세스 및 키 관리