f24dda5da112710b24ada7be3737ba5095236b09
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
Description
Languages
PowerShell
98%
Batchfile
2%