Auf der Bildschirmtastatur eines Telefons lässt sich nicht arbeiten. Zwei Wege, die sich ergänzen: SSH für alles Textliche, scrcpy für alles, was man sehen muss — Beweis S1 zeigt sich nur auf dem Bildschirm, die Kamera in S3 prüft man im Browser. tools/dev-ssh.sh richtet Termux' sshd ein (Port 8022, weil eine gewöhnliche App keine Ports unter 1024 belegen darf). Schlüssel vor Passwort: ein Passwort auf der Bildschirmtastatur einzutippen ist mühsam, und wer es sich deshalb kurz wählt, hat einen offenen Dienst im WLAN. provision.sh legt den öffentlichen Schlüssel des Rechners deshalb gleich mit ab. Über sshfs lassen sich die Dateien des Telefons im Editor des Rechners öffnen — kein Hin- und Herkopieren mehr. docs/entwicklung.md beschreibt beides samt Richtung der Änderungen: entwickelt wird auf dem Rechner, das Telefon führt nur aus und holt per git pull. Genau deshalb kommt per adb auch nur das Startskript aufs Gerät. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
103 lines
4.3 KiB
Bash
Executable File
103 lines
4.3 KiB
Bash
Executable File
#!/data/data/com.termux/files/usr/bin/bash
|
|
# HPOS — SSH-Zugang zu Termux einrichten. Reines Entwicklerwerkzeug.
|
|
#
|
|
# Für die Arbeit am Projekt ist ein SSH-Zugang deutlich angenehmer als die
|
|
# Bildschirmtastatur: echte Tastatur, Zwischenablage, Verlauf, und über sshfs
|
|
# lassen sich die Dateien auf dem Telefon direkt im Editor des Rechners öffnen.
|
|
#
|
|
# Termux' sshd lauscht auf Port 8022, nicht 22 — Ports unter 1024 darf eine
|
|
# gewöhnliche App nicht belegen.
|
|
#
|
|
# Aufruf in Termux: bash ~/hpos/tools/dev-ssh.sh
|
|
set -uo pipefail
|
|
|
|
SCHLUESSEL_ABLAGE="/sdcard/hpos-id.pub"
|
|
|
|
if [ -t 1 ]; then
|
|
C_OK=$'\033[32m'; C_WARN=$'\033[33m'; C_ERR=$'\033[31m'
|
|
C_HEAD=$'\033[1;36m'; C_DIM=$'\033[2m'; C_OFF=$'\033[0m'
|
|
else
|
|
C_OK=""; C_WARN=""; C_ERR=""; C_HEAD=""; C_DIM=""; C_OFF=""
|
|
fi
|
|
kopf() { printf '\n%s══ %s ══%s\n' "$C_HEAD" "$*" "$C_OFF"; }
|
|
ok() { printf '%s ✓%s %s\n' "$C_OK" "$C_OFF" "$*"; }
|
|
warn() { printf '%s !%s %s\n' "$C_WARN" "$C_OFF" "$*"; }
|
|
fehl() { printf '%s ✗%s %s\n' "$C_ERR" "$C_OFF" "$*"; }
|
|
hinweis() { printf '%s %s%s\n' "$C_DIM" "$*" "$C_OFF"; }
|
|
|
|
case "${PREFIX:-}" in
|
|
*com.termux*) : ;;
|
|
*) fehl "Dieses Skript läuft in Termux auf dem Telefon."; exit 1 ;;
|
|
esac
|
|
|
|
kopf "OpenSSH"
|
|
if command -v sshd >/dev/null 2>&1; then
|
|
ok "bereits installiert"
|
|
else
|
|
pkg install -y openssh || { fehl "Installation fehlgeschlagen"; exit 1; }
|
|
ok "installiert"
|
|
fi
|
|
|
|
# ── Anmeldung ────────────────────────────────────────────────────────────────
|
|
# Schlüssel vor Passwort: ein Passwort auf der Bildschirmtastatur einzutippen ist
|
|
# mühsam, und wer es sich deshalb kurz wählt, hat einen offenen Dienst im WLAN.
|
|
kopf "Anmeldung"
|
|
mkdir -p "$HOME/.ssh" && chmod 700 "$HOME/.ssh"
|
|
|
|
if [ -r "$SCHLUESSEL_ABLAGE" ]; then
|
|
if grep -qxFf "$SCHLUESSEL_ABLAGE" "$HOME/.ssh/authorized_keys" 2>/dev/null; then
|
|
ok "Öffentlicher Schlüssel bereits hinterlegt"
|
|
else
|
|
cat "$SCHLUESSEL_ABLAGE" >>"$HOME/.ssh/authorized_keys"
|
|
chmod 600 "$HOME/.ssh/authorized_keys"
|
|
ok "Öffentlichen Schlüssel aus $SCHLUESSEL_ABLAGE übernommen"
|
|
fi
|
|
elif [ -s "$HOME/.ssh/authorized_keys" ]; then
|
|
ok "authorized_keys vorhanden"
|
|
else
|
|
warn "Kein öffentlicher Schlüssel gefunden."
|
|
hinweis "Bequemer Weg — auf dem RECHNER ausführen:"
|
|
hinweis " adb push ~/.ssh/id_ed25519.pub $SCHLUESSEL_ABLAGE"
|
|
hinweis " (oder ~/.ssh/id_rsa.pub) und dieses Skript erneut aufrufen."
|
|
echo
|
|
printf ' Stattdessen jetzt ein Passwort setzen? [j/N] > '
|
|
read -r MIT_PASSWORT
|
|
case "${MIT_PASSWORT:-n}" in
|
|
j|J) passwd || { fehl "Passwort nicht gesetzt"; exit 1; } ;;
|
|
*) fehl "Ohne Schlüssel oder Passwort ist keine Anmeldung möglich."; exit 1 ;;
|
|
esac
|
|
fi
|
|
|
|
# ── Dienst ───────────────────────────────────────────────────────────────────
|
|
kopf "sshd"
|
|
pkill sshd 2>/dev/null && hinweis "alte Instanz beendet"
|
|
sleep 1
|
|
if sshd; then ok "läuft auf Port 8022"; else fehl "Start fehlgeschlagen"; exit 1; fi
|
|
|
|
# ── Adresse ──────────────────────────────────────────────────────────────────
|
|
kopf "Verbinden"
|
|
IP=$(ip -4 addr show 2>/dev/null | awk '/inet .*(wlan|swlan)/ {print $2}' | cut -d/ -f1 | head -1)
|
|
[ -z "$IP" ] && IP=$(ip -4 route get 1.1.1.1 2>/dev/null | awk '{print $7; exit}')
|
|
BENUTZER=$(whoami)
|
|
|
|
cat <<TEXT
|
|
Vom Rechner aus:
|
|
|
|
ssh -p 8022 ${BENUTZER}@${IP:-<telefon-ip>}
|
|
|
|
Dateien im Editor des Rechners bearbeiten:
|
|
|
|
mkdir -p ~/telefon
|
|
sshfs -p 8022 ${BENUTZER}@${IP:-<telefon-ip>}:/data/data/com.termux/files/home ~/telefon
|
|
# lösen mit: fusermount3 -u ~/telefon
|
|
|
|
Gut zu wissen:
|
|
|
|
· sshd überlebt keinen Neustart von Termux — dann dieses Skript erneut,
|
|
oder schlicht 'sshd' aufrufen.
|
|
· Port 8022 statt 22, weil eine gewöhnliche App keine Ports unter 1024
|
|
belegen darf.
|
|
· Der Dienst ist im ganzen WLAN erreichbar. In fremden Netzen abschalten:
|
|
pkill sshd
|
|
TEXT
|