RelayBar: SSH 포트 포워딩을 위한 네이티브 macOS 메뉴바 관리자

RelayBar: SSH 포트 포워딩을 위한 네이티브 macOS 메뉴바 관리자

RelayBar는 로컬 SSH 포트 포워딩 관리를 간소화하기 위해 설계된 네이티브 macOS 메뉴바 애플리케이션입니다. 내장된 /usr/bin/ssh 바이너리를 직접 호출함으로써, 외부 의존성이나 셸 없이 SSH 터널을 시작, 중지, 구성할 수 있는 그래픽 인터페이스를 제공합니다.

핵심 기능 및 터널 관리

RelayBar는 사용자가 로컬 (-L) SSH 포워딩을 관리할 수 있도록 허용합니다. 다섯 필드 폼을 통한 수동 입력과 ssh -N -L 8080:localhost:3000 user@host와 같은 일반적인 SSH 명령어 가져오기를 모두 지원합니다.

주요 관리 기능은 다음과 같습니다:

  • 원클릭 제어: 사용자는 단 한 번의 클릭으로 개별 터널을 시작하고 중지할 수 있습니다.
  • 브라우저 통합: 터널을 시작하고 해당 로컬 URL을 기본 웹 브라우저에서 동시에 열 수 있습니다.
  • 원클릭 터널 생성: 터널은 수동으로 추가하거나 기존 명령어에서 가져올 수 있습니다.
  • 로컬 저장: 터널 정의는 사용자의 로컬 UserDefaults에 저장됩니다.
  • 프로세스 정리: RelayBar 애플리케이션이 종료될 때 모든 자식 SSH 프로세스가 종료됩니다.

신뢰성 및 연결 처리

RelayBar는 불안정한 연결을 처리하기 위해 자동 재연결 로직을 구현합니다. 터널이 예기치 않게 연결이 끊어지면, 끊어지면, 애플리케이션은 지수 백오프 전략을 사용하여 연결을 최대 10번까지 재시도합니다. 시작 실패는 메뉴바 인터페이스의 터널 항목 바로 옆에 표시되어 즉시 확인할 수 있습니다.

보안 및 시스템 통합

RelayBar는 샌드박스되지 않은 애플리케이션으로 동작하도록 설계되어 명령줄 SSH 클라이언트처럼 동작할 수 있습니다. 이 통합을 통해 사용자의 ~/.ssh/configknown_hosts 파일에 접근하고, 구성된 ID 파일을 사용하며, 사용자의 SSH 에이전트에 대한 접근을 상속할 수 있습니다.

보안을 유지하기 위해 RelayBar는 다음과 같은 제한을 적용합니다:

  • 쉘 호출 금지: 애플리케이션은 명령을 실행하기 위해 쉘을 절대 호출하지 않습니다.
  • 제한된 옵션: -p, -J, -i 및 특정 -o 값과 같은 안전한 연결 옵션은 가져오기 중에 보존되지만, 로컬 명령을 실행하거나 임의의 구성 파일을 선택하거나 로그를 작성할 수 있는 옵션은 거부됩니다.
  • 항목당 하나의 포워드: 각 RelayBar 항목은 의도적으로 하나의 로컬 (-L) 포워드로 제한됩니다.

SSH는 비대화식으로 실행되므로 비밀번호 프롬프트는 지원되지 않습니다. 사용자는 인증을 위해 SSH 키 또는 SSH 에이전트에 의존해야 합니다.

빌드 및 개발 요구사항

RelayBar는 컴파일을 위해 macOS 13 이상 및 Xcode 명령줄 도구가 필요합니다. 빌드 프로세스는 로그인 키체인에서 Developer ID Application 인증서를 자동으로 식별하여 강화된 런타임으로 앱에 서명하는 셸 스크립트 (./scripts/build-app.sh)를 사용합니다.

배포를 위해, 프로젝트는 ZIP 파일로 패키징하고 notarytool을 사용하여 공증하는 스크립트를 제공하여 앱이 경고 없이 macOS Gatekeeper를 통과하도록 보장합니다.

커뮤니티 관점

RelayBar는 터널 관리를 위한 네이티브 GUI를 제공하지만, 일부 사용자는 높은 안정성 요구 사항을 위해 대체 도구를 사용한다고 언급했습니다. Hacker News에서 한 사용자가 언급한 바와 같이:

저는 작업에서 이러한 것이 많이 필요하고 인터넷이 불안정해서 autossh를 사용하는 경향이 있습니다!

이는 RelayBar의 네이티브 macOS 경험에 대한 집중과 지속적인 연결 관리를 위한 autossh와 같은 특수 명령줄 유틸리티 사용 사이의 차이를 강조합니다.

Sources