selfhostedworld.com logoselfhostedworld.com

Try describing what you need:

ShellHub logo

ShellHub

★ 2.1k

A self-hosted alternative to Termius

Apache License 2.0Open Source — No Paywall4 Containers — 4 containers — moderate hosting footprintSource · ComposeNo external DB3 documented maintainers

About

ShellHub is a centralized SSH gateway designed to help users access and manage servers, embedded Linux devices, and containerized environments from anywhere. It is positioned for individuals, small...

Community Ratings

No ratings yet
Screenshot

Features

  • native SSH support
  • SCP/SFTP support
  • SSH port forwarding
  • public-key authentication
  • firewall rules
  • audit logging
  • session recording
  • built-in session player
  • container remote access
  • web UI

Details

Last Updated
Oct 12, 2026
Created
May 16, 2019
Install Methods
sourcedocker-compose
Requirements
Dockerdocker-composeOpenSSH Client or PuTTY for native SSH access
Authentication
local
Runtime / Stack
Docker
Privacy & Independence
Cloud: Optional
User Model
Multi-UserMulti-Tenant
Deployment

Deployment: Docker Compose ✓4 Containers — moderate hosting footprintRuns as 4 containers

Run ShellHub with Docker Compose

Compose file from the ShellHub project repository.

4 services · infra: valkey · 3 unclassified (server, ui, gateway)

no resource limits declared

docker-compose.yml · @ 9a86f3e · scanned Sep 26, 2026

name: shellhub

services:
  server:
    image: shellhubio/server:${SHELLHUB_VERSION}
    restart: unless-stopped
    environment:
      - SHELLHUB_VERSION=${SHELLHUB_VERSION}
      - DATABASE=${SHELLHUB_DATABASE}
      - PRIVATE_KEY=/run/secrets/api_private_key
      - PUBLIC_KEY=/run/secrets/api_public_key
      - SSH_HOST_KEY_FILE=/run/secrets/ssh_private_key
      - SHELLHUB_AUTO_SSL=${SHELLHUB_AUTO_SSL}
      - ALLOW_PUBLIC_KEY_ACCESS_BELLOW_0_6_0=${SHELLHUB_ALLOW_PUBLIC_KEY_ACCESS_BELLOW_0_6_0}
      - SHELLHUB_EDITION=${SHELLHUB_EDITION}
      - SHELLHUB_CHATWOOT_IDENTITY_KEY=${SHELLHUB_CHATWOOT_IDENTITY_KEY-}
      - POSTGRES_HOST=${SHELLHUB_POSTGRES_HOST}
      - POSTGRES_PORT=${SHELLHUB_POSTGRES_PORT}
      - POSTGRES_USERNAME=${SHELLHUB_POSTGRES_USERNAME}
      - POSTGRES_PASSWORD=${SHELLHUB_POSTGRES_PASSWORD}
      - POSTGRES_DATABASE=${SHELLHUB_POSTGRES_DATABASE}
      - POSTGRES_LOG_LEVEL=${SHELLHUB_POSTGRES_LOG_LEVEL}
      - POSTGRES_LOG_VERBOSE=${SHELLHUB_POSTGRES_LOG_VERBOSE}
      - TELEMETRY=${SHELLHUB_TELEMETRY:-}
      - TELEMETRY_SCHEDULE=${SHELLHUB_TELEMETRY_SCHEDULE:-}
      - SHELLHUB_LOG_LEVEL=${SHELLHUB_LOG_LEVEL}
      - SHELLHUB_LOG_FORMAT=${SHELLHUB_LOG_FORMAT}
      - SENTRY_DSN=${SHELLHUB_SENTRY_DSN}
      - SHELLLHUB_ANNOUNCEMENTS=${SHELLLHUB_ANNOUNCEMENTS:-}
      - SHELLHUB_SSH_PORT=${SHELLHUB_SSH_PORT}
      - SHELLHUB_DOMAIN=${SHELLHUB_DOMAIN}
      - ASYNQ_UNIQUENESS_TIMEOUT=${SHELLHUB_ASYNQ_UNIQUENESS_TIMEOUT}
      - REDIS_CACHE_POOL_SIZE=${SHELLHUB_REDIS_CACHE_POOL_SIZE}
      - MAXIMUM_ACCOUNT_LOCKOUT=${SHELLHUB_MAXIMUM_ACCOUNT_LOCKOUT}
      - METRICS=${SHELLHUB_METRICS}
      - SHELLHUB_PROVISIONING_KEY_WEBHOOK_ALLOWED_CIDRS=${SHELLHUB_PROVISIONING_KEY_WEBHOOK_ALLOWED_CIDRS-}
      - SHELLHUB_SESSION_KEEPALIVE_TIMEOUT=${SHELLHUB_SESSION_KEEPALIVE_TIMEOUT:-5m}
    depends_on:
      - redis
    links:
      - redis
    ports:
      - "${SHELLHUB_SSH_PORT}:2222"
    secrets:
      - api_private_key
      - api_public_key
      - ssh_private_key
    networks:
      # api and ssh are kept resolvable so anything still addressing the old
      # service names on this network keeps working across the upgrade.
      shellhub:
        aliases:
          - api
          - ssh
    healthcheck:
      test: "curl -f http://server:8080/api/healthcheck || exit 1"
      interval: 30s
      start_period: 10s
  ui:
    image: shellhubio/ui:${SHELLHUB_VERSION}
    restart: unless-stopped
    environment:
      - SHELLHUB_EDITION=${SHELLHUB_EDITION}
      - SHELLHUB_VERSION=${SHELLHUB_VERSION}
      - SHELLHUB_SENTRY_DSN=${SHELLHUB_SENTRY_DSN}
      - SHELLHUB_ONBOARDING_URL=${SHELLHUB_ONBOARDING_URL}
      - SHELLHUB_ANNOUNCEMENTS=${SHELLHUB_ANNOUNCEMENTS}
      - SHELLHUB_CHATWOOT_BASEURL=${SHELLHUB_CHATWOOT_BASEURL-}
      - SHELLHUB_CHATWOOT_WEBSITE_TOKEN=${SHELLHUB_CHATWOOT_WEBSITE_TOKEN-}
      - SHELLHUB_CHATWOOT_IDENTITY_KEY=${SHELLHUB_CHATWOOT_IDENTITY_KEY-}
    networks:
      - shellhub
    healthcheck:
      test: "wget -q --spider -T 5 http://ui:8080/health || exit 1"
      interval: 30s
      start_period: 10s
  gateway:
    image: shellhubio/gateway:${SHELLHUB_VERSION}
    restart: unless-stopped
    environment:
      - SHELLHUB_LOG_LEVEL=${SHELLHUB_LOG_LEVEL}
      - SHELLHUB_LOG_FORMAT=${SHELLHUB_LOG_FORMAT}
      - SHELLHUB_DOMAIN=${SHELLHUB_DOMAIN}
      - SHELLHUB_PROXY=${SHELLHUB_PROXY}
      - SHELLHUB_PROXY_TRUSTED_IPS=${SHELLHUB_PROXY_TRUSTED_IPS}
      - SHELLHUB_EDITION=${SHELLHUB_EDITION}
      - SHELLHUB_AUTO_SSL=${SHELLHUB_AUTO_SSL}
      - SHELLHUB_ACME_CA_SERVER=${SHELLHUB_ACME_CA_SERVER}
      - SHELLHUB_TLS_CERT_FILE=${SHELLHUB_TLS_CERT_FILE}
      - SHELLHUB_TLS_KEY_FILE=${SHELLHUB_TLS_KEY_FILE}
      - SHELLHUB_GATEWAY_ACCESS_LOGS=${SHELLHUB_GATEWAY_ACCESS_LOGS}
      - SHELLHUB_DATABASE=${SHELLHUB_DATABASE}
    depends_on:
      - server
      - ui
    ports:
      - ${SHELLHUB_BIND_ADDRESS}:${SHELLHUB_HTTP_PORT}:80
    networks:
      - shellhub
    extra_hosts:
      - "healthcheck.internal:127.0.0.1"
    healthcheck:
      test: wget -q --spider -T 5 http://healthcheck.internal/healthz || exit 1
      interval: 30s
      start_period: 10s
  redis:
    image: valkey/valkey:9.1-alpine
    restart: unless-stopped
    command: ["valkey-server", "--appendonly", "no", "--save", "\"\""]
    networks:
      - shellhub

secrets:
  ssh_private_key:
    file: ./ssh_private_key
  api_private_key:
    file: ./api_private_key
  api_public_key:
    file: ./api_public_key

networks:
  shellhub:
    name: ${SHELLHUB_NETWORK}

This file may be out of date. Check the ShellHub documentation for current setup steps.

Track your self-hosted stack

Bookmark software to try, rate tools you've used, and keep your collection in one place.

Metadata extracted from README on Aug 5, 2026

Related Software

MeshCentral logo

MeshCentral

7.4k
MeshCentral is a web-based computer management platform for remotely controlling computers on a local network or over the internet.
Remote AccessIoT PlatformsWeb Servers+4
Details
FMD Server logo

FMD Server

221
A server to communicate with the FMD (Find My Device) Android app, to locate and control your devices.
IoT PlatformsRemote AccessCopyleft License+2
Details
wg-easy logo

wg-easy

27.1k
A web UI for installing and managing WireGuard on Linux hosts.
Self Hosting SolutionsNetwork UtilitiesRemote Access+1
Single Container
Details
rathole logo

rathole

14.3k
A secure, high-performance reverse proxy for NAT traversal that forwards services behind a NAT to the Internet.
Proxy ServersNetwork UtilitiesRemote Access+1
Details
sish logo

sish

4.8k
Open source SSH tunneling software for forwarding HTTP(S), WS(S), TCP, aliases, and SNI traffic using plain SSH.
Proxy ServersNetwork UtilitiesRemote Access+2
Details
Guacamole logo

Guacamole

4.0k
guacamole-server provides guacd, libguac, and protocol support libraries that form the server-side basis of Apache Guacamole remote desktop access.
Remote AccessPermissive LicenseProxy Servers+2
Details
Firezone logo

Firezone

9.1k
Firezone is an open source platform for secure remote access and zero-trust network connectivity for organizations.
Remote AccessPermissive LicenseAuthentication Services+2
Open Core
Details
Sshwifty logo

Sshwifty

3.1k
Sshwifty is a web-based SSH and Telnet client that lets users access remote shells from a browser.
Remote AccessMobile terminalsCopyleft License+3
Details
HomeServerHQ logo

HomeServerHQ

73
HomeServerHQ is an all-in-one home server infrastructure and management utility that installs and configures a home server, relay server, and supporting open source services.
Self Hosting SolutionsCopyleft LicenseWeb Servers+3
Details
PiKVM logo

PiKVM

10.4k
PiKVM is an open-source Raspberry Pi-based KVM-over-IP solution for remotely managing servers and workstations.
Remote AccessIoT PlatformsFully FOSS
Fully FOSS
Details
Onloc logo

Onloc

11
Onloc is a service for tracking and locating devices, providing the back-end for storing and retrieving its data.
IoT PlatformsRemote AccessMaps and GPS
Details
netbird logo

netbird

29.9k
NetBird is a WireGuard-based private networking and access control platform for creating secure overlays and managing remote access.
Network UtilitiesRemote AccessOpen Core+1
3 ContainersOpen Core
Details