Angenommen, Benutzer hat /bin/bash
als Shell in /etc/passwd
. Führen Sie ssh user@host command
dann den Befehl mit Bash aus. Diese Shell ist jedoch weder angemeldet noch interaktiv, was bedeutet, dass weder eine Quelle ~/.bash_profile
noch ~/.bashrc
eine Quelle vorhanden ist. In diesem Fall, wie man die PATH
Umgebungsvariable so einstellt , dass ausführbare Dateien gefunden und ausgeführt werden können? Wird empfohlen, dem eigentlichen Befehl ein Präfix voranzustellen source ~/.bashrc
?
18
.bashrc
wird 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
.Antworten:
Sie haben wenige Möglichkeiten:
PATH
auf dem Server in~/.ssh/environment
(Bedarf durch die Lage versetzt werdenPermitUserEnvironment yes
insshd_config
)..bashrc
: Stellen Sie dem Befehl das Präfix. ~/.bashrc
(odersource
) voran.Es hängt ziemlich stark vom Anwendungsfall ab, welchen Weg Sie einschlagen werden.
quelle
~/.bashrc
ist nicht erforderlich, es geschieht standardmäßig. Es scheint mir eine schlechte Idee zu sein.$PATH
dehnt sich nicht aus~/.ssh/environment
, zumindest nicht inOpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
.PermitUserEnvironment
(Standard in neueren Versionen)PATH="$PATH:/new/path"
zu meiner hinzugefügt habe,~/.ssh/environment
als es hätte sein sollenPATH=$PATH:/new/path
Sie setzen lokale Einstellungen mit Remote- Einstellungen gleich.
Lokal eine Bash-Instanz, die aktuelle laufende Shell, in die Sie schreiben:
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
ls
Befehl 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 sourced
am Anfang jeder Datei (im fernen System) ein einfügen (root wird zum Ändern von/etc/
Dateien benötigt ):Und dann starten Sie einfach eine SSH-Konsole:
In diesem Fall wurden beide
bashrc
Dateien gelesen, da jedeprofile
Datei Befehle zum Einschließen enthielt, und nicht, weil die Anmeldeshell sie direkt bezogen hat.In diesem System
bashrc
wird in beiden Fällen wo gelesen.Es muss kein a
source ~/.bashrc
zum 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.bashrc
für alle Benutzer, die eine Shell in diesem System starten. Oder~/.bashrc
für jeden Benutzer, der es braucht. Sie könnten (oder bearbeiten) , um ein Skelett eines Benutzers hinzufügen ,.bashrc
um/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/environment
für jeden Benutzer, der sie benötigt. Oder verwenden Sie diese Option/etc/ssh/sshrc
für eine globale Einstellung in dem System, in dem der SSH-Server ausgeführt wird (lesen Sie den Abschnitt "Dateien",man sshd
um weitere Informationen zu erhalten).quelle