Wie führt man mit SSH eine lokale Anwendung auf einem entfernten Server aus?

Wie führt man mit SSH eine lokale Anwendung auf einem entfernten Server aus?

Ich möchte wissen, ob es möglich ist, mit dem SSH-Protokoll eine lokale Anwendung auf einem entfernten Server auszuführen?

Antwort1

Um lokal installierte Anwendungen mit der CPU und dem Speicher eines anderen Computers auszuführen, können Sie – vorausgesetzt, die Prozessoren sind kompatibel – Folgendes versuchen. Ich bin nicht sicher, wie gut das funktioniert, aber die Theorie klingt schlüssig :) Sie benötigen wahrscheinlich Superuser-Zugriff auf den Remote-Server, damit dies funktioniert.

  • SSH zum entfernten Server

  • Hängen Sie das lokale Root-Dateisystem irgendwo ein. Sie sollten dies überhaupt nicht tun, es sei denn, Sie sind ganz sicher, dass Sie den Administratoren des Remote-Systems vertrauen können.

    • Dies kann über SSHFS erfolgen, solange Sie per SSH vom Server auf das lokale System zugreifen können. Ich denke, Sie können dies einrichten, indem Sie einen Port über die Verbindung zurückleiten, die Sie beim SSH vom lokalen System auf den Server hergestellt haben, aber ich selbst bin noch nicht auf solche Spielereien hereingefallen.
      • Wenn sich der lokale Computer in einem Heimnetzwerk befindet, richten Sie normalerweise einfach die Portweiterleitung auf Ihrem Router ein. Bevor Sie diesen Weg wählen, sollten Sie wahrscheinlich die Kennwortanmeldung in der sshd_config Ihres lokalen Systems deaktivieren und einen SSH-Schlüssel mit Passphrase für Ihr Konto auf dem Server generieren und scpdie id_?sa.pubDatei an lokal senden, um sie an Ihre anzuhängen ~/.ssh/authorized_keys. Eine weitere gute Idee ist es, die IP-Adressen einzuschränken, die sich per SSH auf Ihren Computer einloggen können. Und so weiter.
    • Wenn Sie etwas ausführen möchten, das als Root ausgeführt werden muss, müssen Sie meines Erachtens die SSHFS-Einbindung als Root auf Ihrem lokalen Dateisystem einrichten. Das bedeutet, dass Sie anderen Benutzern erlauben müssen, sich per SSH als Root auf Ihrem lokalen Rechner anzumelden, was eine weitere fragwürdige Vorgehensweise ist. Ich bin mir da nicht sicher, vielleicht können Sie sudo innerhalb der Chroot-Shell verwenden.
    • Sie könnten es auch auf andere Weise mounten, zum Beispiel über NFS, aber sshfs ist wahrscheinlich am einfachsten zu sichern. All dies über ein VPN zu tun, wäre wahrscheinlich klüger.
  • Sobald Sie das Dateisystem gemountet haben und weiterhin per SSH mit dem Server verbunden sind, führen Sie Folgendes aus:

    chroot /Pfad/zum/Mount/des/lokalen/Dateisystems BEFEHLSARGEN

Oder Sie gehen einfach cdin das Verzeichnis und führen aus chroot. Dann haben Sie sozusagen eine Root-Shell auf Ihrem eigenen System, wobei die Verarbeitung vom Server übernommen wird. Die erste Form hat den Vorteil, dass Sie die Ausgabe bequem auf dem Serversystem speichern können, da alle Umleitungen auf den Server erfolgen. EG

chroot /path/to/mount/of/local/filesystem find -iname "somefile" > ~/tmp/somefile.find.out

speichert die Liste der Dateien mit dem Namen "somefile" in Ihrem Home-Temp-Verzeichnis auf demServer.

Vorbehalte

Das ist, zumindest aus meiner Sicht, ziemlich experimentell. Ich bin mir nicht sicher, was schiefgehen könnte, aber ich würde es nicht versuchen, es sei denn, ein paar Leute bürgen dafür. Selbst dann würde ich es nicht auf einem Produktionssystem ausprobieren. Wenn ich eine IT-Fernsehsendung machen würde, wäre dieser Abschnitt mit den Worten untertitelt:Versuchen Sie dies nicht zu Hause".

Auf beiden Rechnern müssen Sie auf jeden Fall kompatible Prozessoren haben: Wenn das lokale System i386 ist, muss der Server i386 oder amd64 sein. Da außerdem der Kernel des Servers die Arbeit erledigt, können Sie nur lokale Anwendungen ausführen, die mit der Version des Kernels funktionieren, der auf dem Server läuft. Am besten wäre es wahrscheinlich, wenn es die gleiche Version wäre. Wenn also sowohl auf Ihrem lokalen Rechner als auch auf dem Remote-Server 32-Bit-Debian Squeeze läuft, könnte dies problemlos funktionieren.

Ein weiterer Hinweis: Der Nutzen dieser Vorgehensweise kann sehr begrenzt sein, da alle hin- und herüberzutragenden Daten – einschließlich der zu verarbeitenden Dateien und der Anwendungen selbst – verschlüsselt und über Ihre Remote-Verbindung übertragen werden müssen. Wenn Sie dies also tun möchten, um die überlegene Verarbeitungsleistung des Servers zu nutzen, gewinnen Sie am Ende möglicherweise nicht viel und verlieren möglicherweise sogar etwas.

Antwort2

Das hängt stark davon ab, wie Sie die von Ihnen verwendeten Begriffe definieren:

  • „Eine Anwendung ausführen“ bedeutet normalerweise, „die Anweisungen einer Binärdatei („.exe“) von der CPU verarbeiten zu lassen“.

  • „Lokal“ bedeutet normalerweise „die CPU der Maschine, vor der ich sitze, führt den Code aus“

  • ssh wird zum Verschlüsseln von Informationsströmen verwendet

Also, was darf es sein?

  • Möchten Sie Ihre lokale Anwendung lokal (von Ihrer CPU) ausführen, aber vom Server aus mit ihr interagieren? Ja, das geht über SSH. Suchen Sie nach „SSH-Tunneling“.

  • Möchten Sie, dass Ihre lokale Anwendung von den CPU(s) des Servers verarbeitet wird? Dann müssen Sie Ihre Binärdatei/die lokale Anwendung auf den Server kopieren und sie dann auf dem Server starten. Sie könnten zum Kopieren SSH verwenden. Aber Ihre „lokale Anwendung“ ist nach dem Kopieren nicht mehr so ​​lokal.

Sie können keinen Code auf einer CPU ausführen, ohne ihn der CPU zuvor zur Verfügung zu stellen.

Antwort3

Ein kleines Shell-Skript zur schnellen und einfachen Ausführung von Binärdateien auf Remote-Systemen:

#!/bin/bash

SOURCE_BIN="/some/path/binary"
DEST_HOST="name-of-system"
DEST_BIN="/another/path/binary"

cat ${SOURCE_BIN} | \
ssh ${DEST_HOST} "cat >${DEST_BIN}; chmod +x ${DEST_BIN}; ${DEST_BIN} with args; rm ${DEST_BIN}"

Antwort4

Sie können von einer Maschine (Maschine A) aus anfordern, dass eine andere Maschine (Maschine B) ein Programm ausführt, das sich bereits auf Maschine B befindet. Mit SSH ist dies möglich.

Und ich denke, Sie können von Maschine A beispielsweise auf eine Installationsdatei von Maschine B zugreifen und sie auf Maschine A ausführen, wodurch die Datei in den RAM von Maschine A übertragen wird. Ich denke, die Windows-Dateifreigabe macht das. (Die Datei wird dabei übrigens nicht verschoben oder kopiert, keine Datei verschwindet oder erscheint dabei irgendwo. Eine bessere Terminologie wäre, dass die Datei in den RAM kopiert wird und zu einem Prozess wird. Dies geschieht jedes Mal, wenn ein Programm ausgeführt wird, auch lokal.)

Theoretisch könnte eine sehr coole CPU und Anweisungen den RAM eines anderen Computers lesen. Das wäre auch über ein Netzwerk möglich. Vielleicht ist die Technologie tatsächlich da draußen, aber ich wüsste nicht, wo/was.

verwandte Informationen