Projet

Général

Profil

Fonctionnement du ssh » Historique » Version 7

Christophe Dezé, 05/04/2016 11:00

1 1 Christophe Dezé
h1. Fonctionnement du ssh
2 1 Christophe Dezé
3 2 Christophe Dezé
Ansible et  la création d'un dashboard nécessite de se connecter en ssh sur les modules EOLE.
4 1 Christophe Dezé
5 2 Christophe Dezé
h2. le problème : 
6 2 Christophe Dezé
7 1 Christophe Dezé
Ansible se lance dans le docker quickzephir
8 7 Christophe Dezé
le docker dashboard (ssh-tunnel) se lance depuis le docker quickzephir.
9 1 Christophe Dezé
10 4 Christophe Dezé
Des connections SSH doivent se faire de manière non interactive (authentification par clé) .
11 4 Christophe Dezé
12 1 Christophe Dezé
Il n'est pas question de mettre des clès SSH dans les docker.
13 1 Christophe Dezé
14 2 Christophe Dezé
h2. la solution
15 2 Christophe Dezé
16 2 Christophe Dezé
On va utiliser la clé privée située sur le serveur (l’hôte).
17 5 Christophe Dezé
La clé publique doit avoir été déployé via le client zephir sur les modules EOLE.
18 1 Christophe Dezé
19 1 Christophe Dezé
sur le serveur, on lance
20 1 Christophe Dezé
21 6 Christophe Dezé
<pre>
22 6 Christophe Dezé
if [ -z "$SSH_AUTH_SOCK" ]; then
23 6 Christophe Dezé
  eval $(ssh-agent)
24 6 Christophe Dezé
  ssh-add
25 6 Christophe Dezé
fi
26 6 Christophe Dezé
</pre>
27 6 Christophe Dezé
28 1 Christophe Dezé
cette commande consiste  juste à définir la variable environnement SSH_AUTH_SOCK
29 1 Christophe Dezé
30 2 Christophe Dezé
@
31 1 Christophe Dezé
#echo $SSH_AUTH_SOCK
32 1 Christophe Dezé
/tmp/ssh-Jcm5BMVoE2ri/agent.7709
33 2 Christophe Dezé
@
34 1 Christophe Dezé
35 2 Christophe Dezé
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)
36 1 Christophe Dezé
37 1 Christophe Dezé
38 1 Christophe Dezé
extrait docker-compose
39 2 Christophe Dezé
40 2 Christophe Dezé
<pre>
41 1 Christophe Dezé
quickzephir:
42 1 Christophe Dezé
  image: dezechristophe/quickzephir:dev
43 1 Christophe Dezé
  volumes:
44 1 Christophe Dezé
   - $SSH_AUTH_SOCK:$SSH_AUTH_SOCK
45 2 Christophe Dezé
</pre>
46 1 Christophe Dezé
47 2 Christophe Dezé
@
48 2 Christophe Dezé
docker-compose up
49 1 Christophe Dezé
docker exec -ti root_quickzephir_1  bash
50 1 Christophe Dezé
root@31cb845fdc13:/home/quickzephir# echo $SSH_AUTH_SOCK
51 1 Christophe Dezé
/tmp/ssh-Jcm5BMVoE2ri/agent.7709
52 2 Christophe Dezé
@
53 1 Christophe Dezé
54 1 Christophe Dezé
le socket est bien partagé.
55 1 Christophe Dezé
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).
56 1 Christophe Dezé
les commandes ansible doivent fonctionner.
57 1 Christophe Dezé
58 1 Christophe Dezé
59 1 Christophe Dezé
De même, du docker quickzephir, des docker ssh-tunnel servent à lancer des commandes à distances sur des modules, via SSH.
60 1 Christophe Dezé
Dans /quickzephir/quickzephir/server/api/docker/docker.controller.js
61 2 Christophe Dezé
on partage,via le paramètre "volume", ce même socket dans chaque docker ssh-tunnel.
62 2 Christophe Dezé
63 2 Christophe Dezé
<pre>
64 1 Christophe Dezé
    var authsocks = process.env.SSH_AUTH_SOCK;
65 1 Christophe Dezé
    var volumes='["' + authsocks + ':' + authsocks + '"]';
66 1 Christophe Dezé
    var options = JSON.parse('{"Tty": true, "Env": [   "LINUXDASH=' + ip + '", "SSH_AUTH_SOCK=' + authsocks + '"],"Labels": { "linuxdash": "' + ip + '"},  "Binds": ' + volumes + '}');
67 2 Christophe Dezé
    docker.run('dezechristophe/ssh-tunnel', '', logStream, options , function (err, data, container)
68 2 Christophe Dezé
</pre>