Differences between revisions 1 and 71 (spanning 70 versions)
Revision 1 as of 2007-11-19 20:54:28
Size: 4168
Editor: ?cedricleinen
Comment:
Revision 71 as of 2016-07-19 08:21:44
Size: 16108
Comment: add link to Spanish translation + s /http / https
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
[[TableOfContents]]

TRADUCTION ET AJOUT DE COMPLEMENT

= Introduction =

ssh stands for '''s'''ecure '''sh'''ell and is a program for remote logins into other computers and for running single commands on other computers in a save way, see [http://en.wikipedia.org/wiki/Secure_Shell Wikipedia - Secure Shell] for more general information and [http://www.openssh.org/ OpenSSH] for the ssh homepage.

Throughout this document it will be assumed that the following two variables are defined
{{{
remote_host=<the remote computer>
remote_user=<your user name on $remote_host>
}}}
So, if you want to use the recipes below, first set these variables to the remote computer name and the user name on that remote computer. Then cut and paste of the commands below should work. remote_host may also be an IP-address.

= Remote login =

If you want to login to $remote_host as user $remote_user simply type
{{{
ssh $remote_user@$remote_host
}}}
If the usernames on the local and the remote computer are identical, you can drop the $remote_user@-part and simply write
{{{
ssh $remote_host
}}}

If this is the first time you login to the remote machine, ssh will ask you whether you are sure you want to connect to the remote computer. Answer 'yes' and then type in your password, and ssh will do a remote login for you.

= Remote commands =

If you just want to run one command on the remote computer, you don't need to login. You can tell ssh to run the command without login, For instance,
## page was renamed from fr/ssh
## page was renamed from sshFrench
## page was renamed from sshFrensh
#language fr

~-[[DebianWiki/EditorGuide#translation|Traduction(s)]] : [[de/SSH|Deutsch]] - [[SSH|English]] - [[es/SSH|Español]] - Français - [[it/SSH|Italiano]]-~

<<TableOfContents>>

ToDo : fusionner (et traduire) cette page avec la version [[SSH|anglaise]]

== Introduction ==
'''SSH'''<<FootNote(http://tools.ietf.org/html/rfc4252)>> (« '''S'''ecure '''SH'''ell ») est un protocole de communication sécurisé. Il permet, entre autres, de se connecter à un hôte à distance de façon sécurisée sur un réseau qui ne l'est pas forcément. Rendez-vous sur [[https://fr.wikipedia.org/wiki/Secure_Shell|Wikipedia - Secure Shell]] pour plus d'informations, ainsi que DebPkg:ssh, DebPkg:lsh-client ou DebPkg:dropbear pour découvrir quelques implémentations du protocole SSH présentes dans [[https://www.debian.org/index.fr.html|Debian]], avec bien sûr [[http://www.openssh.org/|OpenSSH]] qui est probablement la plus populaire<<FootNote(http://www.openssh.org/users.html)>>.
SSH remplace et améliore [[https://fr.wikipedia.org/wiki/Telnet|telnet]],[[https://fr.wikipedia.org/wiki/Rlogin|rlogin]] et [[https://fr.wikipedia.org/wiki/Rsh|rsh]], qui sont tous des protocoles de communication à distance mais n'incluant aucune couche de sécurité.

Dans ce document nous allons utiliser la suite OpenSSH, et il sera également supposé que les deux variables suivantes seront définies :

{{{
hôte_distant=<l'ordinateur à distance>
utilisateur_distant=<nom d'utilisateur sur $hôte_distant>
}}}

Par conséquent, pour reproduire les commandes ci-dessous, veillez à bien remplacer ces valeurs par celles qui vous intéressent. Notez aussi que « hôte_distant » peut être une adresse IP.

== Installation ==

=== Installation du client ===
Normalement, le client est installé par défaut, sinon il suffit de saisir en tant que superutilisateur :

{{{
apt-get install openssh-client
}}}

=== Installation du serveur ===
La partie serveur permet à des hôtes distants de se connecter à votre système et sera installée comme suit en tant que superutilisateur :

{{{
apt-get install openssh-server
}}}

== Fichiers de configuration ==

Les principaux fichiers de configuration sont dans le répertoire ''/etc/ssh'' :

 * '''ssh_config''' : fichier de configuration du client
 * '''sshd_config''' : fichier de configuration du serveur

De plus, ce répertoire contient les couples de clés privées/publiques identifiant vos hôtes :

 * ssh_host_dsa_key
 * ssh_host_dsa_key.pub
 * ssh_host_rsa_key
 * ssh_host_rsa_key.pub


Depuis OpenSSH 5.7<<FootNote(http://openbsd.das.ufsc.br/openssh/txt/release-5.7)>>, une nouvelle paire de clés a fait son apparition :

 * ssh_host_ecdsa_key
 * ssh_host_ecdsa_key.pub

Depuis OpenSSH 6.5<<FootNote(http://openssh/txt/release-6.5)>>, une nouvelle paire de clés a fait son apparition :

 * ssh_host_ed25519_key
 * ssh_host_ed25519_key.pub

=== Régénérer les clés hôte ===

{{{
rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server
}}}

== Accès sur une machine distante ==

=== Avec mot de passe ===

Si vous voulez vous connectez à la machine $hôte_distant avec l'utilisateur $utilisateur_distant, saisissez simplement

{{{
ssh $utilisateur_distant@$hôte_distant
}}}
et saisir votre mot de passe.

Si le nom d'utilisateur sur le système local et la machine distante sont les mêmes, vous pouvez omettre la partie $utilisateur_distant@ et saisir simplement

{{{
ssh $hôte_distant
}}}

Si c'est la première fois que vous vous connectez à l'hôte distant, le client ssh va vous demander si vous êtes certain de vouloir vous connecter à la machine distante. Répondez « oui » après avoir vérifié l'empreinte du serveur et entrez votre mot de passe, ainsi, ssh vous connectera à l'hôte distant.

=== Utilisation de clés partagées ===

 Une des fonctionnalités supportées par SSH est l'utilisation d'un couple de clés privée/publique pour se connecter à l'hôte distant. Cette méthode permet, si l'on se connecte souvent à un hôte distant de ne pas saisir à chaque fois son mot de passe. Pour cela, vous devez générer un couple de clés privée/publique sur votre machine locale et déposer la clé publique sur l'hôte distant.

 Pour générer la clé, on utilise le programme ssh-keygen

{{{
ssh-keygen -t rsa
}}}

Ce programme va générer un couple de clés privé/publique dans le répertoire ~/.ssh. Le programme vous demande dans un premier temps le répertoire de destination des clés, par défaut votre répertoire personnel, une phrase de passe (passphrase) vous est ensuite demandé.

Notes : nous vous conseillons de ne pas laisser la phrase de passe vide. En effet, un attaquant qui aurait récupéré votre clé privée pourrait ensuite se connecter facilement à tous les hôtes sur lesquels vous avez déposé votre clé publique si la phrase de passe est vide. Pensez à choisir une phrase de passe longue et complexe.

Votre clé privée est id_rsa (vous devez ne jamais la fournir à un tiers), la clé publique est id_rsa.pub.

Vous devez copier votre clé publique sur l'hôte distant avec la commande '''ssh-copy-id'''

{{{
ssh-copy-id -i ~/.ssh/id_rsa.pub $utilisateur_distant@$hôte_distant
}}}

Vous pouvez maintenant vous connecter simplement à l'hôte distant, la phrase de passe vous est demandée. Une fois rentré, vous êtes connecté à l'hôte distant. En cas de nouvelles connections, la phrase de passe ne vous sera plus demandé durant toute votre session.


== Sécurisation ==
 Par défaut, un serveur SSH est relativement sécurisé. Il est possible, à l'aide quelques options de configuration ou des outils, de le rendre encore plus difficile à ''cracker''.

/!\ L'utilisation de la dernière version disponible du paquet DebPkg:openssh-server permet de se protéger contre l'utilisation des failles de sécurité connues.

=== Options de configuration ===

(!) Il faut éditer le fichier /etc/ssh/sshd_config pour ajuster le paramétrage puis relancer le serveur SSH par
{{{
invoke-rc.d ssh restart
}}}

 * Désactiver l'utilisation du mot de passe pour l'authentification (''!PasswordAuthentication no'').
 * Désactiver l'utilisation du compte ''root'' (''!PermitRootLogin no'')
 * N'autoriser que certains utilisateurs ou groupes d'utilisateurs à se connecter (''!AllowUsers'' et ''!AllowGroups'')


{i} Les options ''!AllowUsers'' et ''!AllowGroups'' n'amélioreront pas la sécurité d'un serveur SSH. Mais, dans certains cas, leur utilisation permet de résister un peu plus longtemps lors des attaques par [[http://fr.wikipedia.org/wiki/Attaque_par_force_brute|force brute]].


=== Outils externes ===
 * DebianPkg:fail2ban : permet de « blacklister » automatiquement à l'aide de DebianPkg:iptables les adresses IP tentant d'attaquer par ''« force brute »'' un serveur SSH.
 * DebianPkg:denyhosts : comme DebianPkg:fail2ban, DebianPkg:denyhosts permet de bloquer les adresses IP tentant de forcer une connexion SSH. Mais contrairement à DebianPkg:fail2ban, il n'utilise pas DebianPkg:iptables, mais le fichier ''« /etc/hosts.deny »''.

== Fonctions complémentaires ==
== Commandes supplémentaires ==
=== scp ===
 ''scp'' est un utilitaire en ligne de commande permettant de transférer des fichiers entre 2 machines.
  * Envoi d'un fichier :
{{{
scp $fichier_source $utilisateur_distant@$hôte_distant:$fichier_destination
}}}
  * Récupération d'un fichier vers la machine locale :
{{{
scp $utilisateur_distant@$hôte_distant:$fichier_source $fichier_destination
}}}
=== sftp ===
==== mode texte ====
==== mode graphique ====
=== clusterssh ===
=== ssh-agent et ssh-add ===
 ''ssh-agent'' est un outil pratique permettant de gérer les clés privées et leurs phrases de passe. Il doit être invoqué au début de votre session ainsi avec un Bourne shell :
{{{
eval `ssh-agent -s`
}}}
Ou, avec un shell C :
{{{
eval `ssh-agent -c`
}}}
Au premier chargement d'une clé privée, sa phrase de passe vous sera demandée et ssh-agent retiendra la clé. Par la suite, il ne sera donc plus nécessaire de la saisir.

''ssh-add'' peut être utilisé pour gérer les clés retenues :
  * Chargement d'une clé : '''ssh-add $clé_privée'''
  * Lister les clés disponibles : '''ssh-add -l'''
  * Suppression de toutes clés chargées : '''ssh-add -D'''

=== keychain ===
[[http://www.funtoo.org/Keychain|Keychain]], fourni par le paquet DebianPkg:keychain, est un script shell facilitant l'utilisation d'un seul agent SSH pendant plusieurs sessions d'un même utilisateur. En effet, lors du premier lancement, ssh-agent crée un socket permettant la communication vers SSH. Ce socket est référencé uniquement dans l'environnement de la session utilisée lors du démarrage de l'agent. Keychain permet de garder la trace de l'agent et de propager l'accès à cet agent vers d'autres sessions, ce qui permet de limiter à une seule instance de ssh-agent par utilisateur sur une machine donnée.

=== ssh-askpass ===
 ''DebianPkg:ssh-askpass'' est un outil simplifiant la saisie de la phrase de passe d'une clé privée au sein d'une session X. Plusieurs implémentations existent :
   * '''x11-ssh-askpass''' : version X11
   * '''kaskpass''' : intégration de ssh-askpass dans l'environnement KDE
   * '''ssh-askpass-gnome''' : intégration de ssh-askpass dans l'environnement Gnome

=== libpam-usb ===
 ''DebianPkg:libpam-usb'' (seulement disponible jusqu'à Debian Jessie) est un outil permettant de s'authentifier à l'aide d'une clé USB. Ce paquet comprend un outil bien pratique : ''pamusb-agent''. Cet outil permet de charger les clés SSH présentes sur la clé USB lorsque celle-ci est connectée et de les décharger lorsqu'elle est déconnectée du système.

----
== Commandes à distance ==
Si vous voulez juste lancer une commande sur l'ordinateur distant, vous n'avez pas besoin de vous connecter à la machine hôte pour vous identifier, pour ensuite lancer la commande. Vous pouvez ordonner à votre client SSH de lancer la commande directement, par exemple :
Line 35: Line 191:
lists all files with extension .txt on the remote computer. This works with single tick quotes '...' as shown here, with double tick qoutes "...", and without quotes. There may be differences between these three cases, though, not yet documented here.

= ssh without password =

If you work on a remote computer often, typing in the password each time you use ssh becomes annoying. You can configure ssh such that it does not ask you for a password anymore for that particular connection. You have to generate a private and public encryption key on your local machine and provide the public key to the remote machine.

To generate the keys run
{{{
ssh-keygen -t dsa
}}}
and reply to all questions just with return.

To provide the public key to the remote machine first create there an .ssh directory (if not present already) and then append the public key of your local machine to the authorized_keys file on the remote machine.
{{{
ssh $remote_user@$remote_host mkdir -p .ssh
cat .ssh/id_dsa.pub | ssh $remote_user@$remote_host 'cat >> .ssh/authorized_keys'
}}}
Note that here the cat command within the ssh command takes its input from the pipe.

From now on, you should be able to login with ssh without password.

 '''REMARK:''' If the usernames on the local and the remote machine are identical, and if the local and the remote computer have access to the same home-directory of that user, e.g. because they are different clients in the same LAN with a common home directory mounted via nfs, then the private key, the public key, and the authorized_keys file all reside in the same directory. Thus you cannot only login without password from the local to the remote machine but also vice versa. In fact you can login from any computer in the LAN to any other computer. (The username@hostname entry at the end of the public key in the authorized_keys file has no relevance to ssh, you may delete it or change it if you like (I think)).

 '''REMARK:''' The example above assumes ssh protocol 2 and uses DSA encryption, which is currently recommended. One could also use RSA encryption for ssh protocol 2. ssh protocol 1 uses yet another encryption, but is obsolete.

 '''TROUBLESHOOTING (ssh still asks for a password):''' Login without password does not work if group or world has write permissions for the home directory on the remote machine. To fix that, run
 {{{
ssh $remote_user@$remote_host chmod g-w,o-w /home/$remote_user
}}}



 '''SOURCE:''' Mathias Kettner, ''SSH login without password'', [http://www.linuxproblem.org/art_9.html], visited 2007-10-06.
Ceci listera tous les fichiers avec l’extension .txt sur la machine hôte. Ceci fonctionne avec les guillemets simples '...' tel que monté ici, avec les guillemets doubles, et sans les guillemets. Il pourrait y avoir des différences entre ces trois possibilités. Cela n'est cependant pas pour l'instant documenté ici.

== Connexion SSH dans Debian à partir d'un autre système d'exploitation ==
 * [[http://www.chiark.greenend.org.uk/~sgtatham/putty/|PuTTY]] est un [[fr/TerminalEmulator|émulateur de terminal]] qui peut agir comme client pour le protocole SSH. Il est très largement utilisé par les utilisateurs Windows.
 * Comparaison des clients SSH : WikiPedia:Comparison_of_SSH_clients (en anglais)

== SSH et la sécurité ==
=== Serveur SSH ===
 * Pensez à utiliser DebianPkg:fail2ban qui est un superviseur de fichiers log qui bannit automatiquement une adresse IP après un nombre prédéfini de tentatives de connexion infructueuses. Protège contre les attaques par force brute.
 * Utilisez l'authentification SSH par clés plutôt que par mot de passe.

=== Client SSH ===
 * http://lackof.org/taggart/hacking/ssh/ - Les bonnes pratiques pour utiliser SSH (lien en anglais).

== Permettre l'accès à un réseau de l'extérieur à travers un pare-feu sans modifier sa configuration ==

 Par son implémentation, SSH permet de transporter (« tunneler ») d'autres protocoles applicatifs, permettant ainsi de chiffrer ceux-ci.

== Tunnel SSH pour sécuriser d'autres applications ==
== Options complémentaires ==

=== Applications graphiques (X11Forwarding) ===
=== pop3 ===
=== imap ===
=== smtp ===
== Divers ==
=== Les options de la ligne de commande SSH (les séquences après escape ~) ===
 * '''~.''' : Déconnexion
 * '''~^Z''' : Passe la connexion en background.
 * '''~#''' : Affiche les tunnels en cours.
 * '''~&''' : Passe la session en background lors d'une demande de fin de session SSH alors qu'il existe un tunnel X11
 * '''~?''' : Affiche l'aide.
 * '''~B''' : Envoie le ''break'' (uniquement en SSH2)
 * '''~C''' : Passe en mode commande.

== Options de configuration du fichier authorized_keys ==

 Le fichier ''authorized_keys'' est le fichier contenant les clés publiques permettant à un utilisateur de s'authentifier à l'aide de sa clé privée. Le paramétrage de ce fichier, présent dans ''~/.ssh'', peut être très utile dans certains cas. Sa syntaxe est :
{{{
 option1,option2,optionN type-de-clef clef-en-base64 commentaire.
}}}

 * '''__Les__ __options__ __:__'''

  * '''from="*.domain.tld,machine.domaine2.tld"''' : autorise uniquement la connexion depuis toutes les machines du domaine domain.tld et la machine machine.domaine2.tld

  * '''from="!badguy.domain3.tld"''' : refuse les connexions initiées par la machine !badguy.domain3.tld.

  * '''command="/path/to/command"''' : force l'exécution de la commande /path/to/command

  * '''environnement="VAR=value"''' : permet forcer la définition des variables d'environnements.

  * '''permit-open="host:port"''' : permet uniquement l'ouverture d'un tunnel vers host:port

  * '''no-port-forwarding''' : empêche l'utilisation des tunnels TCP

  * '''no-X11-forwarding''' : empêche l'utilisation du tunnel X

  * '''no-agent-forwarding''' : empêche le forwarding du ''ssh-agent''

== Dépannage ==
=== Décalage de la version d'OpenSSL. Construit avec la version 1000105f, vous avez le numéro de version 10001060 ===
Si vous avez un message d'erreur de ce type au démarrage du démon `ssh`, vous devez exécuter la commande :
{{{
apt-get install openssh-server openssh-client
}}}

Voir aussi [[DebianBug:732940|le rapport de bogue]].

=== Garder la connexion SSH active ===

Pour des raisons de sécurité, une connexion SSH est automatiquement fermée, par défaut, après un temps déterminé. Mais dans certains cas, vous voulez garder cette connexion ouverte, comme dans le cas d'un stockage nuagique (cloud) à travers une connexion SSH.

==== Pour un serveur Debian 7.x ====

Étapes pour garder une connexion SSH active.

 1. Sur le serveur SSH modifiez le fichier "''/etc/ssh/sshd_config''"
 1. Ajoutez ce qui suit à la fin de ce fichier {{{
# Keep client SSH connection alive by sending every 300 seconds a small keep-alive packet to the server in order to use ssh connection. 300 seconds equal 5 minutes.
ClientAliveInterval 300
 
# Disconnect client after 3333 "ClientAlive" requests. Format is (ClientAliveInterval x ClientAliveCountMax). In this example (300 seconds x 3333) = ~999,900 seconds = ~16,665 minutes = ~277 hours = ~11 days.
ClientAliveCountMax 3333
}}}
 1. En tant que superutilisateur redémarrez le service SSH {{{
service sshd restart}}}

Notez que sur les récentes versions de Debian Wheezy (c'est à dire, avec les mises à jour de novembre 2015), la commande ci-dessus ne fonctionne désormais plus et retourne l'erreur suivante :{{{
sudo service sshd restart
sshd: unrecognized service}}}

En revanche, la commande suivante fonctionne :{{{
sudo service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.
}}}

{{{{#!wiki warning
Un des meilleurs conseils de sécurité est d'avoir un mot de passe solide et d'appliquer les mises à jour de sécurité le plus rapidement possible. Mais qu'arrive-t-il si, même si vos utilisateurs ont les mots de passe les plus solide, mais laissent leurs session SSH ouverte et sans surveillance. Cela signifie que n'importe qui peut s'approcher du PC et, juste en se servant de la commande {{{passwd}}}, peut changer le mot de passe, et ainsi obtenir l'accès au serveur. Faites preuve de discernement. }}}}


--------------------

Traduction(s) : Deutsch - English - Español - Français - Italiano

ToDo : fusionner (et traduire) cette page avec la version anglaise

Introduction

SSH1Secure SHell ») est un protocole de communication sécurisé. Il permet, entre autres, de se connecter à un hôte à distance de façon sécurisée sur un réseau qui ne l'est pas forcément. Rendez-vous sur Wikipedia - Secure Shell pour plus d'informations, ainsi que ssh, lsh-client ou dropbear pour découvrir quelques implémentations du protocole SSH présentes dans Debian, avec bien sûr OpenSSH qui est probablement la plus populaire2. SSH remplace et améliore telnet,rlogin et rsh, qui sont tous des protocoles de communication à distance mais n'incluant aucune couche de sécurité.

Dans ce document nous allons utiliser la suite OpenSSH, et il sera également supposé que les deux variables suivantes seront définies :

hôte_distant=<l'ordinateur à distance>
utilisateur_distant=<nom d'utilisateur sur $hôte_distant>

Par conséquent, pour reproduire les commandes ci-dessous, veillez à bien remplacer ces valeurs par celles qui vous intéressent. Notez aussi que « hôte_distant » peut être une adresse IP.

Installation

Installation du client

Normalement, le client est installé par défaut, sinon il suffit de saisir en tant que superutilisateur :

apt-get install openssh-client

Installation du serveur

La partie serveur permet à des hôtes distants de se connecter à votre système et sera installée comme suit en tant que superutilisateur :

apt-get install openssh-server

Fichiers de configuration

Les principaux fichiers de configuration sont dans le répertoire /etc/ssh :

  • ssh_config : fichier de configuration du client

  • sshd_config : fichier de configuration du serveur

De plus, ce répertoire contient les couples de clés privées/publiques identifiant vos hôtes :

  • ssh_host_dsa_key
  • ssh_host_dsa_key.pub
  • ssh_host_rsa_key
  • ssh_host_rsa_key.pub

Depuis OpenSSH 5.73, une nouvelle paire de clés a fait son apparition :

  • ssh_host_ecdsa_key
  • ssh_host_ecdsa_key.pub

Depuis OpenSSH 6.54, une nouvelle paire de clés a fait son apparition :

  • ssh_host_ed25519_key
  • ssh_host_ed25519_key.pub

Régénérer les clés hôte

rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

Accès sur une machine distante

Avec mot de passe

Si vous voulez vous connectez à la machine $hôte_distant avec l'utilisateur $utilisateur_distant, saisissez simplement

ssh $utilisateur_distant@$hôte_distant

et saisir votre mot de passe.

Si le nom d'utilisateur sur le système local et la machine distante sont les mêmes, vous pouvez omettre la partie $utilisateur_distant@ et saisir simplement

ssh $hôte_distant

Si c'est la première fois que vous vous connectez à l'hôte distant, le client ssh va vous demander si vous êtes certain de vouloir vous connecter à la machine distante. Répondez « oui » après avoir vérifié l'empreinte du serveur et entrez votre mot de passe, ainsi, ssh vous connectera à l'hôte distant.

Utilisation de clés partagées

  • Une des fonctionnalités supportées par SSH est l'utilisation d'un couple de clés privée/publique pour se connecter à l'hôte distant. Cette méthode permet, si l'on se connecte souvent à un hôte distant de ne pas saisir à chaque fois son mot de passe. Pour cela, vous devez générer un couple de clés privée/publique sur votre machine locale et déposer la clé publique sur l'hôte distant. Pour générer la clé, on utilise le programme ssh-keygen

ssh-keygen -t rsa

Ce programme va générer un couple de clés privé/publique dans le répertoire ~/.ssh. Le programme vous demande dans un premier temps le répertoire de destination des clés, par défaut votre répertoire personnel, une phrase de passe (passphrase) vous est ensuite demandé.

Notes : nous vous conseillons de ne pas laisser la phrase de passe vide. En effet, un attaquant qui aurait récupéré votre clé privée pourrait ensuite se connecter facilement à tous les hôtes sur lesquels vous avez déposé votre clé publique si la phrase de passe est vide. Pensez à choisir une phrase de passe longue et complexe.

Votre clé privée est id_rsa (vous devez ne jamais la fournir à un tiers), la clé publique est id_rsa.pub.

Vous devez copier votre clé publique sur l'hôte distant avec la commande ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub $utilisateur_distant@$hôte_distant

Vous pouvez maintenant vous connecter simplement à l'hôte distant, la phrase de passe vous est demandée. Une fois rentré, vous êtes connecté à l'hôte distant. En cas de nouvelles connections, la phrase de passe ne vous sera plus demandé durant toute votre session.

Sécurisation

  • Par défaut, un serveur SSH est relativement sécurisé. Il est possible, à l'aide quelques options de configuration ou des outils, de le rendre encore plus difficile à cracker.

/!\ L'utilisation de la dernière version disponible du paquet openssh-server permet de se protéger contre l'utilisation des failles de sécurité connues.

Options de configuration

(!) Il faut éditer le fichier /etc/ssh/sshd_config pour ajuster le paramétrage puis relancer le serveur SSH par

invoke-rc.d ssh restart
  • Désactiver l'utilisation du mot de passe pour l'authentification (PasswordAuthentication no).

  • Désactiver l'utilisation du compte root (PermitRootLogin no)

  • N'autoriser que certains utilisateurs ou groupes d'utilisateurs à se connecter (AllowUsers et AllowGroups)

{i} Les options AllowUsers et AllowGroups n'amélioreront pas la sécurité d'un serveur SSH. Mais, dans certains cas, leur utilisation permet de résister un peu plus longtemps lors des attaques par force brute.

Outils externes

  • fail2ban : permet de « blacklister » automatiquement à l'aide de iptables les adresses IP tentant d'attaquer par « force brute » un serveur SSH.

  • denyhosts : comme fail2ban, denyhosts permet de bloquer les adresses IP tentant de forcer une connexion SSH. Mais contrairement à fail2ban, il n'utilise pas iptables, mais le fichier « /etc/hosts.deny ».

Fonctions complémentaires

Commandes supplémentaires

scp

  • scp est un utilitaire en ligne de commande permettant de transférer des fichiers entre 2 machines.

    • Envoi d'un fichier :

scp $fichier_source $utilisateur_distant@$hôte_distant:$fichier_destination
  • Récupération d'un fichier vers la machine locale :

scp $utilisateur_distant@$hôte_distant:$fichier_source $fichier_destination

sftp

mode texte

mode graphique

clusterssh

ssh-agent et ssh-add

  • ssh-agent est un outil pratique permettant de gérer les clés privées et leurs phrases de passe. Il doit être invoqué au début de votre session ainsi avec un Bourne shell :

eval `ssh-agent -s`

Ou, avec un shell C :

eval `ssh-agent -c`

Au premier chargement d'une clé privée, sa phrase de passe vous sera demandée et ssh-agent retiendra la clé. Par la suite, il ne sera donc plus nécessaire de la saisir.

ssh-add peut être utilisé pour gérer les clés retenues :

  • Chargement d'une clé : ssh-add $clé_privée

  • Lister les clés disponibles : ssh-add -l

  • Suppression de toutes clés chargées : ssh-add -D

keychain

Keychain, fourni par le paquet keychain, est un script shell facilitant l'utilisation d'un seul agent SSH pendant plusieurs sessions d'un même utilisateur. En effet, lors du premier lancement, ssh-agent crée un socket permettant la communication vers SSH. Ce socket est référencé uniquement dans l'environnement de la session utilisée lors du démarrage de l'agent. Keychain permet de garder la trace de l'agent et de propager l'accès à cet agent vers d'autres sessions, ce qui permet de limiter à une seule instance de ssh-agent par utilisateur sur une machine donnée.

ssh-askpass

  • ssh-askpass est un outil simplifiant la saisie de la phrase de passe d'une clé privée au sein d'une session X. Plusieurs implémentations existent :

    • x11-ssh-askpass : version X11

    • kaskpass : intégration de ssh-askpass dans l'environnement KDE

    • ssh-askpass-gnome : intégration de ssh-askpass dans l'environnement Gnome

libpam-usb

  • libpam-usb (seulement disponible jusqu'à Debian Jessie) est un outil permettant de s'authentifier à l'aide d'une clé USB. Ce paquet comprend un outil bien pratique : pamusb-agent. Cet outil permet de charger les clés SSH présentes sur la clé USB lorsque celle-ci est connectée et de les décharger lorsqu'elle est déconnectée du système.


Commandes à distance

Si vous voulez juste lancer une commande sur l'ordinateur distant, vous n'avez pas besoin de vous connecter à la machine hôte pour vous identifier, pour ensuite lancer la commande. Vous pouvez ordonner à votre client SSH de lancer la commande directement, par exemple :

ssh $remote_user@$remote_host 'ls *.txt'

Ceci listera tous les fichiers avec l’extension .txt sur la machine hôte. Ceci fonctionne avec les guillemets simples '...' tel que monté ici, avec les guillemets doubles, et sans les guillemets. Il pourrait y avoir des différences entre ces trois possibilités. Cela n'est cependant pas pour l'instant documenté ici.

Connexion SSH dans Debian à partir d'un autre système d'exploitation

SSH et la sécurité

Serveur SSH

  • Pensez à utiliser fail2ban qui est un superviseur de fichiers log qui bannit automatiquement une adresse IP après un nombre prédéfini de tentatives de connexion infructueuses. Protège contre les attaques par force brute.

  • Utilisez l'authentification SSH par clés plutôt que par mot de passe.

Client SSH

Permettre l'accès à un réseau de l'extérieur à travers un pare-feu sans modifier sa configuration

  • Par son implémentation, SSH permet de transporter (« tunneler ») d'autres protocoles applicatifs, permettant ainsi de chiffrer ceux-ci.

Tunnel SSH pour sécuriser d'autres applications

Options complémentaires

Applications graphiques (X11Forwarding)

pop3

imap

smtp

Divers

Les options de la ligne de commande SSH (les séquences après escape ~)

  • ~. : Déconnexion

  • ~^Z : Passe la connexion en background.

  • ~# : Affiche les tunnels en cours.

  • ~& : Passe la session en background lors d'une demande de fin de session SSH alors qu'il existe un tunnel X11

  • ~? : Affiche l'aide.

  • ~B : Envoie le break (uniquement en SSH2)

  • ~C : Passe en mode commande.

Options de configuration du fichier authorized_keys

  • Le fichier authorized_keys est le fichier contenant les clés publiques permettant à un utilisateur de s'authentifier à l'aide de sa clé privée. Le paramétrage de ce fichier, présent dans ~/.ssh, peut être très utile dans certains cas. Sa syntaxe est :

 option1,option2,optionN type-de-clef clef-en-base64 commentaire.
  • Les options :

    • from="*.domain.tld,machine.domaine2.tld" : autorise uniquement la connexion depuis toutes les machines du domaine domain.tld et la machine machine.domaine2.tld

    • from="!badguy.domain3.tld" : refuse les connexions initiées par la machine !badguy.domain3.tld.

    • command="/path/to/command" : force l'exécution de la commande /path/to/command

    • environnement="VAR=value" : permet forcer la définition des variables d'environnements.

    • permit-open="host:port" : permet uniquement l'ouverture d'un tunnel vers host:port

    • no-port-forwarding : empêche l'utilisation des tunnels TCP

    • no-X11-forwarding : empêche l'utilisation du tunnel X

    • no-agent-forwarding : empêche le forwarding du ssh-agent

Dépannage

Décalage de la version d'OpenSSL. Construit avec la version 1000105f, vous avez le numéro de version 10001060

Si vous avez un message d'erreur de ce type au démarrage du démon ssh, vous devez exécuter la commande :

apt-get install openssh-server openssh-client

Voir aussi le rapport de bogue.

Garder la connexion SSH active

Pour des raisons de sécurité, une connexion SSH est automatiquement fermée, par défaut, après un temps déterminé. Mais dans certains cas, vous voulez garder cette connexion ouverte, comme dans le cas d'un stockage nuagique (cloud) à travers une connexion SSH.

Pour un serveur Debian 7.x

Étapes pour garder une connexion SSH active.

  1. Sur le serveur SSH modifiez le fichier "/etc/ssh/sshd_config"

  2. Ajoutez ce qui suit à la fin de ce fichier

    # Keep client SSH connection alive by sending every 300 seconds a small keep-alive packet to the server in order to use ssh connection. 300 seconds equal 5 minutes.
    ClientAliveInterval 300
     
    # Disconnect client after 3333 "ClientAlive" requests. Format is (ClientAliveInterval x ClientAliveCountMax). In this example (300 seconds x 3333) = ~999,900 seconds = ~16,665 minutes = ~277 hours = ~11 days.
    ClientAliveCountMax 3333
  3. En tant que superutilisateur redémarrez le service SSH

    service sshd restart

Notez que sur les récentes versions de Debian Wheezy (c'est à dire, avec les mises à jour de novembre 2015), la commande ci-dessus ne fonctionne désormais plus et retourne l'erreur suivante :

sudo service sshd restart
sshd: unrecognized service

En revanche, la commande suivante fonctionne :

sudo service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

Un des meilleurs conseils de sécurité est d'avoir un mot de passe solide et d'appliquer les mises à jour de sécurité le plus rapidement possible. Mais qu'arrive-t-il si, même si vos utilisateurs ont les mots de passe les plus solide, mais laissent leurs session SSH ouverte et sans surveillance. Cela signifie que n'importe qui peut s'approcher du PC et, juste en se servant de la commande passwd, peut changer le mot de passe, et ainsi obtenir l'accès au serveur. Faites preuve de discernement.