Ich habe einen Benutzer, der keine Änderungen am $ PATH in Dot-Dateien vorgenommen hat: Dies ist genau die Standardeinstellung des Systems. Aus einer Login-Shell:
$ ssh example.com
user@example.com:~$ cat /tmp/hello.hs
#!/bin/bash
echo "$SHELL"
echo "$PATH"
user@example.com:~$ /tmp/hello.hs
/bin/bash
/usr/local/bin:/usr/bin:/bin
Genau wie in angegeben /etc/profile
. Das finde ich eher unerwartet:
$ ssh example.com '/tmp/hello.sh'
/bin/bash
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Wie gesagt, es gibt keine Modifikation von $ PATH in ~/.bashrc
oder in /etc/bash.bashrc
. Nein auch ~/.ssh/environment
nicht. Das ssh(1)
deklariert, dass die Umgebungsvariable PATH
ist
Stellen Sie den Standard-PFAD ein, wie er beim Kompilieren von ssh angegeben wurde.
Aber dieser Thread von StackOverflow und dieser Mailinglisten- Artikel legen nahe, dass ich in der Lage sein sollte, den $ PATH-Wert für einen bestimmten Befehl zu beeinflussen , indem ich einfach / etc / profile, eine der Shell-Startdateien usw. ändere.
Was ist hier los?
.bashrc
könnte auch funktionieren, aber insgesamt würde ich es umgehen, wenn PATH wichtig ist. Oder warum nicht einfach vollständige Pfadnamen angeben, wenn Sie die 'command'-Methode zum Ausführen von ssh benötigen? :)bash(1)
Aufruf schlägt vor, dass keine Startdateien auf diese Weise gelesen werden, aber ich kann keine Dokumentation darüber finden, wie ssh die Shell aufruft. Dies scheint im Widerspruch zu den oben genannten Quellen zu stehen, es sei denn, andere haben / etc / ssh / sshrc-Startdateien, die ich nicht besitze. (Es gibt natürlich Workarounds, aber es geht/etc/profile
meinen Remote-Box-Pfad-Updates für mich ändere,ssh user@remotebox 'env'
wird mir der aktualisierte PATH angezeigt. Dasselbe gilt, wenn ichexport PATH=$PATH:/my/testpath
.bashrc hinzufüge (in meinem Fall jedoch oben in der Datei, bevor nach interaktiven Shells-z "$PS1"
Ich konnte ssh dazu bringen, Befehle über den Remote-Pfad auszuführen, indem ich Folgendes ausführte:
Hier kann env durch einen beliebigen Befehl ersetzt werden.
Ich habe autorisierte Schlüssel und benötige daher kein Passwort, um den Befehl oder ssh auszuführen.
quelle
Ich habe eine andere Lösung gefunden, um das Problem zu beheben. Ich persönlich bevorzuge es, neue Konfigurationsdateien zu erstellen, anstatt vorhandene zu ändern. Auf diese Weise kann ich Änderungen von der Standardkonfiguration leichter entfernen.
Hier sind die Inhalte von
/etc/profile.d/ssh_login.sh
:Mit
dropbear
anstelle vonopenssh-server
(dies sollte auch mit openssh funktionieren) wird die Variable SSH_CONNECTION automatisch gesetzt, wenn ich mich remote anmelde. Ich habe eine neue Shell-Profilkonfiguration erstellt, um SSH-Anmeldungen zu erkennen, einige Informationen auf dem Bildschirm anzuzeigen und vor allem die globalen Umgebungseinstellungen von/etc/environment
zu laden , um die kompilierten Werte zu ersetzen. Bitte beachten Sie, dass dies nur interaktive SSH-Shells betrifft, nicht die Remote-Befehlsausführung.Alternativ , wenn Sie OpenSSH verwenden und immer die globale Umwelt geladen werden soll, unabhängig davon , ob es sich um eine interaktive Shell, können Sie einen symbolischen Link in setzen
~/.ssh/
wie folgt aus :Dann müssen Sie die
PermitUserEnvironment
Option in aktivieren/etc/sshd/sshd_config
. Tun Sie dies jedoch nur für vertrauenswürdige Benutzer, da diese in einigen Konfigurationen Zugriffsbeschränkungen mithilfe von Mechanismen wie LD_PRELOAD umgehen können. Bitte beachten Sieman sshd_config
für weitere Informationen, insbesondere , wie die VerwendungMatch
Block Einschränkung Optionen für bestimmte Benutzer / Gruppen.quelle
Wenn Sie möchten, dass der Profilpfad geladen wird, versuchen Sie Folgendes:
am oberen Rand des Skripts. Auf diese Weise befindet sich die Shell beim Ausführen des Skripts im interaktiven Modus.
http://linux.die.net/man/1/bash
quelle