← Back to Gists

reach(.py)

📝 Python
retoor
retoor · Level 54919 ·

Not sure if it is something to be proud about. But I was working on my 32-bit machine and you know what, no audio. Sad. No agentic system would want to work on a 32-bit machine and my own rescue harness became accidentally a frontier agent system beating Grok (can happen often) so i was fucked.

So, I made a script like below (this one is obviously vibed) to connect to a machine with port forwarding and a stream back so Claude can go hard on repairing my machine.

It worked in one time. Feels good.

Wat felt less good, it was just the volume on certain level. Failure.

Python
#!/usr/bin/env python3
# retoor <retoor@molodetz.nl>
import base64
import getpass
import os
import subprocess
import sys
import tempfile

DEFAULT_PORT = 2222
GATEWAY = "retoor@molodetz.nl"

TOHOME = """\
import subprocess, sys
port, user = sys.argv[1:3]
sys.exit(subprocess.call(["ssh", "-p", port, "%s@localhost" % user]))
"""

TOTHERE = """\
import shlex, subprocess, sys
port, payload, gateway, user = sys.argv[1:5]
remote = "f=$(mktemp); trap 'rm -f $f' EXIT; echo %s | base64 -d > $f; python3 $f %s %s" % (payload, port, shlex.quote(user))
command = ["sudo", "ssh", "-t", "-o", "ExitOnForwardFailure=yes", "-o", "ServerAliveInterval=30",
           "-o", "ServerAliveCountMax=3", "-R", "%s:127.0.0.1:22" % port, gateway, remote]
sys.exit(subprocess.call(command))
"""


USAGE = """\
reach [poort | -h | --help]

Zet op deze computer een reverse tunnel naar molodetz (standaard poort 2222) en
opent daar een sessie terug naar deze computer. Zolang reach draait is deze
computer vanaf molodetz bereikbaar via: ssh -p 2222 user@localhost
Hierin is user de gebruikersnaam waarmee reach op deze computer draait.
Alle commando's hieronder voer je op molodetz uit, in een tweede terminal.

Gebruiksvoorbeelden

1. Interactief herstel
   reach
   De sessie die reach opent is een shell op deze computer.

2. Supersnelle backup van veel bestanden (tar-stroom, geen overhead per bestand)
   ssh -p 2222 user@localhost 'tar -cf - -C /home/user . | zstd -T0 -3' > backup.tar.zst
   Zonder zstd: vervang zstd -T0 -3 door gzip -1.

3. Incrementele synchronisatie met behoud van rechten
   rsync -aHAX --info=progress2 -e 'ssh -p 2222' user@localhost:/home/user/ ./kopie/

4. Directe prompt naar een LLM met live data van deze computer
   ssh -p 2222 user@localhost 'journalctl -k -n 200' \\
     | jq -Rs '{model: "x-ai/grok-4.3", messages: [{role: "user", content: ("Analyseer deze kernellog:\\n" + .)}]}' \\
     | curl -s https://openrouter.ai/api/v1/chat/completions \\
         -H "Authorization: Bearer $OPENROUTER_API_KEY" -H "Content-Type: application/json" -d @- \\
     | jq -r '.choices[0].message.content'

5. Eenmalige diagnose zonder interactieve sessie
   ssh -p 2222 user@localhost 'lspci -nnk; aplay -l; amixer -c 0 scontents; dmesg | tail -50'

6. Bestanden verplaatsen
   scp -P 2222 ./bestand user@localhost:/tmp/
   scp -P 2222 user@localhost:/var/log/syslog ./syslog.remote

7. Een webinterface of dienst op deze computer lokaal openen
   ssh -p 2222 -N -L 8080:localhost:80 user@localhost
   Daarna is de dienst bereikbaar op http://localhost:8080 op molodetz.

8. Schijfimage maken (vereist sudo zonder wachtwoord op deze computer)
   ssh -p 2222 user@localhost 'sudo dd if=/dev/sda bs=4M status=none | gzip -1' > schijf.img.gz

9. Beheer en updates op afstand
   ssh -p 2222 user@localhost 'sudo apt-get update && sudo apt-get -y upgrade'

10. Grote bestanden hervatbaar overzetten
    rsync -P --partial -e 'ssh -p 2222' user@localhost:/pad/groot.iso ./

11. Meerdere computers in een keer controleren
    for poort in 2222 2223 2224; do ssh -p $poort user@localhost hostname; done
    Start dan op elke computer reach met een eigen poort, bijvoorbeeld reach 2223.

12. Vrije shell, zelf bepalen wat je doet
    ssh -p 2222 user@localhost
    Je komt direct in een volledige shell op deze computer terecht. Dit is
    dezelfde verbinding die reach zelf opent, dus je kunt er ook met sudo
    werken en alles uitvoeren wat nodig is.
"""


def parse_port():
    if len(sys.argv) < 2:
        return DEFAULT_PORT
    try:
        port = int(sys.argv[1])
    except ValueError:
        raise SystemExit("Poort moet een getal zijn: %s" % sys.argv[1])
    if not 1024 <= port <= 65535:
        raise SystemExit("Poort moet tussen 1024 en 65535 liggen")
    return port


def encode(source):
    return base64.b64encode(source.encode()).decode()


def main():
    if len(sys.argv) > 1 and sys.argv[1] in ("-h", "--help"):
        print(USAGE, end="")
        return 0
    port = parse_port()
    with tempfile.TemporaryDirectory() as directory:
        path = os.path.join(directory, "tothere")
        with open(path, "w") as handle:
            handle.write(TOTHERE)
        command = ["python3", path, str(port), encode(TOHOME), GATEWAY, getpass.getuser()]
        return subprocess.call(command)


if __name__ == "__main__":
    sys.exit(main())

Comments

No comments yet. Start the discussion.