Upterm Terminal Session Sharing

Upterm ermöglicht das einfache Teilen von SSH-Sessions. Ideal für Kunden-Support oder Pair-Programming mit externen Personen ohne Teleport-Zugang. Clients benötigen nur einen SSH-Client keine zusätzliche Software nötig.


Schnellstart Session teilen

Voraussetzung: upterm installiert (siehe Client Installation).

Linux

upterm host --server ssh://upterm.ebesch.de:2222 --accept -- bash

Per Alias (in ~/.bashrc):

alias share='upterm host --server ssh://upterm.ebesch.de:2222 --accept -- bash'
share

macOS

upterm host --server ssh://upterm.ebesch.de:2222 --accept -- bash

Per Alias (in ~/.zshrc):

alias share='upterm host --server ssh://upterm.ebesch.de:2222 --accept -- bash'
share

Windows (PowerShell)

upterm host --server ssh://upterm.ebesch.de:2222 --accept

Nach dem Start erscheint der Verbindungstoken sofort im Terminal:

➤ SSH:  ssh TOKEN:HASH@upterm.ebesch.de -p 2222

Token kopieren und weitergeben der Empfänger verbindet sich mit:

ssh TOKEN:HASH@upterm.ebesch.de -p 2222

Kein Tool auf Client-Seite nötig nur ein SSH-Client.


Client Installation

macOS

Installation via Homebrew:

brew install owenthereal/upterm/upterm

Linux (Debian / Ubuntu)

Installation via .deb-Paket aus den GitHub Releases:

curl -sL https://github.com/owenthereal/upterm/releases/latest/download/upterm_linux_amd64.deb -o /tmp/upterm.deb
sudo dpkg -i /tmp/upterm.deb

ARM64 (z. B. Raspberry Pi):

curl -sL https://github.com/owenthereal/upterm/releases/latest/download/upterm_linux_arm64.deb -o /tmp/upterm.deb
sudo dpkg -i /tmp/upterm.deb

Windows

Installation via Scoop:

1. Berechtigungen Execution Policy setzen (einmalig, PowerShell als Administrator):

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

2. Scoop installieren:

Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

Scoop installiert sich benutzerspezifisch nach %USERPROFILE%\scoop\.
PowerShell nach der Installation neu starten, damit der PATH wirksam wird.

3. upterm installieren:

scoop bucket add upterm https://github.com/owenthereal/scoop-upterm
scoop install upterm

Bekanntes Problem: 7zip Exit code 1640

Scoop benötigt 7zip als Abhängigkeit. Auf manchen Systemen schlägt die MSI-Extraktion fehl:

ERROR Exit code was 1640!
Failed to extract files from ...\7z2601-x64.msi.

Ursache: UAC/Sitzungskonflikt bei MSI-Paketen. Workaround mit lessmsi:

scoop uninstall 7zip
scoop cache rm 7zip
Remove-Item -Recurse -Force "$env:USERPROFILE\scoop\apps\7zip" -ErrorAction SilentlyContinue

scoop config use_lessmsi true
scoop install 7zip

Danach scoop install upterm erneut ausführen.

Troubleshooting Windows

Problem Ursache Lösung
Skriptausführung deaktiviert Execution Policy zu restriktiv Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
7zip Exit code 1640 MSI-Sitzungskonflikt (UAC) scoop config use_lessmsi true, dann 7zip neu
Host-Key Warnung Erster Verbindungsaufbau Einmalig yes Fingerprint: SHA256:nOHK++kJYUJz1bqUY1AM6defn36vTXsgWuSEhr3ltLk
upterm nicht gefunden PATH noch nicht aktiv PowerShell neu starten

Details & Server-Setup

Architektur

[Host-Maschine]
  └─ upterm host --server wss://upterm.ebesch.de -- bash
       │
       │  Reverse SSH Tunnel
       ▼
[uptermd    Server]
       ▲                  ▲
       │                  │
  Port 2222          WSS :443
  Portweiterleitung  NPM → Port 8080
  Router → LAN-IP
       │                  │
[Client]              [Client]
ssh -p 2222 ...       upterm proxy wss://...
(kein Extra-Tool)     (upterm CLI nötig)

Server: Installation & Build

Go installieren

curl -sL https://go.dev/dl/go1.22.4.linux-amd64.tar.gz -o /tmp/go.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export PATH=$PATH:~/go/bin' >> ~/.bashrc
source ~/.bashrc
go version

upterm & uptermd aus Source bauen

git clone https://github.com/owenthereal/upterm.git
cd upterm
go build -o /usr/local/bin/uptermd ./cmd/uptermd/
go build -o /usr/local/bin/upterm  ./cmd/upterm/

Host-Keys generieren

mkdir -p /etc/uptermd/keys
ssh-keygen -t ed25519 -f /etc/uptermd/keys/ed25519 -N ""
ssh-keygen -t rsa -b 4096  -f /etc/uptermd/keys/rsa     -N ""

chown -R nobody:nogroup /etc/uptermd/keys
chmod 600 /etc/uptermd/keys/*

Server: systemd Service

Siehe uptermd.service.

systemctl daemon-reload
systemctl enable --now uptermd
systemctl status uptermd

Wichtig: Kein Type=forking uptermd daemonisiert sich nicht selbst.


Server: Erreichbarkeit

Primär: Port 2222 via Portweiterleitung im Router

Feld Wert
Externer Port 2222
Internes Ziel LAN-IP Server
Interner Port 2222
Protokoll TCP
ssh -p 2222 TOKEN:HASH@upterm.ebesch.de

Alternativ: WebSocket via Nginx Proxy Manager (Port 443)

Für Clients hinter restriktiven Firewalls. Erfordert upterm CLI auf Client-Seite.

Feld Wert
Domain upterm.ebesch.de
Forward Host LAN-IP Server
Forward Port 8080
WebSocket Support aktivieren
SSL Let's Encrypt
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
ssh -o ProxyCommand='upterm proxy wss://TOKEN@upterm.ebesch.de' \
    TOKEN@upterm.ebesch.de:443

Nutzung (erweitert)

# tmux-Session teilen (empfohlen)
upterm host --server ssh://upterm.ebesch.de:2222 --accept \
  --force-command 'tmux attach -t shared' \
  -- tmux new -t shared

# Read-only (Kunde kann nur zuschauen)
upterm host --server ssh://upterm.ebesch.de:2222 --accept --read-only -- bash

# Session-Info anzeigen
upterm session current

Zusammenspiel mit Teleport

Teleport Upterm
Zweck Access-Management, Audit Session-Sharing / Pairing
Zielgruppe Internes Team Externe ohne Teleport-Zugang
Persistent Ja (systemd) Nur während aktiver Session
Ports 3022, 3080 2222, 8080

Faustregel: Teleport für das interne Team, Upterm für Kunden oder externe Kollegen die nur SSH benötigen.


Referenzen

Description
Upterm Server Setup – Self-hosted SSH session sharing via uptermd
Readme 77 KiB
Languages
PowerShell 98%
Batchfile 2%