News | About | Get Frugalware | Packages | Documentation | Discussion Forums | Bug Tracker | Wiki | Community | Development

SSH (Français)

From FrugalWiki

Jump to: navigation, search



Secure Shell ou SSH est un protocole réseau qui permet d'échanger des données via canal sécurisé entre deux ordinateurs. Le chiffrement assure la confidentialité et l'intégrité des données. SSH utilise la cryptographie à clé publique pour authentifier l'ordinateur distant et permet à la station d'authentifier l'utilisateur à distance, si nécessaire.

SSH est généralement utilisé pour se connecter à une machine distante et y exécuter des commandes, mais il supporte aussi le tunneling, la redirection arbitraire des ports TCP et des connexions X11; le transfert de fichier peut être effectué en utilisant les protocoles associés SFTP ou SCP.

Par défaut, un serveur SSH écoute sur le port TCP standard 22. Un programme client SSH est typiquement utilisé pour établir des connexions avec le démon sshd acceptant les connexions distantes. Les deux sont généralement présents sur les systèmes d'exploitation les plus modernes, y compris Mac OS X, GNU/Linux, Solaris et OpenVMS. Des versions propriétaires, freeware et open source de différents niveaux de complexité et d’exhaustivité existent.

(Source: Wikipedia:Secure Shell)

Contents

OpenSSH

OpenSSH (OpenBSD Secure Shell) est un ensemble de programmes informatiques, offrant des sessions de communication cryptées sur un réseau informatique en utilisant le protocole SSH. Il a été créé comme une alternative open source à la suite logicielle propriétaire Secure Shell soutenue par SSH Communications Security. OpenSSH est développé dans le cadre du projet OpenBSD, dirigé par Theo de Raadt.

OpenSSH est parfois confondu avec OpenSSL; toutefois, les projets ont des objectifs différents et sont développés par des équipes différentes, le nom similaire est tiré uniquement d'objectifs communs.

Installer OpenSSH

Root terminal 48px.png
# pacman -S openssh


Configurer SSH

Client

Le fichier de configuration se trouve et peut être édité dans /etc/ssh/ssh_config.

Un exemple de configuration:

File: /etc/ssh/ssh_config
#       $OpenBSD: ssh_config,v 1.25 2009/02/17 01:28:32 djm Exp $

# This is the ssh client system-wide configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.

# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.

# Site-wide defaults for some commonly used options.  For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.

Host *
#   ForwardAgent no
#   ForwardX11 no
#   RhostsRSAAuthentication no
#   RSAAuthentication yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/identity
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   Port 22
#   Protocol 2,1
#   Cipher 3des
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
HashKnownHosts yes
StrictHostKeyChecking ask

Il est recommandé de changer la ligne du protocole en ça:

Protocol 2

Ce qui signifie que seul le protocole 2 sera utilisé, car le protocole 1 est considéré comme peu sûr.

Démon

Le fichier de configuration du démon SSH se trouve et peut être édité dans /etc/ssh/sshd_config.

Un exemple de configuration:

File: /etc/ssh/sshd_config
#    $OpenBSD: sshd_config,v 1.75 2007/03/19 01:01:29 djm Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.

#Port 22
#Protocol 2,1
ListenAddress 0.0.0.0
#ListenAddress ::

# HostKey for protocol version 1
#HostKey /etc/ssh/sshhostkey
# HostKeys for protocol version 2
#HostKey /etc/ssh/sshhostrsa_key
#HostKey /etc/ssh/sshhostdsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768

# Logging
#obsoletes ~QuietMode and ~FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/sshknownhosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ~ChallengeResponseAuthentication mechanism.
# Depending on your PAM configuration, this may bypass the setting of
# PasswordAuthentication, ~PermitEmptyPasswords, and
# "PermitRootLogin without-password". If you just want the PAM account and
# session checks to run without PAM authentication, then enable this but set
# ChallengeResponseAuthentication=no
#UsePAM no

#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10

# no default banner path
#Banner /some/path

# override default of no subsystems
Subsystem       sftp    /usr/lib/ssh/sftp-server

Pour autoriser l'accès uniquement à certains utilisateurs, ajoutez cette ligne:

AllowUsers    user1 user2

Vous voudrez peut-être changer quelques lignes pour qu'elles ressemblent à ceci:

Protocol 2
.
.
.
LoginGraceTime 120
.
.
.
PermitRootLogin no # (put yes here if you want root login)

Vous pouvez aussi décommenter l'option BANNER et éditer /etc/issue pour obtenir un joli message d'accueil.

Tip: Vous pouvez changer le port par défaut de 22 par un numéro de port supérieur (consultez Sécurité par l'obscurité).

Même si le port SSH est modifié, il peut être détecté en utilisant un scanner de ports comme nmap, le changer réduira le nombre d'entrées dans le log causées par les tentatives d'authentification automatisées.

Tip: Désactiver totalement les connexions par mot de passe peut également améliorer la sécurité, puisque chaque utilisateur ayant accès au serveur devra créer des clés SSH (consultez Utilisation des clés SSH ).
.
File: /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no

Autoriser l'accès aux autres

Note: Vous devez adapter ce fichier pour vous connecter à distance à votre machine car le fichier est vide par défaut

Pour autoriser les connexions ssh à votre machine vous devez modifier le fichier /etc/hosts.allow, ajoutez ce qui suit:

# let everyone connect to you
sshd: ALL

# OR you can restrict it to a certain ip
sshd: 192.168.0.1

# OR restrict for an IP range
sshd: 10.0.0.0/255.255.255.0

# OR restrict for an IP match
sshd: 192.168.1.

Maintenant vous devez vérifier la ligne suivante dans votre fichier /etc/hosts.deny, assurez-vous qu'elle ressemble à ça :

ALL: ALL

Voilà. Vous pouvez vous connecter et recevoir des connexions SSH :).

Pour commencer à utiliser la nouvelle configuration, on redémarre le démon (en tant que root) :

Root terminal 48px.png
# service sshd restart


Gestion du démon SSH

Pour démarrer/redémarrer/arrêter le démon, tapez ce qui suit:

Root terminal 48px.png
# service sshd start


Connexion au serveur

Pour vous connecter au serveur, exécutez:

User terminal 48px.png
$ ssh -p port user@server-address

Trucs et Astuces

Tunnel Socks crypté

Ceci est très utile pour les utilisateurs d'ordinateurs portables connectés à divers réseaux sans fil non sécurisés. La seule chose dont vous avez besoin est un serveur SSH se trouvant dans un endroit sûr, comme votre maison ou votre lieu travail. Il serait utile d'utiliser un service DNS dynamique tel que DynDNS afin que vous n'ayez pas à vous rappeler de votre adresse IP.

Étape1: Démarrer la connexion

Vous n'avez qu'à exécuter cette unique commande dans votre terminal favori pour démarrer la connexion:

$ ssh -ND 4711 user@host

"user" est votre nom d’utilisateur sur le serveur SSH qui tourne sur l'hôte "host". Il vous demandera votre mot de passe, vous serez ensuite connecté ! Le drapeau "N" désactive l'invite de commandes interactive, et le drapeau "D" spécifie le port local sur lequel on veut écouter(vous pouvez choisir n'importe quel numéro de port).

Une façon plus simple, consiste à mettre une ligne d'alias dans votre ~/.bashrc comme ceci:

alias sshtunnel="ssh -ND 4711 -v user@host"

C'est intéressant d'ajouter le drapeau verbose "-v", vous pourrez ainsi vérifier que c'est effectivement connecté via cette sortie. Maintenant vous avez juste à exécuter la commande "sshtunnel" :)

Étape2: Configurer votre navigateur (ou autres programmes)

L'étape ci-dessus est complétement inutile si vous n'avez pas configuré votre navigateur(ou d'autres programmes) pour utiliser ce tunnel nouvellement créé. Depuis sa version actuelle, SSH supporte à la fois SOCKS4 et SOCKS5, vous choisir utiliser l'un d'eux.

  • Pour Firefox: Édition → Préférences → Avancé → Réseau → Connexion → Paramètres:
Cochez le bouton radio "Configuration manuelle du proxy", et entrez "localhost" dans le champ de texte "Hôte SOCKS", insérez ensuite votre numéro de port dans le champ de texte suivant (J'ai utilisé 4711 ci-dessous).

Firefox n’exécute pas automatiquement les requêtes DNS via le tunnel socks. Ce souci de confidentialité potentiel peut être réglé en suivant ces étapes:

  1. Taper about:config dans la barre d'adresse de Firefox.
  2. Rechercher network.proxy.socks_remote_dns.
  3. Mettre la valeur à true.
  4. Redémarrer le navigateur.
  • Pour Chromium: Vous pouvez définir les paramètres SOCKS comme un environnement de variables ou des options en ligne de commande. Je vous recommande d'ajouter l'une de ces fonctions à votre .bashrc:
function secure_chromium {
    port=4711
    export SOCKS_SERVER=localhost:$port
    export SOCKS_VERSION=5
    chromium &
    exit
}

OU

function secure_chromium {
    port=4711
    chromium --proxy-server="socks://localhost:$port" &
    exit
}

Maintenant ouvrez un terminal, et faites juste:

User terminal 48px.png
$ secure_chromium

Profitez de votre tunnel sécurisé!

Redirection X11

Pour exécuter des programmes graphiques via une connexion SSH, vous pouvez activer la redirection X11. Une option qui doit être définie dans les fichiers de configuration du serveur et du client (ici "client" veut dire machine (de bureau) sur laquelle tourne votre serveur X11, et vous exécuterez les applications X11 sur le "serveur").

Installer xorg-xauth sur votre serveur:

Root terminal 48px.png
# pacman -S xauth


  • Activer l'option AllowTcpForwarding dans sshd_config sur le serveur.
  • Activer l'option X11Forwarding dans sshd_config sur le serveur.
  • Définir l'option X11DisplayOffset dans sshd_config sur le serveur à 10.
  • Activer l'option X11UseLocalhost dans sshd_config sur le serveur.
  • Activer l'option ForwardX11 dans sshd_config sur le serveur.

Pour profiter de la redirection, connectez vous à votre serveur via ssh:

# ssh -X -p port user@server-address

Si vous recevez des erreurs en essayant d’exécuter des applications graphiques, optez pour la redirection de confiance à la place:

# ssh -Y -p port user@server-address

Vous pouvez maintenant lancer n'importe quel programme X sur le serveur distant, la sortie sera redirigée vers votre votre session locale:

Root terminal 48px.png
# xclock


Si vous avez des erreurs de type "Cannot open display", essayez la commande suivante comme utilisateur non root:

User terminal 48px.png
$ xhost +

La commande ci-dessus permettra à quiconque de rediriger des applications X11. Pour limiter la redirection à un hôte particulier:

User terminal 48px.png
$ xhost +hostname


Où hostname est le nom de l'hôte particulier sur lequel vous voulez vous rediriger. Tapez "man xhost" pour plus de détails.

Soyez prudents avec certaines applications qui vérifient l’exécution d'une instance sur la machine locale. Firefox en est un exemple. Soit fermez Firefox en cours d'exécution ou utilisez le paramètre de démarrage suivant pour commencer une instance distante sur la machine locale.

User terminal 48px.png
$ firefox -no-remote

Accélérer SSH

Vous pouvez grouper les sessions d'un même hôte en utilisant une seule connexion, ce qui permettra d’accélérer considérablement les ouvertures des sessions ultérieures, en ajourant ces lignes dans /etc/ssh/ssh_config sur l'hôte approprié:

ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p

Changer les ciphers utilisé par SSH pour les CPU les moins exigeants peut améliorer la vitesse. Dans cet aspect, les meilleurs choix sont arcfour and blowfish-cbc. S'il vous plait ne faites pas ça sauf si vous savez ce que vous faites; arcfour a un certain nombre de faiblesses connues. Pour les utiliser, exécutez SSH avec le drapeau "c", comme ça:

 # ssh -c arcfour,blowfish-cbc user@server-address

Pour les utiliser de manière permanente, ajoutez cette ligne dans /etc/ssh/ssh_config sur l'hôte approprié:

Ciphers arcfour,blowfish-cbc

Une autre option pour augmenter la vitesse c'est d'activer la compression avec le drapeau "C". Une solution permanente est d'ajouter cette ligne dans /etc/ssh/ssh_config sur l'hôte approprié:

Compression yes

Le temps de connexion à la session peut être réduit en utilisant le drapeau "4", qui contourne la vérification IPv6. Ceci peut être rendu permanent en ajoutant cette ligne dans /etc/ssh/ssh_config sur l'hôte approprié:

AddressFamily inet

Une autre façon de rendre ces changements permanents est de créer un alias dans ~/.bashrc:

alias ssh='ssh -C4c arcfour,blowfish-cbc'

Dépannage

Assurez-vous que votre chaîne DISPLAY est résoluble sur la machine distante:

ssh -X user@server-address
server$ echo $DISPLAY
localhost:10.0
server$ telnet localhost 6010
localhost/6010: lookup failure: Temporary failure in name resolution   

Peut être résolu en ajoutant localhost dans /etc/hosts.

Le montage d'un système de fichiers à distance avec SSHFS

Installer sshfs

Root terminal 48px.png
# pacman-g2 -S sshfs


Charger le module Fuse

Root terminal 48px.png
# modprobe fuse

Ajoutez fuse au tableau modules dans /etc/rc.conf pour le charger à chaque démarrage du système.

Monter un répertoire distant en utilisant sshfs

Root terminal 48px.png
# mkdir ~/remote_folder
Root terminal 48px.png
# sshfs USER@remote_server:/tmp ~/remote_folder


La commande ci-dessus provoquera le montage du répertoire /tmp se trouvant sur le serveur distant dans ~/remote_folder sur la machine locale. Copier un fichier dans ce répertoire donnera lieu à une copie transparente à travers le réseau via SFTP. Les mêmes possibilités d'édition directe du fichier, création ou suppression sont offertes.

Quand nous aurons fini de travailler avec le système de fichiers à distance, nous pourrons démonter le répertoire distant en exécutant:

Root terminal 48px.png
# fusermount -u ~/remote_folder


Si nous travaillons sur ce répertoire quotidiennement, il est bon de l'ajouter dans la table /etc/fstab. Cette méthode permettra de le monter manuellement(si l'option noauto ou de façon automatique lors démarrage du système sans avoir à spécifier l'emplacement distant à chaque fois. Voici un exemple d'entrée dans le tableau:

sshfs#USER@remote_server:/tmp /full/path/to/directory fuse    defaults,auto,allow_other    0 0

Garder la session active

Votre session ssh sera automatiquement déconnectée si elle est inactive. Pour garder la connexion active, ajoutez ceci dans ~/.ssh/config ou dans /etc/ssh/ssh_config sur le client.

ServerAliveInterval 120

Ceci enverra un signal "keep alive"(garder en vie) au serveur chaque 120 secondes.


A l'inverse, pour maintenir en vie les connexions entrantes, vous pouvez définir

ClientAliveInterval 120

(ou tout autre nombre supérieur à 0) dans /etc/ssh/sshd_config sur le serveur.

Sauvegarder les données de connexion dans .ssh/config

Chaque fois que vous voulez vous connecter à un serveur, vous avez généralement à taper au moins son adresse et votre nom d'utilisateur. Pour vous affranchir de ce travail de saisie sur les serveurs auxquels vous vous connectez régulièrement, vous pouvez utiliser le fichier $HOME/.ssh/config comme indiqué dans l'exemple suivant:

File: $HOME/.ssh/config
Host myserver
    HostName 123.123.123.123
    Port 12345
    User bob
Host other_server
    HostName test.something.org
    User alice
    CheckHostIP no
    Cipher blowfish


Maintenant vous pouvez vous connecter facilement au serveur en utilisant le nom que vous avez spécifié:

User terminal 48px.png
$ ssh myserver


Pour voir la liste complète des options possibles, consultez man ssh_config sur votre système ou ssh_config documentation sur le site web officiel.

Dépannage

Problème de connexion refusée

Est-ce que SSH s’exécute et écoute

netstat -tnlp | grep ssh

Si la commande ci-dessus n'affiche rien, SSH ne s’exécute pas. Vérifiez /var/log/messages pour les erreurs, etc.

Y a-t-il des règles de pare-feu qui bloquent la connexion ?

Réinitialisez vos règles iptables pour vous assurez qu'ils n'interfèrent pas:

Root terminal 48px.png
# service firewall stop


ou

 iptables -P INPUT ACCEPT
 iptables -P OUTPUT ACCEPT
 iptables -F INPUT
 iptables -F OUTPUT

Avez-vous autorisé SSH dans hosts.allow ?

Vérifiez que vous avez exécuté cette section correctement.

Est-ce que le trafic arrive à votre ordinateur

Démarrez un dump de trafic sur l'ordinateur où vous rencontrez des problèmes:

tcpdump -lnn -i any port ssh and tcp-syn

Cela devrait vous montrer quelques informations de base, attendez ensuite qu'un trafic correspondant arrive avant de l'afficher. Essayez votre connexion maintenant. Si vous ne voyez pas de sortie lorsque vous tentez de vous connecter, alors quelque chose en dehors de votre ordinateur bloque le trafic (Exemples : pare-feu matériel, routeur NAT, etc)

Voir aussi

Liens et références

Personal tools
Namespaces
Variants
Actions