Je travaille avec plusieurs serveurs différents, et il serait utile de pouvoir définir certaines variables d'environnement telles qu'elles soient actives sur tous quand I SSH in. Le problème est que le contenu de certaines variables contient des informations sensibles (hashed mots de passe), et je ne veux donc pas le laisser traîner dans un fichier .bashrc - je voudrais le garder uniquement en mémoire.
Je sais que vous pouvez utiliser SSH pour transférer la variable DISPLAY (via ForwardX11) ou un processus d'agent SSH (via ForwardAgent). Je me demande donc s'il existe un moyen de transférer automatiquement le contenu de variables d'environnement arbitraires via des connexions SSH. Idéalement, quelque chose que je pourrais définir dans un fichier .ssh/config afin qu'il s'exécute automatiquement lorsque j'en ai besoin. Des idées?
Vous pouvez le faire, mais cela nécessite de modifier la configuration du serveur.
Lisez les entrées pour AcceptEnv
dans sshd_config (5) et SendEnv
dans ssh_config (5) .
mettre à jour:
Vous pouvez également les passer en ligne de commande:
ssh foo@Host "FOO=foo BAR=bar doz"
En ce qui concerne la sécurité, notez que toute personne ayant accès à la machine distante pourra voir les variables d'environnement transmises à tout processus en cours d'exécution.
Si vous voulez garder cette information secrète, il est préférable de la transmettre par stdin
:
cat secret_info | ssh foo@Host remote_program
Vous ne pouvez pas le faire automatiquement (à l'exception de $DISPLAY
que vous pouvez transférer avec -X
avec vos informations Xauth afin que les programmes distants puissent réellement se connecter à votre affichage), mais vous pouvez utiliser un script avec un "document ici":
ssh ... <<EOF
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH"
runRemoteCommand
EOF
Les variables non échappées seront développées localement et le résultat transmis au côté distant. Donc, la PATH
sera définie avec la valeur distante de $HOME
.