~ / .profile wird bei Verwendung von SSH (Ubuntu) nicht geladen

27713
Charles R

Bearbeitet, um das Problem zu reflektieren, das ich wirklich lösen wollte:

Ich muss meine Ruby-Umgebung einrichten, damit ich sie über Capistrano bereitstellen kann.

export PATH=$HOME/.rbenv/bin:$PATH eval "$(rbenv init -)" 

Ich setze diese in ~ deploy / .profile, aber wenn ich ssh reinstelle, werden sie nicht ausgeführt. Ideen?

Ich verwende Ubuntu 12.04.


Die ursprüngliche Frage war:

Wenn ich bei localhost in ein anderes Konto ssh einlade, wird mein .profile nicht geladen. Wie kann ich ssh zwingen, es zu laden? Ich verwende Ubuntu 12.04.

17

3 Antworten auf die Frage

14

Sie können explizit angeben, dass Sie eine interaktive Login-Shell starten möchten:

 ssh user@host bash --login -i 

Die "Rolle" von ~/.profile(oder ~. / Bash_profile) und .bashrcfür ssh haben einige andere Dateien (siehe man sshDetails):

~ / .ssh / Umgebung

Enthält zusätzliche Definitionen für Umgebungsvariablen. siehe UMWELT oben.

~ / .ssh / rc

Befehle in dieser Datei werden von ssh ausgeführt, wenn sich der Benutzer anmeldet, unmittelbar bevor die Shell (oder der Befehl) des Benutzers gestartet wird. Weitere Informationen finden Sie auf der Handbuchseite zu sshd (8).

5
qmega

.profilewird nur für Login-Shells geladen, was eine SSH-Sitzung nicht ist (standardmäßig). Wenn Sie möchten, dass beim Start für alle interaktiven Shells etwas ausgeführt wird, setzen Sie es .bashrcstattdessen ( .zshrcoder was auch immer Ihre Shell verwendet).

Wenn Sie sich nur bei einem anderen Konto auf dem lokalen Computer anmelden möchten, ist ssh wahrscheinlich zu viel. Möglicherweise möchten Sie sustattdessen etwas verwenden.

Es scheint, dass `.bashrc` auch nicht geladen ist. kenorb vor 9 Jahren 1
Das ist falsch. Es ist eine Login-Shell. Auf der Manpage: "Wenn der Befehl angegeben ist, wird er auf dem Remote-Host statt einer Login-Shell ausgeführt." mkj vor 8 Jahren 0
~ / .zshenv arbeitet für mich. http://unix.stackexchange.com/questions/4921/sh-startup-files-over-ssh/ user91155 vor 7 Jahren 0
2
eremmel

Die Verwendung von Bash sollte zum Lesen führen ~/.bashrc. Die folgenden Informationen können bei ksh und sh (bash im sh-Modus) hilfreich sein, oder wenn Sie ~/.bashrcwährend der Anmeldung nicht ausgeführt werden.

Die sshd konsultiert ~/.ssh/environment(sshd_config (5) auf Berechtigungen prüfen) und ~/.ssh/sshrcoder ~/.ssh/rc. Dies gibt die Möglichkeit, ENV=~/.profileoder BASH_ENV=~/.profileund einzustellenSSH_LOGIN=Y

In ~/.profilehabe ich folgendes Layout (Ersetzen ENVmit BASH_ENVbei bash):

 if [[ -n $SSH_LOGIN || -z $ENV ]]; then # Put here login initialization code unset SSH_LOGIN ENV=~/.profile fi # Put here code thats get executed with each ksh/sh invocation