Projet

Général

Profil

Fonctionnement du ssh

Ansible et la création d'un dashboard nécessite de se connecter en ssh sur les modules EOLE.

le problème :

Ansible se lance dans le docker quickzephir
le docker dashboard (ssh-tunnel) se lance depuis le docker quickzephir.

Des connections SSH doivent se faire de manière non interactive (authentification par clé) .

Il n'est pas question de mettre des clès SSH dans les docker.

la solution

On va utiliser la clé privée située sur le serveur (l’hôte).
La clé publique doit avoir été déployé via le client zephir sur les modules EOLE.

sur le serveur, on lance

if [ -z "$SSH_AUTH_SOCK" ]; then
  eval $(ssh-agent)
  ssh-add
fi

cette commande consiste juste à définir la variable environnement SSH_AUTH_SOCK


#echo $SSH_AUTH_SOCK
/tmp/ssh-Jcm5BMVoE2ri/agent.7709

au démarrage du docker quickzephir, on "partage" le socket SSH_AUTH_SOCK entre l'hote et le docker quickzephir (par le paramètre volumes)

extrait docker-compose

quickzephir:
  image: dezechristophe/quickzephir:dev
  volumes:
   - $SSH_AUTH_SOCK:$SSH_AUTH_SOCK


docker-compose up
docker exec -ti root_quickzephir_1 bash
root@31cb845fdc13:/home/quickzephir# echo $SSH_AUTH_SOCK
/tmp/ssh-Jcm5BMVoE2ri/agent.7709

le socket est bien partagé.
Depuis le docker,on doit pouvoir utiliser la clé privé de l'hote pour se connecter sur les modules EOLE (si la clé publique a été envoyée).
les commandes ansible doivent fonctionner.

De même, du docker quickzephir, des docker ssh-tunnel servent à lancer des commandes à distances sur des modules, via SSH.
Dans /quickzephir/quickzephir/server/api/docker/docker.controller.js
on partage,via le paramètre "volume", ce même socket dans chaque docker ssh-tunnel.

    var authsocks = process.env.SSH_AUTH_SOCK;
    var volumes='["' + authsocks + ':' + authsocks + '"]';
    var options = JSON.parse('{"Tty": true, "Env": [   "LINUXDASH=' + ip + '", "SSH_AUTH_SOCK=' + authsocks + '"],"Labels": { "linuxdash": "' + ip + '"},  "Binds": ' + volumes + '}');
    docker.run('dezechristophe/ssh-tunnel', '', logStream, options , function (err, data, container)