Mein Problem ist, dass ich env-Variablen (wie GIT_EXEC_PATH) auf einem Server setzen muss. Ich brauche diese Variablen für jede Verbindung (also auch für Bash und Remote-Befehle). Ich habe es geschafft, diese Variablen durch Bash mit .bash_profile festzulegen, aber ich habe Probleme mit den Remote-Befehlen. Ich habe festgestellt, dass es möglich ist, Befehle in ~ / .ssh / authorized_keys vor dem eigentlichen rsa-Schlüssel zu schreiben, aber ich möchte nicht immer dort schreiben, ich brauche eine dauerhafte Lösung ... Ich habe festgestellt, dass ~ / .ssh Die / rc-Datei wird bei jedem ssh-Login ausgeführt, daher habe ich dort meine env-Variablendeklarationen abgelegt, aber es hat nicht funktioniert. Die Variablen werden in der RC-Datei festgelegt, aber danach sind sie verschwunden. : S Möglicherweise wird die RC-Datei in einer Subshell ausgeführt: S Gibt es eine Möglichkeit, diese Variablen in Bash und in Remote-Befehlen ohne Codeduplizierung zu definieren?
Bearbeiten:
Ich habe die Frage bearbeitet, da der Server ein von Godaddy gemeinsam genutzter Host ist und daher eine eindeutige Konfiguration hat. Die Dateien / etc / ssh / sshd_config und / etc / ssh / ssh_config sind leer. Es gibt Kommentare in diesen Dateien, wenn Sie neugierig sind, kann ich es hier kopieren.
- Das ~ / .bash_profile wird bezogen (nur über Bash-Verbindungen).
- das ~ / .bashrc wird nie bezogen,
- das ~ / .profil wird nie bezogen,
- Die ~ / .ssh / -Umgebung wird niemals bezogen.
- Das ~ / .ssh / rc wird bezogen (sowohl von Bash als auch von Remote), aber ich denke, es wird in Subshell aufgerufen, da die Variablen verschwinden.
- Die ~ / .ssh / autorisierten_Tasten werden jedes Mal von bezogen, aber ich muss die Befehle vor jedem rsa-Schlüssel schreiben (damit ich nicht damit konfigurieren möchte).
Zusammenfassung:
Ich kann die Bash gut konfigurieren (mit .bash_profile), aber ich kann die Remote-Aufrufe nicht konfigurieren. Das ist das Problem. Ich suche nach einer Datei, die sowohl von Bash- als auch von Remote-Befehlen stammt.
Beispielsweise:
Der Befehl git-upload-pack findet die exe-Datei, da die env-Variable GIT_EXEC_PATH festgelegt ist, aber mit remote: "git clone [email protected]: myrepo local / myrepo" findet der Server diesen Befehl nicht, da GIT_EXEC_PATH ist nicht eingestellt.
Edit2:
Nach diesem , und meinen printenv Protokollen: der ~ / .ssh / rc in der normal Shell ausgeführt wird , nicht in Subshell, so ist es ein Rätsel ist , warum die env Variablen nicht kleben ...
Ich habe eine ausführbare Datei erstellt: ~ / logenv :
echo "" >> mylog.txt
date >> mylog.txt
printenv >> mylog.txt
echo "" >> mylog.txt
Und füge dies in das ~ / .ssh / rc ein :
export AAA=teszt
source ~/logenv
Durch Bash Login & "Source Logenv" war das Ergebnis:
Tue May 15 04:21:37 MST 2012
TERM=cygwin
SHELL=/bin/bash
SSH_CLIENT=censored
SSH_TTY=/dev/pts/2
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv
Tue May 15 04:21:41 MST 2012
HOSTNAME=censored
TERM=cygwin
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=censored
Per Remote "ssh [email protected] 'exec ~ / logenv'" war das Ergebnis:
Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv
Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
PATH=/usr/local/bin:/bin:/usr/bin
MAIL=/var/mail/myuser
PWD=/home/content/65/7962465
HOME=/var/chroot/home/content/65/7962465
Die RC-Datei wird also bezogen, aber danach verschwinden die Variablen ...: S.
quelle
Antworten:
Angenommen, Sie haben
UsePAM yes
in/etc/ssh/sshd_config
und möchten, dass diese Umgebungsvariablen für jeden Benutzer festgelegt werden, können Sie pam Umgebungsvariablen für Sie festlegen. Wenn Sie die Umgebungsvariablen definiert haben, können/etc/gitenv
Sie diese Zeile hinzufügen/etc/pam.d/sshd
Wenn Sie diese Datei überprüfen, stellen Sie möglicherweise fest, dass bereits eine Datei pam_env.so verwendet wird und bereits eine Datei, zu der Sie Inhalte hinzufügen können. Seien Sie vorsichtig und stellen Sie sicher, dass Sie Ihre Änderungen gründlich getestet haben, bevor Sie Ihre SSH-Sitzung beenden. Wenn Sie mit Pam herumspielen, können Sie Ihre Anmeldefähigkeit bei Ihrem Server vollständig beeinträchtigen, wenn Sie nicht vorsichtig sind.
quelle
/etc/environment
von sourced istpam_env.so
standardmäßigIch setze eine Umgebungsvariable für meine SSH-Verbindungen mithilfe von
~/.ssh/environment
. Die Datei kann Variablen im Formular enthaltenVAR=value
, ohne dass diese explizit exportiert werden müssen.Diese Benutzerkonfigurationsdatei wird jedoch vom SSH-Serverprozess standardmäßig ignoriert, es sei denn, die Option PermitUserEnvironment ist auf yes gesetzt. Daher müssen Sie sicherstellen, dass Sie / etc / sshd_config auf dem SSH-Server bearbeiten, um diesen Parameter hinzuzufügen oder zu aktualisieren:
Sie müssen die SSH-Serverkonfiguration neu laden. Unter RHEL oder Suse Linux tun Sie dies (als Root)
(Ersetzen Sie möglicherweise sshd durch ssh, wenn es nicht funktioniert)
Unter Ubuntu (mit Upstart) tun Sie dies
Unter jedem anderen Linux können Sie es versuchen (als root)
(Ersetzen Sie sshd durch ssh oder openssh oder was auch immer dem SSH-Server-Init-Skript entsprechen würde.)
quelle
Ich habe keinen gemeinsamen Godaddy-Host mehr, daher kann ich nicht überprüfen, ob die vorgeschlagenen Lösungen gültig sind. Dies bleibt die akzeptierte Antwort, da es von mir funktioniert hat, als ich die Frage gestellt habe. Die anderen Antworten könnten auch funktionieren. Ich habe die Community das mit Upvotes entscheiden lassen.
In Ordnung. Die Lösung ist, dass es auf einem gemeinsam genutzten Godaddy-Host keine Lösung gibt. Ich habe alles versucht, aber nichts funktioniert, also habe ich beschlossen, bei den ~ / .ssh / autorisierten_Tasten zu bleiben:
In der ~ / connect.sh:
Und im ~ / .env_profile:
Also muss ich den Befehl = "..." auf jeden rsa-Schlüssel in den autorisierten Schlüsseln kopieren. Dies ist eine Codeduplizierung, aber ich glaube nicht, dass es eine andere Lösung für einen von Godaddy gemeinsam genutzten Host gibt.
quelle
Wenn Sie
bash
als Shell verwenden, fügen Sie die Umgebungseinstellungen hinzu.bashrc
.Überprüfen Sie zuerst, ob dies beim Anmelden ausgeführt wird. Möglicherweise nicht, da die Standarddateien häufig Folgendes enthalten:
am Anfang von ihnen. Jede Änderung, die Sie auch für nicht interaktive Anmeldungen vornehmen möchten, muss über eine solche Anweisung hinausgehen.
.profile
Eine allgemeinere Platz Konfiguration so zu setzen und wird von den meisten Schalen respektiert (auf einem Standard - Debian - Setup ist es ,~/.profile
dass Anrufe~/.bashrc
an erster Stelle). Möglicherweise müssen Sie die Bearbeitung sorgfältiger durchführen,.profile
falls sie jemals von anderen Shells interpretiert wird. Versuchen Sie daher, die Verwendungbash
bestimmter Erweiterungen zu vermeiden .Bearbeiten
Wenn Sie eine
.bash_profile
Bearbeitung haben, die anstelle von.profile
: bash diese zugunsten der allgemeineren Datei verwendet, und Sie können dort sicher bash-spezifische Dinge verwenden.quelle
Sie können den Befehl für alle Benutzer / Schlüssel verwenden, ohne den Befehlsteil in den autorisierten Schlüsseln hinzuzufügen, indem Sie diese Zeile zur Datei sshd_config hinzufügen:
In diesem Fall schlage ich vor, dass Sie einen absoluten Pfad für das Skript verwenden
quelle
Ich schlage Ihnen einen anderen Ansatz vor.
Sie richten eine Datei mit der Deklaration Ihrer Umgebungsvariablen ein und beziehen sie jedes Mal, wenn Sie einen Remote-Befehl aufrufen.
Beispiel: Sie geben die erforderlichen Variablen in ~ / .my_var.rc und dann für jeden Remote-Befehl ein, den Sie ausführen
ssh user@remote bash -c "source ~/.my_var.rc; <your command>"
Wenn dies zu Ihnen passt, können Sie dieses Konzept verfeinern und der Einfachheit halber skripten. Wenn Sie es nur für Git-Befehle benötigen, würde ich ein git.sh-Skript erstellen, das dies tun würde:
Angenommen, dieses Skript befindet sich in Ihrem Home-Verzeichnis, würden Sie es aufrufen:
ssh user@remote git.sh pull origin master
Hinweis: Dies ist ein einfacher Ausgangspunkt. Beispielsweise werden Parameter mit Leerzeichen nicht unterstützt.
quelle
ssh -Y user@remote git.sh gui
Dies beantwortet nicht die allgemeine Frage zu PATHS, ermöglicht es Ihnen jedoch, ein Git-Repository auf einem Remote-Server zu verwenden, dessen Pfad kein Git enthält und auf das Sie keinen Root-Zugriff haben. Diese Lösung stammt von dieser Seite .
So schieben und holen Sie auch:
quelle
/ etc / profile wird bei jeder Verbindung mit ssh-client bezogen.
quelle