Früher haben wir /etc/environment
systemweite Umgebungsvariablen für Mountain Lion festgelegt. Es scheint jedoch, dass diese Datei nicht mehr gelesen wird.
Idealerweise sollte die Lösung für alle Benutzer gelten, und wir benötigen sie, um mit SSH-Konsolensitzungen arbeiten zu können. Wir brauchen das also, um zu arbeiten
ssh user@mavericks-machine 'echo $MY_ENV_VAR'
Bisher haben wir versucht:
/etc/launchd.conf
Funktioniert für alle Benutzer, gilt jedoch nur für 'windowed'-Anwendungen, dh im Terminal, jedoch nicht in einer ssh-Sitzung.
~/.profile
,~/.bash_profile
Usw.Gilt nur für Muscheln
Irgendwelche Vorschläge?
terminal
bash
environment-variables
Joerick
quelle
quelle
/etc/environment
) wird nicht gelesen, da es sich nicht um einen systemübergreifenden Standard handelt - sie ist nur Teil der Linux PAM-Funktion. Mac OS X ist kein Linux und verwendet nach meinem Wissen weder PAM noch andere Betriebssysteme. Sie sind damit nur durchgekommen, weil Sie anscheinend unter Linux waren. Und ja, es ist immer noch lesen - von Linux ;-)Antworten:
Die richtige Datei vor Mavericks war
~/.MacOSX/environment.plist
. Dies wird nicht mehr unterstützt.In Darwin und daher in Mac OS X müssen diese Einstellungen
/etc/launchd.conf
auf alle Prozesse angewendet werden. Wenn Sie sich speziell auf Benutzer-Shells beziehen, verwenden Sie stattdessen die entsprechenden Shell-Dateien, je nachdem, um welche Shell es sich handelt. Siehelaunchd.conf
undlaunchctl
man - Seiten für mehr.Das gesagt...
Wenn Sie speziell darauf abzielen, dass diese für SSH-Sitzungen angewendet werden, müssen Sie sich darüber im Klaren sein, dass SSH aus Sicherheitsgründen keine Umgebungsvariablen auf diese Weise anwendet. Tatsächlich empfängt eine ssh-Sitzung normalerweise eine viel restriktivere Menge von Umgebungsvariablen vom Betriebssystem, da es sich nicht um eine sogenannte "Login" - oder "interaktive" Shell handelt, sondern um eine "nicht interaktive" Shell. (Weitere
man bash
Informationen zu Shell-Typen finden Sie unter.) Die Art und Weise, wie ssh mit Umgebungsvariablen umgeht, wird in den ssh / sshd-Dokumenten und Manpages ausführlich behandelt.Bei ssh - das ist eine eigene Shell, ähnlich wie bei bash - werden Umgebungsvariablen für die Sitzung
~/.ssh/environment
als benutzerspezifische Entsprechung zum Festlegen dieser für bash oder csh usw. in den entsprechenden Startdateien gespeichert. Hier möchten Sie wahrscheinlich Ihre ENV-Variablen für Ihre Benutzer-SSH-Sitzungen festlegen, obwohl Sie nicht genau angeben, warum Sie ENVs in Ihrem ursprünglichen Beitrag global zuweisen möchten, was bei der Bereitstellung einer Lösung hilfreich gewesen wäre. Ich würde vorschlagen, dass Sie sie explizit für jeden Benutzer einzeln festlegen, um die ordnungsgemäße Sicherheit basierend auf den jeweiligen Konten gemäß der Best Practice für die geringsten Einschränkungen bei Berechtigungen und Attributen zu gewährleisten.Wenn Sie aus irgendeinem Grund die Auswirkungen auf die Sicherheit ignorieren möchten, stellen Sie dies
PermitUserEnvironment
in Ihren ssh-Konfigurationen ein. Beachten Sie, dass dies deaktiviert ist, wennUseLogin
aktiviert ist. WICHTIG: Beachten Sie, dass dies bedeutet, dass Benutzerkonten, die/bin/false
als Shell festgelegt sind - die typische Methode zum Deaktivieren eines Benutzerkontos - diese Einschränkung möglicherweise umgehen und jetzt aktiv werden können, was gefährlich ist. Viele Konten werden/bin/false
als Sicherheitserwartung als Shell verwendet.Unterm Strich sollten Sie dies nicht global tun und erwarten, dass ssh aus Sicherheitsgründen ENV verbreitet. Ihre Frage ist effektiv, absichtlich zu fragen, wie mehrere Mechanismen, die aus Sicherheitsgründen existieren, besiegt werden können.
quelle
/etc/launchd.conf
funktioniert nicht mehr , wie von OSX 10.10 Yosemite.Wenn Sie verwenden
bash
, gilt das Festlegen der Umgebungsvariablen in/etc/profile
für alle Benutzer.Aus dem
bash
Handbuch zu OS X Mavericks mit meinem Schwerpunkt (dies hat sich gegenüber früheren Versionen nicht geändert):quelle
Was Sie (und alle anderen, die diese Frage finden) mit ziemlicher Sicherheit suchen, ist der folgende Pfad:
Sie können Ihre Änderungen jederzeit in das
/private/etc/paths.d
Konfigurationsdokument "Pfade" des Hauptsystems$PATH
einfügen, wenn Sie Änderungen vermeiden möchten. Diese werden jedoch an das Ende Ihrer Variablen angehängt. Wenn Sie also Verzeichnisse vor$PATH
(nach) hinzufügen möchten, müssen Sie Folgendes beachten: Wenn Sie beispielsweise Standard-Systemdienstprogramme überschreiben, müssen Sie nur die Hauptdatei/private/etc/paths
selbst bearbeiten und diese am Anfang der Liste hinzufügen. Zum Beispiel mache ich das für einen Ordner, in dem ich eine Handvoll selbst erstellter Skripte zusammen mit ein paar Schlüsseldienstprogrammen wiemozjpeg
Ich möchte, dass das System immer die Standardeinstellungen verwendet (auf diese Weise werden alle JPEG-Dateien, die von so gut wie jedem Programm gespeichert wurden, automatisch um bis zu 10% mehr komprimiert, als das reguläre cjpeg-Dienstprogramm des Systems sie komprimieren würde). Wir haben gelesen, dass dies auf den meisten Systemen nicht der Fall ist, weil es viel langsamer ist. Wenn Sie jedoch von 0,14 Sekunden im Gegensatz zu 0,02 Sekunden sprechen, bedeutet das "um den Faktor 7 langsamer" nicht wirklich viel von irgendetwas ... vorausgesetzt, dies ist natürlich kein Server). Ich weiß, dass viele Leute wahrscheinlich vor der potenziellen "Gefahr" warnen werden, Änderungen so tief im System vorzunehmen, aber ich würde sagen, dass Sie, wenn Sie nach einer Antwort wie dieser suchen, wahrscheinlich genug wissen, um sich mit der Benennung von Dienstprogrammen zu befassen Konflikte, die möglicherweise in der Zukunft entstehen,/private/etc/paths
Gibt sie wirklich an alle möglichen Benutzer / Anmeldungen / Instanzen weiter - alle Programme, Shells usw. verwenden die Pfade in dieser Datei, um die Basis ihrer$PATH
Variablen zu erstellen .Um ehrlich zu sein, bin ich ziemlich überrascht, dass hier noch niemand darauf eingegangen ist. All das Herumspielen mit Launchd und Ablenkungen zu SSH-spezifischen Anwendungen ... nach dieser Lösung sucht jeder, der nach diesem Grundproblem sucht, wirklich - nach der sauberen Lösung, die direkt an die Quelle geht und immer funktioniert.
Übrigens, für den Fall, dass Sie sich fragen, ist OS X
/etc
einfach ein Symlink zu/private/etc
, so dass Sie es genauso einfach tunsudo nano /etc/paths
und genau an den gleichen Ort gelangen können. Der obige Pfad ist nur der vollständige tatsächliche Pfad der Datei.quelle
$PATH
. Das OP scheint nach einer generischen Lösung zu suchen - z. B. Einstellung einer beliebigen Umgebungsvariablen für das gesamte System$EDITOR
usw.sudo
Befehl in macOS Sierra wird mir die Berechtigung verweigert, wenn ich versuche,echo
eine neue Datei zu erstellen,/private/etc/paths.d
die einen Zusatz zum Pfad enthält. Es funktioniert jedoch, wenn Sie zuerst die Datei erstellen und dannsudo mv
mit verschieben/private/etc/paths.d
.~/.zshrc
... $ PATH gesetzt war. Das war in der Tat der Täter/private/etc/paths
und ich musste diese Datei aktualisieren. Vielen Dank.Ich hatte ein ähnliches Problem, insbesondere
~/.bashrc
wurde es nicht beschafft, als ich mich über SSH mit meinem Computer verband. Ich fand, dass das Ändern einer Konfigurationseinstellung für SSHd den Trick tat. Vielleicht liegt dein Problem auch beim SSH-Daemon?Ändern Sie die Konfigurationsdatei des SSH-Dienstes wie folgt:
Starten Sie dann den Remote-Anmeldedienst in den Systemeinstellungen> Freigabe neu.
Aus der
sshd_config
Manpage:(Falls es hilft, habe ich aufgeschrieben, wie ich das in meinem persönlichen Wiki getestet habe )
quelle
Wenn andere Benutzer nach dem Festlegen von Umgebungsvariablen für Prozesse suchen, die über eine normale grafische Anmeldesitzung gestartet wurden, können Sie diese verwenden
/etc/launchd.conf
. Wenn Sie beispielsweise/usr/local/bin
den Standardpfad hinzufügen möchten, führen Sie Folgendes ausund starten Sie neu, um die Änderungen zu übernehmen. Eine andere Möglichkeit, die Änderungen anzuwenden, besteht darin,
launchctl</etc/launchd.conf;sudo launchctl</etc/launchd.conf
Prozesse auszuführen und neu zu starten.quelle
/etc/launchd.conf
wird nicht mehr unterstützt seit OSX 10.10 YosemiteHmm ... Ab Mac OS X 10.10.5 und wahrscheinlich früher heißt es
man -s5 launchd.conf
: "launchd.conf is no longer respected by the system.
" Ich habe momentan zu viel zu tun , um eine Dummy-Variable in die Datei aufzunehmen und neu zu starten, um zu sehen, ob sie wirklich funktioniert oder nicht alles, aber die Dokumentation sagt, es sollte nicht funktionieren.Ich bin mir ziemlich sicher, dass es nicht so sein wird. Tun
man launchctl
Sie und Sie werden sehen: "The /etc/launchd.conf file is no longer consulted for subcommands to run during early boot time; this functionality was removed for security considerations.
"Alles, was Sie tun können , ist, alle Umgebungsvariablen, die Sie globalisieren möchten, in eine Datei zu schreiben, die möglicherweise
environment
im Einklang mit Linux aufgerufen wird , oder (falls Apple sich später dazu entschließt, etwas damit zu tun - Sie wissen es nie)environment.conf
, wie ich es getan habe. dann quelle dies über/etc/profile
:oder, wenn Sie das kompakte Format bevorzugen:
Wenn Sie eine andere Shell als bash verwenden und dieselbe Syntax mit variablen Einstellungen wie bash verwenden (wie zsh, glaube ich), müssen Sie diese Datei auch aus der systemweiten rc-Datei dieser Shell beziehen (z
/etc/zshrc
. B. ). Wenn Sie eine Shell verwenden, die eine andere Syntax verwendet, z. B. tcsh, müssen Sie entweder eine ähnliche Datei für diese Shell verwalten und sie aus der systemweiten rc-Datei der Shell (z. B./etc/csh.cshrc
für tcsh) beziehen oder besser noch ein Skript erstellen Dadurch wird es automatisch generiert, sodass Sie nur eine Datei bearbeiten müssen, um Variablen hinzuzufügen / zu ändern. Dies ist nicht der richtige Ort für ein solches Tutorial. Einige Sekunden später zeigte Google unter https://stackoverflow.com/questions/2710790/how-to-source-a-csh-script-in-bash-to , wie man [t] csh-Variablenexporte in Bash-Syntax konvertiert -set-the-UmweltEs ist also wahrscheinlich etwas verfügbar, um in die andere Richtung zu gehen.Ich habe die Erfahrung gemacht, dass Mac OS X immer weiter vom vorhersehbaren Verhalten von RC-Dateien abweicht. Ab mindestens 10.8 scheint es nicht mehr geladen zu werden
/etc/rc.common
,/etc/rc.conf
oder/etc/rc.<anything>
(seit mindestens 10.9) wird es nicht mehr/etc/bash.bashrc
für interaktive, nicht angemeldete Shells geladen (was es auf jeden Fall tun sollte, genau wie es ab~/.bashrc
10.10 noch für sie geladen wird). . Andererseits habe ich Fink, MacPorts und Homebrew alle Sachen installiert, also stört vielleicht eine von ihnen das Standardverhalten von Dotfiles. YMMV.quelle