imgssh – Lokale Zwischenablage-Bilder innerhalb von SSH einfügen
(github.com/coderredlab)Hallo.
In letzter Zeit arbeite ich oft per SSH auf Remote-Servern und nutze dabei Terminal-Tools wie Claude Code oder Codex. Dabei hat sich herausgestellt, dass das Einfügen von Bildern umständlicher ist, als man denkt.
Lokal liegt der Screenshot bereits in der Zwischenablage, aber der Remote-Server hat keine Möglichkeit, davon zu wissen. Deshalb musste ich das Bild jedes Mal als Datei speichern, per scp hochladen und den Pfad anschließend wieder einfügen.
Weil mir das zu lästig war, habe ich imgssh gebaut.
GitHub:
https://github.com/coderredlab/imgssh
Die Verwendung ist so, dass man sich statt mit normalem ssh mit imgssh verbindet.
imgssh user@host
Wenn sich in diesem Zustand ein Bild in der lokalen Zwischenablage befindet und man Ctrl+] drückt, wird das Bild nach Remote-/tmp hochgeladen und der Dateipfad in die aktuelle SSH-Sitzung eingegeben.
Zum Beispiel so.
'/tmp/imgssh-20260425-142744-a8f39c.png'
Die Funktion habe ich gebaut, um Bilddateipfade an CLIs wie Claude Code oder Codex zu übergeben.
Anfangs hatte ich auch über ein Plugin-Konzept pro Terminal nachgedacht. Aber es gibt Terminals wie Ghostty ohne Plugin-System, und jedes Terminal einzeln anzupassen, war auch nicht besonders attraktiv. Deshalb habe ich mich dafür entschieden, einfach ssh selbst zu umhüllen.
Die wichtigen Leitlinien dabei waren diese.
- kein globales Keyboard-Hooking
- kein Background-Daemon
- kein Reverse-Tunnel
- nichts, was auf dem Remote-Server installiert werden muss
- funktioniert nur innerhalb von SSH-Sitzungen, die mit
imgsshgeöffnet wurden
Darum verarbeitet jeder imgssh-Prozess nur seine eigene Sitzung, selbst wenn mehrere Tabs geöffnet sind. Wenn man zum Beispiel in einem Tab mit imgssh dev und in einem anderen mit imgssh prod verbunden ist, wird der in jedem Tab ausgelöste Trigger nur auf den jeweiligen Server hochgeladen.
Nested SSH wird dagegen nicht verfolgt. Wenn man sich mit imgssh dev verbindet und darin erneut ssh prod ausführt, wird das Bild weiterhin zu dev hochgeladen. Den Umfang habe ich absichtlich so begrenzt.
Derzeit ist es noch eine frühe Version, daher ist der Umfang bewusst einfach gehalten.
- auf Linux getestet
- verwendet OpenSSH
- PNG-Bilder aus der Zwischenablage
- Standard-Upload nach
/tmp - Einfügen eines gequoteten Pfads
- für den Upload werden ein separater
ssh-Prozess und OpenSSHControlPathverwendet
Für macOS ist im Code zwar ein pngpaste-Backend enthalten, aber ich konnte es bisher noch nicht selbst testen.
Es gibt auch Tools wie clipssh oder PasteHop, die ein ähnliches Problem lösen. imgssh liegt jedoch eher auf der Seite eines „SSH-Wrappers“ als bei einem One-Shot-Uploader oder einem Tool mit Terminal-Integration.
Es gibt noch vieles zu verfeinern. Vor allem bei der Verarbeitung von SSH-Argumenten, den Trigger-Tasten je nach Terminal und der UX in Umgebungen wie tmux/nvim ist noch mehr Testen nötig.
Probiert es gern aus, und wenn euch ungewöhnliche Fälle oder bessere Ansätze einfallen, freue ich mich über Feedback.
Noch keine Kommentare.