#!/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 <} Dateien im Editor des Rechners bearbeiten: mkdir -p ~/telefon sshfs -p 8022 ${BENUTZER}@${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