So deaktivieren Sie die in ssh_config festgelegten SendEnv-Variablen in ~ / .ssh / config

30

Ich konnte das nirgendwo finden, also frage ich mich, ob ich der einzige bin, der ein solches Problem hat.

Standardmäßig hat ssh unter Red Hat und Debian mindestens eine ssh_config mit SendEnv-Option, die LC * - und LANG-Variablen in der Remote-Sitzung übergibt. Wenn jemand nicht root ist, um / etc / ssh / ssh_config zu ändern, wie kann er dieses Verhalten deaktivieren? Die SendEnv-Option scheint sich zu häufen, und ich sehe keine Möglichkeit, sie zurückzusetzen.

Und um nicht gefragt zu werden, muss vermieden werden, dass mein Gebietsschema an Testcomputer übergeben wird, um Nebenwirkungen auf Skripts und Programmen zu vermeiden, bei denen das Gebietsschema als Standard für den Computer verwendet wird.

akostadinov
quelle
Dies ist keine Antwort auf Ihre Frage. Können Sie Ihr Problem jedoch lösen, indem Sie die Skripte und Programme auf Ihren Testcomputern über envoder mit einem Wrapper-Skript aufrufen ?
Scott
2
Ja, Workarounds sind möglich, aber unpraktisch
akostadinov 10.10.12

Antworten:

18

Du bist nicht der einzige . Wie dokumentiert in ssh_config(5)können Sie nicht ungesetzt SendEnv, weil

Mehrere Umgebungsvariablen können auf mehrere [...] SendEnv-Anweisungen verteilt sein.

Wenn Sie root auf den Testmaschinen haben, können Sie ändern AcceptEnv, dass vom Client gesendete Variablen nicht akzeptiert werden.

Ansgar Wiechers
quelle
4
Mist, ich sehe nur -F auf der Kommandozeile kann helfen, aber es ist zu unpraktisch, um es wirklich zu benutzen. Siehe bugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov
5

Dies kann nicht durchgeführt werden, ~/.ssh/configda SendEnves nicht überschrieben werden kann.

Die Verwendung von Aliasen funktioniert nicht für Skripte, die ssh aufrufen.

Eine Alternative ist das Exportieren einer Funktion. ZB in ~/.bashrc:

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh
Fernando Correia
quelle
1

Es gibt die Möglichkeit SetEnv, einen LANGbestimmten Wert vor dem Senden zu erzwingen .

Das sagt auch die Manpage

Es ist möglich, zuvor festgelegte SendEnv-Variablennamen durch Präfixieren von Mustern mit zu löschen -.

aber ich habe es nicht geschafft, diese Arbeit zu machen.

burunduk3
quelle
Siehe bugzilla.mindrot.org/show_bug.cgi?id=1285 , wahrscheinlich erklärt dies, warum der -Ansatz nicht funktioniert hat. Guter Vorschlag jedoch, Remote-LANG und andere Variablen in der ssh-Konfiguration fest zu codieren. Macht die Dinge vorhersehbarer. Möglicherweise SetEnvhandelt es sich um eine neuere Richtlinie, weil niemand anderes dies vorgeschlagen hat. SetEnv LANG=en_US.UTF-8
Akostadinov
0

Wenn Sie bash verwenden, können Sie einen Alias ​​ssh = 'LANG = command ssh' einrichten, um die Weiterleitung von LANG an die anderen Server zu deaktivieren.

Tharrrk
quelle
0

Sie können verwenden, su - youruserwenn Sie über ssh angemeldet sind. Dadurch wird die Umgebung für den Benutzer neu initialisiert.

Tatsächlich initialisieren Sie eine neue Sitzung mit einer neuen Umgebung.

Lambert
quelle
Die Frage ist, ob die Umwelt automatisch gesund ist. Und übrigens ist su nicht immer installiert. Und Sie müssen Ihr Passwort mit su eingeben. Nicht nützlich. Es gibt einfachere Problemumgehungen.
Akostadinov
0

Nach man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

Sie können also ssh ausführen, ohne dies zu beachten,/etc/ssh/ssh_config indem Sie die (Standard-) Konfigurationsdatei in der Befehlszeile explizit angeben (es ~/.ssh/configist in Ordnung, leer zu sein):

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

Sie können einen Alias ​​dafür erstellen in ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

Starten Sie die Bash-Shell neu, dann können Sie einfach so ssh:

$ ssh your_user@your_host
Rockallit
quelle
Siehe meinen Kommentar oben. if one supplies on command line -F, then the system wide config is ignored according to man pagefrom bugzilla.mindrot.org/show_bug.cgi?id=1285 ; Es ist eine Option, aber nicht wirklich die gewünschte Funktion.
Akostadinov