SSH (Français)
From FrugalWiki
Dansk – Deutsch – English – Español – Français – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Polski – Português – Română – Slovenský – Suomi – Svenska – Türkçe – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어
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
Configurer SSH
Client
Le fichier de configuration se trouve et peut être édité dans /etc/ssh/ssh_config.
Un exemple de configuration:
# $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:
# $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.
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.
PasswordAuthentication no ChallengeResponseAuthentication no
Autoriser l'accès aux autres
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) :
Gestion du démon SSH
Pour démarrer/redémarrer/arrêter le démon, tapez ce qui suit:
Connexion au serveur
Pour vous connecter au serveur, exécutez:
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
Où "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" :)
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:
- Taper about:config dans la barre d'adresse de Firefox.
- Rechercher network.proxy.socks_remote_dns.
- Mettre la valeur à true.
- 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:
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:
- 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:
Si vous avez des erreurs de type "Cannot open display", essayez la commande suivante comme utilisateur non root:
La commande ci-dessus permettra à quiconque de rediriger des applications X11. Pour limiter la redirection à un hôte particulier:
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.
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
Charger le module 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
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:
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:
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é:
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:
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)