comment désactiver les variables SendEnv définies dans ssh_config à partir de ~ / .ssh / config


30

Je n'ai pu trouver cela nulle part, donc je me demande si je suis le seul à avoir un tel problème.

Par défaut, ssh sur Red Hat et Debian a au moins un ssh_config avec l'option SendEnv passant les variables LC * et LANG dans la session distante. Si l'on n'est pas root pour changer / etc / ssh / ssh_config, comment peut-il désactiver ce comportement? L'option SendEnv semble s'accumuler et je ne vois aucun moyen de la réinitialiser.

Et pour éviter qu'on me le demande, je dois éviter de transmettre mes paramètres régionaux aux machines de test pour éviter les effets secondaires sur les scripts et les programmes qui dépendent des paramètres régionaux comme paramètres par défaut pour la machine.


Ce n'est pas une réponse à votre question, mais pouvez-vous résoudre votre problème en appelant les scripts et les programmes sur vos machines de test via envou avec un script wrapper?
Scott

2
oui, des solutions de contournement sont possibles mais incommodes
akostadinov

Réponses:


18

Tu n'es pas le seul . Comme documenté dans, ssh_config(5)vous ne pouvez pas annuler SendEnv, car

Plusieurs variables d'environnement peuvent être réparties sur [...] plusieurs directives SendEnv.

Si vous avez root sur les machines de test, vous pouvez changer AcceptEnvpour ne pas accepter les variables envoyées par le client.


4
merde, je vois que -F sur la ligne de commande peut aider mais c'est trop gênant pour vraiment l'utiliser. Voir bugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov

5

Cela ne peut pas être fait ~/.ssh/configcar SendEnvne peut pas être remplacé.

L'utilisation d'alias ne fonctionnera pas pour les scripts qui appellent ssh.

Une alternative consiste à exporter une fonction. Par exemple dans ~/.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

1

Il y a l'option SetEnv, on peut forcer LANGà une valeur spécifique avant de l'envoyer.

La page de manuel indique également que

Il est possible d'effacer les noms de variables SendEnv précédemment définis en préfixant les modèles avec -.

mais je n'ai pas réussi à faire ça.


Voir bugzilla.mindrot.org/show_bug.cgi?id=1285 , cela expliquera probablement pourquoi l' -approche n'a pas fonctionné. Bonne suggestion cependant pour coder en dur LANG distant et d'autres vars dans la configuration ssh. Rend les choses plus prévisibles. Peut SetEnv- être est-ce une directive plus récente parce que personne d'autre ne l'a suggérée. SetEnv LANG=en_US.UTF-8
akostadinov

0

Si vous utilisez bash, vous pouvez configurer un alias ssh = 'LANG = command ssh' pour désactiver le passage de LANG aux autres serveurs.


0

Vous pouvez l'utiliser su - youruserlorsque vous êtes connecté via ssh. Cela réinitialisera l'environnement pour l'utilisateur.

En fait, vous initialisez une nouvelle session avec un nouvel environnement.


La question est d'avoir un environnement sain d'esprit automatiquement. Et btw su n'est pas toujours installé. Et vous devez taper votre mot de passe avec su. Pas utile. Il existe des solutions de contournement plus faciles.
akostadinov

0

Selon 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.

Ainsi, vous pouvez ssh sans vous y conformer/etc/ssh/ssh_config en spécifiant explicitement le fichier de configuration (par défaut) sur la ligne de commande ( ~/.ssh/configest OK pour être vide):

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

Vous pouvez en créer un alias dans ~/.bashrc:

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

Redémarrez le shell bash, puis vous pouvez simplement ssh comme ceci:

$ ssh your_user@your_host

Voir mon commentaire ci-dessus. if one supplies on command line -F, then the system wide config is ignored according to man pagede bugzilla.mindrot.org/show_bug.cgi?id=1285 ; c'est une option mais pas vraiment la fonctionnalité souhaitée.
akostadinov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.