ubuntu-fr

Communauté francophone des utilisateurs d'Ubuntu

[[ssh]]

Piste: » ssh


SSH

OpenSSH est une version libre de la suite de protocole de SSH, des outils de connectivité de réseau sur lesquels un nombre croissant de personnes sur l'Internet viennent s'appuyer. Beaucoup d'utilisateurs de Telnet, Rlogin, FTP, ou d'autres programmes identiques, ne se rendent pas compte que leur mot de passe est transmis à travers les réseaux en clair. OpenSSH chiffre tout le trafic (mots de passe y compris). OpenSSH fournit également une variété de méthodes d'authentification. Comme son nom l'indique, OpenSSH est développé dans le cadre du projet OpenBSD

Installation du serveur SSH

installez le paquet openssh-server.

Ainsi vous aurez installé ssh-server sur votre poste. Par défaut, il se lance au démarrage. Pour l'activer après une fausse manipulation :

sudo /etc/init.d/ssh start

Copier des fichiers via SSH

Pour copier un fichier à partir d'un ordinateur sur un autre avec SSH, vous devrez utiliser la commande scp. Cela ressemblera à ceci :

scp <fichier> <username>@<ipaddress>:<DestinationDirectory>

Ou en termes profanes, si je désirais copier un fichier d'un de mes ordinateurs à l'autre, je procède de cette manière :

scp fichier.txt hornbeck@192.168.1.103:/home/hornbeck

Vous pouvez aussi bien copier des fichiers à partir des ordinateurs à distance sur votre disque local :

scp hornbeck@192.168.1.103:/home/hornbeck/urls.txt .

Le point à la fin de commande indique de copier le fichier dans le répertoire courant. Vous pouvez aussi le renommer en le copiant (« mon.txt ») sur le disque local :

scp hornbeck@192.168.1.103:/home/hornbeck/urls.txt ./mon.txt

Vous pouvez très bien copier un fichier d'un ordinateur vers un autre tout en étant sur un troisième ordinateur :

scp nom@ordi1:chemin/fichier nom@ordi2:chemin/fichier

Navigation via SSH

Nautilus

En utilisant Nautilus, vous pouvez également accéder aux emplacements à distance par l'intermédiaire de SSH pour passer en revue, éditer et copier, des fichiers. Ouvrez Nautilus, le navigateur de fichier (Poste de travail → Dossier personnel), puis taper Ctrl–L. Entrez l'URL suivante (remplacez username et hostname en conséquence) :

 ssh://username@hostname:port

La copie de fichier se fait avec le glisser-déposer dans la fenêtre de Nautilus comme sur votre système de fichier local.

Pour accéder directement à un répertoire donné (pratique avec l'utilisation des signets), il suffit de rajouter le chemin en fin d'URL :

 ssh://username@hostname:port/le/chemin/voulu/

Konqueror

Le principe est similaire à celui utilisé par Nautilus, à l'exception du nom de protocole : fish. Dans la barre d'adresse, tapez :

fish://<username>@<hostname>

Une boite de dialogue apparaitra et demandera le mot de passe.

Attention, si vous ne mentionnez pas le nom d'utilisateur, c'est l'utilisateur courant sur la machine locale qui aura la main.

Console

Pour pouvoir parcourir vos fichiers accessibles par SSH, il vous faut monter un système de fichier. Visitez la doc prévue à cet effet : SSH Filesystem.

Remarque : cette méthode permet aussi d'y accéder de manière transparente avec Nautilus ou Konqueror sans utiliser les adresses spéciales précédentes.

Se connecter à un ordinateur distant via SSH

Pour ouvrir une session sur un ordinateur distant ayant un serveur SSH, vous devez écrire quelque chose comme ceci :

ssh <username>@<ipaddress> -p <num_port>

Exemple :

ssh phyrex@192.168.23.42 -p 12345

L'option -p xxx est facultative. Si rien n'est précisé, c'est le port 22 par défaut qui sera utilisé.

Vous pouvez employer le hostname (s'il est connu du système dans /etc/hosts) au lieu des adresses IP.

Authentification par mot de passe

Une authentification par mot de passe (transmis chiffré) est possible. Suite à l'installation du paquet openssh-server il peut parfois être nécessaire de modifier le fichier de configuration « sshd_config » notamment si vous rencontrez le problème suivant :

moi@maison:~$ ssh user@domain.com
Permission denied (publickey).

Dans ce cas, il faut très basiquement modifier le fichier « /etc/ssh/sshd_config » de la manière suivante :

# Change to yes to enable tunnelled clear text passwords
PasswordAuthentication yes

Puis en cas de modifications, redémarrer le service avec la commande :

sudo /etc/init.d/ssh restart

Authentification par clé publique

Autrefois tout le monde employait l'authentification typique via identifiant-mot de passe. Cependant si quelqu'un connaît votre mot de passe, la sécurité est compromise.

Pour être débarrassé du problème, SSH offre l'Authentification par clé publique/privée au lieu des mots de passe « simples ». De cette manière, il faut être en possession de non plus une mais de deux informations pour se connecter (avoir la clé privée & connaître le mot de passe de cette clé).

Ceci peut permettre par exemple :

  • à un admin de se connecter à des centaines de machines sans devoir connaître des centaines de mots de passe différents ;
  • de ne pas avoir un mot de passe à saisir toutes les 2 minutes (en utilisant ssh-agent).
Au mois de Mai 2008 a été découvert une faiblesse dans la génération des clés par OpenSSL des packages Debian et dérivés tels qu'Ubuntu. Voir la partie "Correction vulnérabilité SSH" pour plus de détails mais en gros si vous avez généré vos clés sur Ubuntu entre 2006 et Mai 2008, il faut régénérer de nouvelles clés après avoir mis a jour le système...

À moins que vous n'ayez déjà un couple de clés, vous devez d'abord en créer. Tapez chez le client :

ssh-keygen -t dsa

Il vous sera alors demandé où sauver la clé privée (acceptez juste l'endroit par défaut, et ne changez pas le nom par défaut) puis de choisir une passphrase. La passphrase est employée pour chiffrer votre clé privée. Toute personne qui obtiendrait l'accès à votre clé privée (non protégée) aurait vos permissions sur d'autres ordinateurs. Veuillez prendre un instant et choisissez une très bonne passphrase.

Les ordinateurs distants feront confiance à la machine qui pourra déchiffrer des clés chiffrées avec votre clé publique (en gros, il faut mettre la clé publique sur le serveur auquel on veut accéder).

Votre clef publique a été créée avec la nouvelle clé privée. Elle est habituellement localisée dans le dossier caché « ~/.ssh/id_dsa.pub ».

L'utilisateur distant doit avoir cette clé (c'est une ligne de caractères en code ASCII) dans son fichier de clé d'autorisation situé à « ~/.ssh/authorized_keys » sur le système distant. Ainsi vous copiez-collez juste la ligne dans le fichier « authorized_keys » ou employez la commande « ssh-copy-id » comme ceci (fileserver01 peut être l'adresse IP du serveur) :

ssh-copy-id -i ~/.ssh/id_dsa.pub fileserver01

Vous devrez donner le mot de passe utilisateur de cet ordinateur. Si l'authentification par mot de passe est désactivée, alors vous aurez besoin de copier-coller votre clé suivant un autre moyen. Après que votre clé publique ait été ajoutée, vous devenez un hôte de confiance.

Vu que ssh-copy-id ne marche pas toujours, notamment si on n'utilise pas le port par défaut, voici une ligne à copier pour ajouter sa clé publique sur le serveur distant :

ssh login@serveur "echo $(cat ~/.ssh/id_dsa.pub) >> .ssh/authorized_keys"

Lancez :

ssh fileserver01

et vous serez tenté de taper votre mot de passe mais c'est votre passphrase qui vous est demandée. Il y a une différence entre votre mot de passe et la passphrase. Le mot de passe est situé dans /etc/passwd du système distant alors que la passphrase sert à déchiffrer votre clé privée de votre système local.

Si ça ne marche pas, c'est à dire que le mot de passe vous est quand même demandé, essayez sur votre serveur la commande :

tail -f /var/log/auth.log

tandis que vous essayez de vous connecter. Si on vous parle de "vulnkey", c'est que par malchance ssh-keygen a généré une clé vulnérable. Recommencez alors la manipulation à partir de ssh-keygen...

Pour reprendre, deux choses sont nécessaires pour obtenir un accès réellement sécurisant (et sécurisé ;-) ) par authentification à clé publique au-dessus de l'authentification par mot de passe classique :

  1. Votre clé privée, chiffrée ;
  2. Votre passphrase, utilisée pour déchiffrer votre clé privée.

Si vous choisissez de ne pas avoir de mot de passe (ce qui est possible, voyez la prochaine section), vous aurez une sécurité moindre, ainsi que si vous utilisez une authentification uniquement par mot de passe, comparé à celle que vous pouvez avoir en combinant les deux.

Vous pouvez vouloir neutraliser l'authentification par mot de passe pour des raisons de sécurité en plaçant dans le fichier de configuration « /etc/ssh/sshd_config » la ligne « PasswordAuthentication » à « no » (et ne pas avoir « UsePAM » à « yes » !, ou autrement dit en mettant également « UsePAM » à « no »). N'oubliez pas de relancer votre serveur sshd après avoir changé la configuration :

sudo /etc/init.d/ssh restart

Si après avoir suivi ce tutoriel un mot de passe est toujours demandé, il se peut que ce soit dû à un problème de droits sur votre 'home directory'. Sur la machine distante regardez le fichier :

tail /var/log/auth.log

Plus d'indications vous seront donné dedans, et si la ligne suivante apparait :

Authentication refused: bad ownership or modes for directory /home/votre_login

Alors faites :

chmod 755 $HOME

Et tout devrait rentrer dans l'ordre.

Si ce n'est toujours pas le cas, c'est que le serveur doit être configuré en mode de sécurité strict (c'est le cas par défaut sur UBUNTU), on peut avoir des problèmes à se connecter sans mot de passe. Sur le serveur dans /etc/ssh/sshd_config , la ligne "StrictModes yes" indique que le serveur va être très pointilleux sur les droits du compte sur lequel on se connecte en ssh. Sur le client, dans /etc/ssh/ssh_config, rajoutez la ligne "PreferredAuthentications publickey"

server$ chmod go-w ~/
server$ chmod 700 ~/.ssh
server$ chmod 600 ~/.ssh/authorized_keys

Pour plus de détails, consultez ces deux sites:

http://blog.huguesbernard.eu/post/2006/06/19/lecran-noir-sur-les-consoles-virtuelles-avec-ubuntu-et-nvidia-sur-un-Toshiba-tecra-m8

http://sial.org/howto/openssh/publickey-auth/problems/

Restriction d'accès SSH

Quand on utilise SSH avec l'authentification par clé, il y a d'autres dispositions. Le serveur distant peut limiter l'utilisation de certaines commandes permises. Si vous maintenez un dépôt CVS, vous pourriez utiliser des lignes comme ceci dans le fichier « authorized_keys2 » :

command="/usr/bin/cvs server" ssh-dss AAAAB3N....

Ceci permettrait que seule cette commande puisse être utilisée. Rien d'autre.

Accès automatique pour des scripts

L'authentification par clé publique (voir ci-dessus) peut également être employée pour automatiser les tâches qui exigeraient habituellement l'introduction au clavier d'un mot de passe. Imaginez vouloir copier un dossier à partir d'un ordinateur distant tous les jours à minuit. Tout ce que vous avez à faire c'est d'établir la confiance entre ces deux ordinateurs. Créez un compte de service sur un ordinateur, créez une paire de clé (ssh-keygen - t DSA) et quand on vous demande de rentrer la passphrase taper juste sur la touche « Entrée ». Ceci fera que votre clé privé ne sera pas protégée. Ajoutez la clé publique de l'autre ordinateur dans le fichier « authorized_keys2 » (« ssh-copy-id »). Maintenant vous pouvez utiliser SSH sur cette machine sans une passphrase à taper. Ajoutez une référence à SSH dans votre crontab et vous êtes prêt.

Avoir une clef privée non protégée peut être un trou de sécurité. Les intrus devront seulement obtenir l'accès à la clé privée et pourront accéder aux ordinateurs distants.

Utiliser le ssh-agent

Si vous devez fréquemment copier des fichiers avec SSH ou accéder à d'autres ordinateurs de votre réseau (ce qui est une tâche commune pour des administrateurs), vous vous demandez probablement s'il y a une manière de simplifier l'utilisation de la passphrase. En fait il y a SSH agent. Vous devez seulement entrer votre passphrase une fois en employant ssh-add et tout ce que vous commencez comme sous-processus de SSH agent se rappellera cette passphrase.

Trop théorique ? Bien, vous n'aurez pas besoin de vous inquiéter de l'agent. Votre session X est prête pour avoir le ssh-agent en session automatiquement. Tout ce que vous devez faire c'est lancer ssh-add et saisir votre passphrase. La prochaine fois que vous utiliserez SSH pour accéder à un autre ordinateur, vous n'aurez pas à entrer à nouveau votre passphrase. Cool, non ? :-)

  • Vous devrez bloquer votre session pendant vos absences car d'autres pourraient accéder aux ordinateurs distants à partir de votre machine sans savoir votre passphrase.
  • Si vous voulez rentrer votre passphrase une fois juste après l'ouverture de session, vous pouvez ajouter un appel à ssh-add comme ceci :
    • Cliquez sur Système → Préferences → Sessions → Programme au démarrage.
    • Cliquez sur « Ajouter ».
    • Entrez la commande « ssh-add ».

À la prochaine ouverture de session, vous devrez taper votre passphrase.

Le fichier de configuration du serveur SSH

Par défaut, la configuration du serveur SSH (fichier « /etc/ssh/sshd_config », édition via sudo comme il se doit) d'Ubuntu est suffisante :

PermitRootLogin yes

Si ce n'était pas sous Ubuntu ce serait une très grosse faille de sécurité, mais qui pourrait vouloir affecter un mot de passe à root ? ;-)

#Banner /etc/issue.net

Vous pouvez décommenter (c'est-à-dire enlever le « # ») cette ligne. Effet : lorsque vous essayez de vous connecter à votre serveur par SSH, le fichier « /etc/issue.net » est affiché (à vous de le personnaliser).

#MaxStartups 10:30:60

Vous pouvez aussi décommenter cette ligne, effet : le 10 représente le nombre de connexions acceptées sans qu'un utilisateur ait réussi à s'identifier, si cela passe au dessus de 10, il y a 30 % de chances que les suivantes soient bloquées, et ce pourcentage augmente linéairement jusqu'à 100 % lorsque le full est atteint, à 60 connexions. Très utile pour éviter ce genre de désagrément.

AllowUsers alice bob

Ligne à ajouter, spécifie les logins des seuls utilisateurs (ici seuls Alice et Bob, pas Carole) autorisés à se connecter. Idéal pour ouvrir un compte FTP à un ami tout en restreignant l'accès au Shell via SSH.

Utiliser SSH pour faire du SFTP (Transfert de fichier sécurisé)

Vous pouvez utiliser MySecureShell

Tunnéliser sa connexion internet par SSH avec l'aide de Squid

Tunnéliser sa connexion web est très utile dans quelques situations :

  • l'admin du réseau où vous êtes vous empêche d'accéder à certains sites ;
  • votre connexion web est peu ou pas sécurisée (wifi sans encryption ou par encryption wep).

On va donc installer le serveur de médiation Squid (serveur proxy, mandataire) sur une machine Ubuntu (qui sera le serveur) à laquelle on accèdera par une machine distante possédant un client SSH et un navigateur Web. Dans l'exemple présent, ce sera un client sous Windows.

On obtiendra alors un accès sécurisé à un proxy distant (le serveur sous Ubuntu) qui se connectera aux sites web et renverra le résultat à votre navigateur.

Partie serveur

Premièrement, il faut installer le programme Squid. Le paquet à installer est squid.

Normalement si tout se déroule bien, Squid devrait être fonctionnel. Il est probable qu'une erreur arrive car le programme de configuration n'arrivera pas à trouver le nom d'hôte de la machine. Il faut donc ouvrir le fichier de configuration de Squid et lui indiquer que la machine n'a pas de nom d'hôte. On ouvre le fichier de configuration « /etc/squid/squid.conf » et on ajoute cette ligne :

visible_hostname none

Après l'enregistrement du fichier de configuration, vous pouvez normalement générer les répertoires qui contiendront le cache de Squid par la commande :

sudo squid -z

Grâce à SSH, les connexions reçues par Squid seront des connexions provenant du serveur lui-même. Mais par défaut, Squid n'accepte que les connexions loopback. On devrait alors quand même ajouter une autorisation pour l'adresse IP non loopback (127.0.0.1) du serveur. Vous ouvrez donc le fichier de configuration et vous ajoutez ces deux lignes :

acl ordi src 192.168.1.1
http_access allow ordi

Dans l'exemple, « ordi » est le nom que j'ai donné à la règle et « 192.168.1.1 » est l'adresse IP locale de mon ordinateur. Vous pouvez donc maintenant démarrer Squid par :

sudo squid start

ou le redémarrer par

sudo squid reload

Squid est normalement prêt à recevoir les connexions venant de la machine hôte.

Partie client

Il faut premièrement télécharger PuTTY si vous ne l'avez pas déjà. Il faut ensuite l'ouvrir et marquer l'adresse IP du serveur auquel on veut se connecter. Il faut aller dans l'onglet « Tunnels », ajouter un « source port », ici j'ai décidé que ce sera le 3128, et une destination, qui est ici l'adresse IP de mon serveur et le port écouté par défaut par Squid (3128) :

On clique sur « Apply » et on laisse puTTY tourner en fond. On va ensuite dans le navigateur web et on ajoute l'adresse IP loopback du client « 127.0.0.1 » et le port marqué dans Putty soit ici le « 3128 » comme proxy. Votre connexion web est maintenant sécurisée.

Tunnéliser sa connexion internet par SSH (sans Squid)

La partie précédente consiste à installer un proxy HTTP sur le serveur et de s'y connecter via SSH. Cependant, SSH lui-même peut jouer le rôle de proxy, ce qui évite l'installation d'un logiciel supplémentaire.

Partie serveur

Il n'y a en principe rien à faire. Cette fonctionnalité est activée par défaut sous Ubuntu.

Partie client

Cette fois, le proxy est de type SOCKS (à prendre en compte lors de la configuration du navigateur)

Sous Windows, avec Putty

La configuration est la même que dans la partie précédente, sauf qu'il faut cocher la case "dynamic" (la case "destination" peut rester vide)

Sous Linux (dont Ubuntu)

Utiliser la commande ssh avec l'option -D :

FIXME

svp coriger (4242 est le numéro du port utilisé)

Délai lors de la connexion

Si vous avez un délai de plusieurs secondes avant que la connexion SSH ne se fasse, essayez d'ajouter ceci à votre fichier ~/.ssh/config

GSSAPIAuthentication no

Ceci désactive l'identification par GSSAPI qui engendre parfois des délais lorsqu'elle n'est pas utilisée. (Source : http://www.refreshinglyblue.com/2007/5/18/long-delay-before-ssh-authentication)

Correction vulnérabilité SSH

Le 14 mai 2008, une mise à jour de sécurité de ssh dans les dépôts signale qu'une vulnérabilité a lieu dans le générateur de nombres aléatoires pour générer les clés. Il faut donc regénérer ses clés après avoir fait la mise à jour et redémarré. Vu que la mise à jour regénère automatiquement les clés pour la machine, il ne reste plus qu'à modifier les clés persos (pour les users) après un reboot.

Sur les pc clients :

rm ~/.ssh/known_hosts

Sur les pc serveurs :

rm ~/.ssh/authorized_keys

Puis, pour une authentification par clés, à partir du poste client :

ssh-keygen -t dsa
scp ~/.ssh/id_dsa.pub leserveur:.ssh/authorized_keys

Pour vérifier:

ssh-vulnkey

Si aucune clé n'est COMPROMISE, c'est ok :)

Les empreintes (fingerprint)

Retrouver l'empreinte de notre clef ssh, pour la communiquer à une personne qui veut se connecter et va utiliser notre clef publique :

$ ssh-keygen -l

Ensuite la commande demande le fichier de la clef publique. Sur un serveur on spécifiera /etc/ssh/ssh_host_rsa_key.pub.

Liens


ssh.txt · Dernière modification: 07/10/2008, à 14:51 par hyde
Le contenu de ce wiki est sous double licence : CC BY-SA et GNU FDL