Verwenden Sie eine Shell, die nicht auf einem Remotecomputer installiert ist

9

Angesichts des Szenarios:

  • Remote- Computer: SSH-Server; Benutzer hat keine Administratorrechte;
  • Lokaler Computer: SSH-Client; Benutzer hat Administratorrechte.

Wenn Benutzer , um die Anmeldung Remote von lokalen , zu interagieren möchte remote auf eine Shell nicht installiert mit Fernbedienung , wie können Benutzer erreichen dies allein?

Beispiel: Der Benutzer verwendet fish auf lokal und möchte ihn auch auf remote verwenden , aber remote hat nur bash und zsh installiert.

sampablokuper
quelle
1
@mikeserv, danke. Kann nicht den Anruf verstehen , downvote, die ich als unangenehm betrachten cliquy und ausschließe. Ich habe kein Problem mit den Tag-Änderungen, aber ich nehme eine Ausnahme davon, dass meine Frage so neu formatiert wird, dass die Klarheit verringert wird. Ich benutze keinen Chat, kann ihn dort also nicht diskutieren.
Sampablokuper
Missbrauch von Fettdruck ist schwer zu lesen . Und Sätze , denen viele Wörter fehlen.
Gilles 'SO - hör auf böse zu sein'
2
@sampablokuper Sie haben Fettdruck verwendet, um den Punkt so hervorzuheben, dass er schwer zu lesen ist. Außerdem nähern Sie sich, wenn alles betont wird, nichts ist.
Derobert
1
@ Gilles, auch in keinem der Sätze in meiner Frage fehlen Wörter.
Sampablokuper
1
@derobert für die Klassifizierung (und damit Klarheit), so wie es viele Lehrbücher tun. In meiner Frage interagieren drei Systeme, und ihre Namen (oder, wenn Sie es vorziehen, Verweise auf sie) sind fett gedruckt. Nichts anderes ist fett geschrieben. Bevor jemand fragt (ich meine wirklich! Ich werde bereits gebeten, vollkommen verständliche Formatierungsoptionen zu rechtfertigen!), Ja, eines der Systeme ist menschlich und die anderen beiden sind nicht menschlich. Und Gilles, danke, aber nein, ich wollte keine Code-Formatierung verwenden. Ich bevorzuge die Code-Formatierung nur für Befehle oder Code, von denen keiner in meiner Frage vorhanden ist.
Sampablokuper

Antworten:

6

Installieren Sie Ihre Lieblings-Shell auf dem Remote-Computer. Dazu benötigen Sie keine Administratorrechte. Sie können Programme in Ihrem Home-Verzeichnis installieren. Dies ist nur weniger praktisch. Siehe Installation auf Debian 5 32-Bit ohne Root , Wie installiere ich ein Programm lokal ohne Sudo-Berechtigungen? , Programme und andere Fragen im Auge behalten .

Wenn Sie sich automatisch bei einer Shell anmelden möchten, die Sie selbst installiert haben, anstatt der Standard-Shell , lesen Sie zsh-Standard-Shell ohne Root-Zugriff erstellen

Wenn Sie nur entfernte Dateien bearbeiten möchten, können Sie den Remote-Verzeichnisbaum mit SSHFS auf Ihrem lokalen Computer bereitstellen .

mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/

fusermount -u ~/remote.d

Wenn Sie keinen Platz in Ihrem Home-Verzeichnis haben oder es sich um ein freigegebenes Konto handelt, können Sie mit dem Einrichten eines Reverse-SSH-Tunnels auskommen und Ihren lokalen Verzeichnisbaum mit SSHFS auf dem Remotecomputer bereitstellen , vorausgesetzt, auf beiden Computern wird dieselbe Architektur ausgeführt ( gleiche Unix-Variante auf demselben Prozessortyp). Wenn die beiden Computer über inkompatible Architekturen verfügen, können Sie die Programme für die Remote-Architektur sogar in Ihrem lokalen Home-Verzeichnis installieren. Dies ist möglicherweise nicht sehr praktisch, da Sie die Pfade korrekt einrichten müssen, damit die Programme ihre Bibliotheken, Konfigurationsdateien und anderen Datendateien finden.

Emacs ' eshell ist mit Tramp kompatibel : Wenn Sie in Eshell in ein Remote-Verzeichnis wechseln, führen Sie Befehle auf dem Remote-Computer aus.

Gilles 'SO - hör auf böse zu sein'
quelle
3

Einfache Antwort: Nein, Sie können auf einer Remote-Box kein Programm verwenden, das nicht auf der Remote-Box installiert ist.

Problemumgehung: Sie benötigen keine Administratorrechte, um eine Shell auf dem Remote-System zu installieren. Sie können es in Ihrem Home-Verzeichnis installieren, müssen es aber wahrscheinlich aus den Quellen kompilieren. Normalerweise mit so etwas wieconfigure --prefix=${HOME}/local

Letzte Anmerkung: Sie können Ihre Standard-Shell nicht in eine nicht "offizielle" ändern (siehe /etc/shells), aber Sie können so etwas exec fishin Ihre einfügen.bashrc

andcoz
quelle
2

Der Benutzer kann sshfs verwenden , um sein Remote-$ HOME auf seinem lokalen Computer bereitzustellen . In einem solchen Szenario würde der Benutzer die Shell seiner Wahl nicht direkt auf dem Remotecomputer verwenden, aber dennoch besser als nichts.

Arkadiusz Drabczyk
quelle
2

Der grundlegende Ansatz besteht darin, die ausführbare Shell-Datei mit auf den Remote-Host zu kopieren und sie scpdann mit sshz

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

Das -twird benötigt, damit sshein tty zugewiesen wird, was beim Ausführen eines Remote-Befehls standardmäßig nicht der Fall ist.

Dies setzt voraus, dass auf Ihrem Remote-Host dasselbe Betriebssystem ausgeführt wird. Wenn nicht, möchten Sie das Remote-Betriebssystem herausfinden und eine (möglicherweise statische) Binärdatei kompilieren, die Sie kopieren können.

Mikel
quelle
2

Die offensichtliche Antwort "Installieren Sie den Befehl auf dem Remotecomputer" ist die sauberste Lösung, daher sollten wir sie nicht ignorieren:

Wenn dies möglich ist, um den Befehl als root zu installieren, z. B. mit
sudo apt-get install fish, kann
der Befehl folgendermaßen ausgeführt werden:

ssh remote -t fish


Die Frage ist, was zu tun ist, wenn wir keinen Befehl auf dem Remotecomputer installieren können.
Genauer gesagt handelt es sich um den Fall, dass wir einen Befehl nicht als root installieren können .
Das heißt nicht, dass wir überhaupt nicht installieren können!

Es ist weiterhin möglich, den Befehl im Home-Verzeichnis zu installieren, indem Sie ihn aus der Quelle erstellen .

Dies hat den Vorteil, dass alle zugehörigen Unterstützungsdateien , die möglicherweise mit einem Befehl geliefert werden, und deren Suche durch das Programm berücksichtigt werden . Im fishShell-Beispiel sind dies die Vervollständigungsfunktionen usw., die alle nicht verfügbar sind, wenn wir nur die fishBinärdatei kopieren .

Das Erstellen eines Befehls aus dem Quellcode erfordert Entwicklungstools und Entwicklungsdateien der verwendeten Bibliotheken, was möglicherweise zu kompliziert ist.

Viele Programme enthalten jedoch alles, was sie benötigen, in den Quellen, sodass es möglicherweise einfach ist. Schwer zu sagen, aber man kann es einfach versuchen.

Um einen Befehl im Home-Verzeichnis zu installieren , configurewird der zu installierende Pfad mitgeliefert, der in den Build-Anweisungen überprüft werden muss. Z.B:

mkdir ~/local
./configure --prefix=~/local 
make
make install

Beachten Sie, dass dies nicht sudo make installwie üblich der Fall ist, da es den Sinn der lokalen Installation hat, hier kein Sudo zu benötigen.

Allgemeine Informationen zum Installieren von Programmen aus dem Quellcode finden Sie unter askubuntu.SE: Wie installiere ich eine .tar.gz- (oder .tar.bz2-) Datei?

Volker Siegel
quelle
0

Ich glaube nicht, dass Sie eine Shell ausführen können, die sich auf einem Computer auf einem anderen befindet. Die einzige Möglichkeit, es auf dem Remote-Computer auszuführen, besteht darin, es zu installieren.

env_explosion
quelle