Wie setze ich PATH beim Ausführen eines ssh-Befehls?

18

Angenommen, Benutzer hat /bin/bashals Shell in /etc/passwd. Führen Sie ssh user@host commanddann den Befehl mit Bash aus. Diese Shell ist jedoch weder angemeldet noch interaktiv, was bedeutet, dass weder eine Quelle ~/.bash_profilenoch ~/.bashrceine Quelle vorhanden ist. In diesem Fall, wie man die PATHUmgebungsvariable so einstellt , dass ausführbare Dateien gefunden und ausgeführt werden können? Wird empfohlen, dem eigentlichen Befehl ein Präfix voranzustellen source ~/.bashrc?

Cyker
quelle
5
.bashrcwird bezogen, aber es hat wahrscheinlich einen Test für die Interaktivität an der Spitze. Die Dinge, die Sie vor dieser Prüfung angegeben haben, sollten zutreffen, und das ist es, was ich tue, um PATH zu erzwingen, wenn der Server keine Benutzerumgebung oder -nutzung zulässt ~/.pam_environment.
Muru

Antworten:

18

Sie haben wenige Möglichkeiten:

  • Stellen Sie den PATHauf dem Server in ~/.ssh/environment(Bedarf durch die Lage versetzt werden PermitUserEnvironment yesin sshd_config).
  • Verwenden Sie den vollständigen Pfad zur Binärdatei
  • Wie bereits erwähnt, geben Sie Folgendes manuell ein .bashrc: Stellen Sie dem Befehl das Präfix . ~/.bashrc(oder source) voran.

Es hängt ziemlich stark vom Anwendungsfall ab, welchen Weg Sie einschlagen werden.

Jakuje
quelle
6
Manuelles Sourcing ~/.bashrcist nicht erforderlich, es geschieht standardmäßig. Es scheint mir eine schlechte Idee zu sein.
Sorontar
$PATHdehnt sich nicht aus ~/.ssh/environment, zumindest nicht in OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019.
Jaakko
1
@Jaakko Es ist wahrscheinlich in sshd_config deaktiviert PermitUserEnvironment(Standard in neueren Versionen)
Jakuje
Ich habe es herausgefunden, es wurde nicht erweitert, weil ich eine Zeile PATH="$PATH:/new/path"zu meiner hinzugefügt habe, ~/.ssh/environmentals es hätte sein sollenPATH=$PATH:/new/path
Jaakko
4

Sie setzen lokale Einstellungen mit Remote- Einstellungen gleich.

Lokal eine Bash-Instanz, die aktuelle laufende Shell, in die Sie schreiben:

ssh user@host command

Führt den Befehl ssh (nichts weiter) als Client-ssh aus.
Dazu muss die lokale Shell keine Sub-Shell oder eine neue Shell starten oder sich anmelden.

Der Befehl wird ausgeführt als lsBefehl lautet: lokal.

Es ist der Client-Befehl ssh, der eine Netzwerkverbindung zu einem fernen System herstellt. Bei korrekter Authentifizierung wird eine neue Shell gestartet, um den Befehl auszuführen, der als Argument für ssh geschrieben wurde, oder wenn kein Argument angegeben wird, weitere Befehle zu erwarten auf dieser Verbindung.

Diese neue Remote- Shell ist zwangsläufig eine Anmeldeshell, da der Remote-Benutzer (für dieses System) zur Anmeldung authentifiziert werden muss. Wenn ein bestimmter Befehl angegeben wird, führen Sie diesen Befehl einfach mit den Berechtigungen des authentifizierten Benutzers aus.

Sie können sehen, welche Dateien stammen, indem Sie $file sourcedam Anfang jeder Datei (im fernen System) ein einfügen (root wird zum Ändern von /etc/Dateien benötigt ):

$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done

Und dann starten Sie einfach eine SSH-Konsole:

$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read

In diesem Fall wurden beide bashrcDateien gelesen, da jede profileDatei Befehle zum Einschließen enthielt, und nicht, weil die Anmeldeshell sie direkt bezogen hat.

$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read

In diesem System bashrcwird in beiden Fällen wo gelesen.

Es muss kein a source ~/.bashrczum auszuführenden Befehl hinzugefügt werden .

Ändern Sie den Pfad

Alles, was Sie tun müssen, ist die korrekten Einstellungen zum Ändern des "$ PATH", entweder /etc/bash.bashrcfür alle Benutzer, die eine Shell in diesem System starten. Oder ~/.bashrcfür jeden Benutzer, der es braucht. Sie könnten (oder bearbeiten) , um ein Skelett eines Benutzers hinzufügen , .bashrcum /etc/skel/alle neuen Benutzer zur Verfügung haben die richtige Datei erstellt haben.

Das obige gilt nur für bash. Wenn Sie die Einstellung für alle Shells benötigen, setzen Sie wahrscheinlich die Umgebungsvariable PATH mithilfe der ssh-Datei ~/.ssh/environmentfür jeden Benutzer, der sie benötigt. Oder verwenden Sie diese Option /etc/ssh/sshrcfür eine globale Einstellung in dem System, in dem der SSH-Server ausgeführt wird (lesen Sie den Abschnitt "Dateien", man sshdum weitere Informationen zu erhalten).

Sorontar
quelle