6.1 KiB
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.
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)
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 ""
# Berechtigungen für nobody
chown -R nobody:nogroup /etc/uptermd/keys
chmod 600 /etc/uptermd/keys/*
systemd Service
Siehe uptermd.service.
systemctl daemon-reload
systemctl enable --now uptermd
systemctl status uptermd
Wichtig: Kein
Type=forking– uptermd daemonisiert sich nicht selbst.
Erreichbarkeit
Primär: Port 2222 via Portweiterleitung im Router
Einfachste Lösung – direkte TCP-Weiterleitung, kein Proxy nötig.
| 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 |
# NPM Advanced – falls WebSocket-Header fehlen
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
Wichtig: Immer
--serverund--acceptangeben.
Ohne--serververbindet upterm mit dem öffentlichen uptermd.upterm.dev.
Ohne--acceptmuss jede eingehende Verbindung manuell bestätigt werden.
Session starten
# Standard – eigener Server, automatisch akzeptieren
upterm host --server ssh://upterm.ebesch.de:2222 --accept -- bash
# Alternativ via WebSocket
upterm host --server wss://upterm.ebesch.de --accept -- bash
# 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
Schnellstart per Alias
# ~/.bashrc oder ~/.zshrc
alias share='upterm host --server ssh://upterm.ebesch.de:2222 --accept -- bash'
share
# Token erscheint sofort – kopieren und weitergeben
Session-Info
upterm session current
Client verbinden
# Ohne upterm CLI – nur SSH nötig (Port 2222)
ssh -p 2222 TOKEN:HASH@upterm.ebesch.de
# Mit upterm CLI via WebSocket (Port 443)
ssh -o ProxyCommand='upterm proxy wss://TOKEN@upterm.ebesch.de' \
TOKEN@upterm.ebesch.de:443
Client-Anforderungen
| Verbindungsweg | Client braucht |
|---|---|
| SSH Port 2222 (Portweiterleitung) | Nur ssh – nichts installieren |
| WebSocket WSS Port 443 | upterm CLI |
Referenzen
Windows Client
Installation via Scoop (empfohlen)
Scoop installieren (PowerShell als Administrator):
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Bekanntes Problem: 7zip-Extraktion schlägt fehl (Exit code 1640)
7zip installiert sich via MSI und schlägt auf manchen Windows-Systemen mit folgendem Fehler fehl:
ERROR Exit code was 1640!
Failed to extract files from ...\7z2601-x64.msi.
Workaround: lessmsi als alternativen MSI-Extraktor verwenden:
# Fehlgeschlagene Installation bereinigen
scoop uninstall 7zip
scoop cache rm 7zip
# lessmsi als MSI-Extraktor aktivieren
scoop config use_lessmsi true
# 7zip erneut installieren – diesmal via lessmsi
scoop install 7zip
upterm installieren:
scoop bucket add upterm https://github.com/owenthereal/scoop-upterm
scoop install upterm
Nutzung unter Windows
Session starten (PowerShell):
# Eigener Server, automatisch akzeptieren
upterm host --server ssh://upterm.ebesch.de:2222 --accept
# Beim ersten Verbinden: Host-Key bestätigen mit "yes"
# Danach erscheint der Token direkt:
# ➤ SSH: ssh TOKEN:HASH@upterm.ebesch.de -p 2222
Unter Windows startet upterm standardmäßig eine
powershell -NoLogoSession stattbash.
Client verbindet sich (nur SSH nötig):
ssh TOKEN:HASH@upterm.ebesch.de -p 2222
Troubleshooting
| Problem | Lösung |
|---|---|
| 7zip Exit code 1640 | scoop config use_lessmsi true, dann scoop install 7zip neu |
| Host-Key Warnung | Einmalig mit yes bestätigen; Fingerprint: SHA256:nOHK++kJYUJz1bqUY1AM6defn36vTXsgWuSEhr3ltLk |
upterm nicht gefunden |
PowerShell neu starten (PATH wird erst nach Neustart übernommen) |