Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/securite/sshwin32.htm


   D o m i n i q u e   G u e b e y    J u n g l e      Bazar informatique

A propos de sécurité informatique

SSH sur postes Windows, en 7 mn

Préambule

7 mn : depuis un CD complet de Cygwin, ouverture des packages 4 mn + sélection et copie 2 mn + installation 1 mn.

On va utiliser Cygwin, voir notre page de documentation [http://www.dg77.net/tekno/manuel/cygwin.htm]. Il est fortement conseillé d'avoir mis-à-jour les valeurs d'environnement comme indiqué. Cygwin avec les packages OpenSSH et OpenSSL doit être installé sur tous les postes concernés. Celà occupera environ 40 Mo. Pour information : installer au moins les packages cygrunsrv (cf section Admin dans le "setup"), tous ceux de Base, et gawk (Interpreters). Dans ces explications, Cygwin est supposé installé dans c:\cygwin.

Etapes d'installation (serveur)

SSH sur le poste client

Conditions
Avoir installé Cygwin avec OpenSSH comme indiqué dans le préambule.
Connexion
Conformément au fonctionnement de Cygwin, on utilise un profil Windows avec son mot-de-passe.
 ssh  [utilisateur]@[id serveur]  Le serveur est identifié par son adresse I.P. ou son nom D.N.S.

Considérations de sécurité

Il est clair que les codes utilisateurs sans mots-de-passe sont absolument à bannir.

Il est non moins clair que les trousseaux et les précieux fichiers de configuration dans /etc et ~/.ssh doivent faire l'objet d'attentions et de précautions, notamment de sauvegardes, ces dernières devant étre rangées en lieu sûr. L'ordinateur utilisé ne devrait pas être une machine accessible à tout utilisateur de passage.

Authentification automatique par RSA

Importance

Il est intéressant de pouvoir se connecter sans avoir à entrer un mot-de-passe. C'est possible si on a fourni au préalable sa clef publique au serveur.

Quand celà fonctionnera, on pourra éventuellement interdire l'accès par userid + mot-de-passe. Adapter la ligne concernée dans le sshd_config : il faut avoir PasswordAuthentication  no

Première méthode : chargement sur le serveur d'une clef publique créée sur un client 
Sur le serveur, verifier dans son fichier de configuration qu'il accepte ce mode d'authentification
 grep RSA /etc/sshd_config . Ôter éventuellement le " # " devant RSAAuthentication yes pour activer la fonction (dans ce cas, arrêter/redémarrer le service)
Sur le poste client, générer la paire de clefs
 ssh-keygen  -t  rsa 
Envoi de la partie publique du trousseau sur le serveur
On peut utiliser scp, transfert de fichier sécurisé de SSH.  scp ~/.ssh/identity.pub [userid]@[serveur]:~/.ssh/div.pub 
Connexion sur le serveur et mise-à-jour du trousseau
Dans le répertoire ~/.ssh (et non pas /etc), ajout au fichier par simple "cat"
ssh [userid]@[serveur]
cd .ssh
cat div.pub >> authorized_keys
Retour sur le client
 exit 
Seconde méthode : chargement sur le client d'une clef privée calculée sur le serveur
Sur le serveur, se placer dans /etc
 cd  /etc 
Génération de la paire de clefs
 ssh-keygen  -t  rsa  en spécifiant, quand c'est demandé, /etc/id_rsa comme emplacement des fichiers de clefs . Le mot de passe peut être laissé à blanc. Deux fichiers sont créés dans /etc : id_rsa et id_rsa.pub
Ajout aux "authorized_keys" (cf "première méthode")
 cat id_rsa.pub >> authorized_keys 
Copier la clef privée sur le client
Il s'agit d'ajouter id_rsa dans $HOME/.ssh. $HOME correspond à c:\cygwin\home\[userid]
Utiliser tout moyen de transmission fiable. Par exemple disquette qui sera reformatée dès le travail terminé, ou CD gravé qu'on passera ensuite au moins 5 s au four à micro-ondes. Si on ne peut faire le déplacement (et à défaut de fidèle esclave sourde-muette, de plus en plus rare), envoi par lettre recommandée avec accusé de réception des fichiers cryptés par GnuPG. En bonne logique ceci exclut tout protocole de transmission réseau ordinaire.
Dès que ça marche, effacer la clef privée du serveur, où elle n'a rien à faire.
Connexions
Lancement de ssh-agent en lui spécifiant l'interpréteur à lancer
 ssh-agent  /bin/bash  On peut constater le nouvel environnement, exemple :
$ env | grep -i SSH
SSH_AGENT_PID=1332
SSH_AUTH_SOCK=/tmp/ssh-oNmeqV1664/agent.1664
Charger la clef privée dans le cache
 ssh-add 
On peut afficher les clefs en cours dans le cache
 ssh-add  -l 
Connexion
 ssh  [utilisateur]  [ordinateur]  Le serveur crée automatiquement un répertoire /home/[utilisateur] s'il n'existe pas encore.
Attention : si on doit quitter le poste ou s'en éloigner, se déconnecter ne suffit pas, il faut encore vider le cache.
 exit  puis (éventuellement)  ssh-agent /bin/bash   puis  ssh-add  -D 
Mais le mieux est toujours d'éteindre l'ordinateur.