On Fri, 2 Nov 2001 15:17:53 +0100 (CET),
    Félix Hauri <[EMAIL PROTECTED]> wrote:

> On Fri, 2 Nov 2001, Yann Sagon wrote:
> ...
> > sur ma machine, je fais ssh-keygen
> ...
> > $HOME/.ssh/authorized.key
> ...
> > debug1: try privkey: /home/ysagon/.ssh/id_dsa
> ...
> 
> Essaie:
> $ ssh-keygen -d
> puis copier le fichier .ssh/id_dsa.pub vers la machine distante dans un
> fichier .ssh/authorized_keys2 ... (puis event. rtfm;)
> 
> ... ou
> $ ssh -1 disthost

La réponse de Félix est essentiellement correcte, mais peut-être un peu
laconique. En gros, tu te génère et tu diffuse une clé pour la version 1 du
protocole, puis tu essayes de te connecter avec la version 2.

Pour info, voici *la version beta* d'un texte que j'ai diffusé il y a
quelques jours auprès de mes ex-collègues de l'EPFL. Remarques, coquilles
et compléments sont les biens venus.








             INSTALLATION, CONFIGURATION ET UTILISATION DE SSH
             =================================================

                           " ssh pour les nuls "


0) Hypothèses
-------------

RedHat Linux 7.1 sur PC sur toutes les machines. Installation via RPMs
binaires. Un environnement différent ne devrait rien changer, au pire il
faudra télécharger les sources et compiler.

1) Download
-----------

http://www.openssh.com/ -> For other OS's
ftp://sunsite.cnlab-switch.ch/pub/OpenBSD/OpenSSH/portable/rpm/

openssh-2.9.9p2-1.i386.rpm
openssh-clients-2.9.9p2-1.i386.rpm
openssh-server-2.9.9p2-1.i386.rpm
openssh-askpass-2.9.9p2-1.i386.rpm
openssh-askpass-gnome-2.9.9p2-1.i386.rpm

(éventuellement version plus récente)

2) Installer
-------------

2.1) la base (nécessaire)

rpm -Uvh openssh-2.9.9p2-1.i386.rpm

2.2) le serveur

rpm -Uvh openssh-server-2.9.9p2-1.i386.rpm

2.3) le client

rpm -Uvh openssh-clients-2.9.9p2-1.i386.rpm

3) Configurer le serveur (par root, tout est dans /etc/ssh)
------------------------

3.1) Générer les host keys :

    ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key     -N ""
    ssh-keygen -t rsa  -f /etc/ssh/ssh_host_rsa_key -N ""
    ssh-keygen -t dsa  -f /etc/ssh/ssh_host_dsa_key -N ""

La première est pour ssh1, les deux autres pour ssh2. Il y a toujours deux
fichiers, xxxx et xxxx.pub

Il n'est pas possible (ça n'aurait aucun sens) de les protéger par une
passphrase, d'où le -N ""

3.2) Regarder le fichier /etc/ssh/sshd.conf, en particulier mettre 

X11Forwarding yes

3.3) Vérifier que le démon tourne

<root> [~] service sshd status
sshd (pid 478) is running...
<root> [~] service sshd restart
Shutting down sshd:                                        [  OK  ]
Starting sshd:                                             [  OK  ]
<root> [~] lsof -i | grep ssh
sshd      883     root    3u  IPv4   1699       TCP *:ssh (LISTEN)

sshd n'utilise pas xinetd, ni tcpwrapper (/etc/hosts.{allow|deny})....

3.4) Vérifier qu'il est lancé au démarrage

<root> [~] chkconfig --list sshd
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

4) Configurer le client (par chaque utilisateur, tout est dans ~/.ssh)
-----------------------

4.1) Regarder le fichier /etc/ssh/ssh.conf, en particulier mettre 

ForwardX11 yes

Ceci définit la configuration par défaut de tous les clients sur une
machine donnée. Il est aussi possible de ne mettre ça que dans
~/.ssh/config

4.2) Générer les personal keys :

    ssh-keygen -t rsa1 -f ~/.ssh/identity
    ssh-keygen -t rsa  -f ~/.ssh/id_rsa
    ssh-keygen -t dsa  -f ~/.ssh/id_dsa

La première est pour ssh1, les deux autres pour ssh2. Il y a toujours deux
fichiers, xxxx et xxxx.pub

Il est possible de les protéger par une passphrase qui devra être saisie à
chaque utilisation d'une s-commande. La saisie se fait
- de manière interactive, via stdin, au shell prompt (par défaut)
- via une fenêtre X11 ou Gnome, via la variable d'environnement
  $SSH_ASKPASS, installer pour ça openssh-askpass et/ou
  openssh-askpass-gnome et lire la partie sur SSH_ASKPASS dans man ssh
  Ceci est utile pour ouvrir des fenêtres sur des serveurs distants
  directement depuis un menu graphique, c-à-d sans shell prompt.
- via ssh-agent qui permet de n'entrer sa passphrase qu'une fois par
  session, mais c'est plus compliqué.

Sans passphrase, quiconque ayant accès à votre ~/.ssh/ sur un de vos
comptes aura quasiment instantanément accès à tout vos autres comptes vers
lesquels vous aurez disséminé votre clé publique (cf ci-dessous). En outre,
à cause du fichier known_hosts, il saura où aller chercher ces comptes... 
Les clés privés doivent donc impérativement être dans des fichiers lisibles
uniquement par l'utilisateur (mode 600), mais selon les cas, ce n'est pas
suffisant. C'est particulièrement dangereux lorsque votre $HOME est sur un
serveur de fichiers pas très bien protégé.

5) Connexion
------------

5.1) premiers tests : slogin [options] remoteuser@remotehost

Parmi les options les plus intéressantes, citons

-1            force l'utilisation de la version 1 du protocole
-2            force l'utilisation de la version 2 du protocole
-v -vv -vvv   aide à voir ce qui ne marche pas

Lors de la première connexion depuis un compte donné sur une machine donnée
(le client) vers une nouvelle machine (le serveur), la host key (publique)
du serveur peut être transférée dans le fichier ~/.ssh/known_hosts resp. 
~/.ssh/known_hosts2 pour que le serveur soit reconnu à l'avenir. Il n'est
pas nécessaire d'accepter cette clé, il est par contre prudent d'être
certain de la bonne transmission de cette clé. L'idéal (un peu utopique)
est de transférer cette clé par un autre moyen sécurisé _avant_ la première
connexion.

L'authentification se fait avec le mot de passe UNIX standard, comme pour
une r-commande, mais au moins le mot de passe est transféré crypté. Il est
cependant à la fois plus pratique et plus sûr d'utiliser l'authentification
basée sur les personal keys générées en 4.2 ci-dessus. Pour cela, il faut
copier la clé publique du protocole choisi ~/.ssh/*.pub du compte sur le
client vers le compte sur le serveur dans le fichier ~/.ssh/authorized_keys
resp. ~/.ssh/authorized_keys2. Attention là aussi à ce que cette diffusion
de clé soit faite de manière sécuriée.

5.2) Forwarding X11 : Si il a été configuré correctement, la variable
d'environnement $DISPLAY est mise automatiquement dans la session remote
(attention à ne pas la redéfinir (écraser) dans un fichier du genre .login,
.bashrc, .tcshrc ...). Elle ressemble souvent à une valeur du genre
client.toto.com:10.0 Cela permet au trafic X11 (ie programmes s'exécutent
sur le serveur mais s'affichant sur le client) d'utiliser un tunnel
sécurisé.

5.3) Le cas le plus fréquent : on veut mettre dans un menu d'une interface
graphique une entré qui ouvre depuis le client un shell sur le serveur. 2
solutions :

- xterm [options] -e slogin remoteuser@remotehost &
- ssh -f remoteuser@remotehost xterm [options]

En principe, la première est préférable, le xterm est local et ce sont les
IO au niveau du shell qui traversent le réseau via ssh. Mais la seconde qui
voit ssh ouvrir un tunnel X11 à travers lequel un xterm distant s'affiche
localement peut être utile dans certains cas, et s'applique telle quelle à
n'importe quel autre client X. L'option -f indique à ssh de passer en
arrière plan "au bon moment", c'est à dire _après_ avoir demandé la
passphrase.

6) Le reste...
--------------

ssh-agent, sftp, tunnels pour du POP ou autre, RTFM






-- 
   ___  _  ___    Jean-Albert FERREZ        [EMAIL PROTECTED]
  '  / / \ \      EPFL  -  Chaire de Recherche Operationnelle  -  ROSO
 ,--/-/---\-\---------------------------------------------------------
 \_/ /     \ \                http://rosowww.epfl.ch/jaf/
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.

Répondre à