Lorsque je me ssh
connecte à un serveur, comment puis-je transmettre une variable d'environnement du client au serveur? Cette variable d'environnement change entre les différents appels de ssh, je ne veux donc pas écraser $HOME/.ssh2/environment
chaque fois que je fais un appel ssh. Comment puis-je faire ceci?
ssh
environment-variables
Ross Rogers
la source
la source
ssh
page de manuel, je ne vois pas d'autre moyen de le faire que de définir manuellement la variable une fois que vous êtes connecté au serveur, à moins que vous ne modifiiez ~ / .ssh2 / environment.Réponses:
Bien sûr, vous pouvez définir la variable d'environnement à l'intérieur de la commande, mais vous devrez faire attention à la citation: rappelez-vous que votre shell va analyser votre ligne de commande locale et que le shell distant essaiera la chaîne qu'il contient. reçoit.
Si vous voulez qu'une variable obtienne la même valeur sur le serveur que sur le client, essayez l'
SendEnv
option:Cela nécessite cependant le support du serveur. Avec OpenSSH, le nom de la variable doit être autorisé dans
/etc/sshd_config
.Si le serveur n'autorise que certains noms de variables spécifiques, vous pouvez contourner ce problème. Par exemple, une configuration commune permet
LC_*
, et vous pouvez faire ce qui suit:Si pair
LC_*
n'est pas une option, vous pouvez transmettre des informations dans laTERM
variable d'environnement, qui est toujours copiée (il peut toutefois exister une limite de longueur). Vous devrez toujours vous assurer que le shell distant ne restreint pas laTERM
variable pour désigner un type de terminal connu. Passez l'-t
option à ssh si vous ne démarrez pas un shell interactif distant.Une autre possibilité consiste à définir la variable directement dans la commande:
Ainsi, en passant une variable locale:
Cependant, méfiez-vous des problèmes de citation: la valeur de la variable sera interpolée directement dans l'extrait de shell exécuté du côté distant. Le dernier exemple ci-dessus suppose que
$LOCALVAR
ne contient pas de guillemets simples ('
).la source
AcceptEnv
directives entréessshd_config
comme souhaité par l'administrateur. MaisTERM
est traité spécialement, pour autant que je sache, il n’existe aucun moyen de le filtrer côté serveur (il est défini dans l’environnement du shell indépendamment de tout paramètre de configuration). Êtes-vous sûr qu'il n'y a pas de script de profil qui le remplace (comme/etc/profile
ou~/.profile
ou~/.bashrc
)?TERM
n'est transmis que si le client demande au serveur d'allouer un tty. S'il n'y a pas de terminal du côté distant, il serait inutile de transmettreTERM
. Lorsque vous spécifiez une commande, si vous souhaitez avoir un terminal du côté distant, vous avez besoin de l'-t
option de ligne de commande (ouRequestTTY
in~/.ssh/config
).Si vous pouvez administrer l'hôte cible, vous pouvez configurer sshd pour permettre la transmission de vos variables d'environnement locales à l'hôte cible.
A partir de la page de manuel sshd_config:
La configuration de sshd vit généralement à
/etc/ssh/sshd_config
la source
Donc, sur votre client, vous avez une variable d’environnement et vous voulez que celle-ci soit disponible pour la commande à distance? Je ne pense pas qu'il y ait un moyen de faire passer ssh magiquement, mais vous pouvez probablement faire quelque chose comme ça. Au lieu d'utiliser, dites:
Tu peux le faire:
la source
La réponse de @ emptyset (qui n'a pas fonctionné pour moi) m'a amenée à cette réponse:
Vous pouvez ajouter cette commande à votre
~/.ssh/authorized_keys
fichier:export VARIABLE=<something>
a été immédiatement fermé et la connexion SSH a été fermée (me verrouillant hors du serveur), alors que/usr/bin/env ... $SHELL
votre shell par défaut exécutera un environnement modifié.la source
$SHELL
par un shell réel? Vérifiez également que / usr / bin / env existe sur le serveur. Cependant, la solution n'est pas parfaite: j'ai remarqué qu'elle se bloquait lorsque je voulais utiliserscp
une commande en ligne.PermitUserEnvironment yes
et utiliser à laenvironment="..."
place decommand="..."
.Sur votre client local, dans votre
~/.ssh/config
vous pouvez ajouterSetEnv
, par exempleRemarque: Vérifiez
man ssh_config
.Ensuite, sur le serveur, assurez-vous d’autoriser le client à transmettre certaines variables d’environnement dans votre
/etc/ssh/sshd_config
fichier de configuration:Remarque: Vérifiez
man sshd_config
.la source
Vous pouvez essayer d'appeler une commande personnalisée, en supposant que vous avez la configuration de la connexion SSH sans mot de passe. Sur le serveur, éditez votre entrée ~ / .ssh / registered_keys qui correspond à la clé de votre client:
Regardez ce lien dans la section Commande forcée pour un peu plus de détails.
la source
Je construisais une version personnalisée d'OpenSSH pour un périphérique avec un fichier cramfs dans le répertoire de base et / etc (Cram FS est en lecture seule). ~ / .Ssh / environment ne fonctionnerait pas sans une reconstruction complète du système de fichiers, qui ont été déployés sur le terrain. périphériques (systèmes embarqués d'où l'utilisation de CRAMFS). Vous pouvez spécifier dans sshd_config l'emplacement du fichier authroized_keys mais, pour une raison quelconque, environment = ne fonctionne que pour les variables d'environnement dans ~ / .ssh / authroized_keys. Éditer le fichier / etc / profile n'était pas une option et je devais charger ssh dans un répertoire non standard. Dans session.c après child_set_env (... "MAIL" ...), ajoutez simplement les variables d'environnement dont vous avez besoin (c'est un hack que je connais ...), mais insérez simplement que quelqu'un a besoin d'environnements codés en dur pour une session si vous êtes. en compilant à partir des sources, vous pouvez le faire. TGI-FLOSS
la source
juste une simple commande:
la source