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 de même acabit ne se rendent pas compte que leur mot de passe est transmis à travers les réseaux en clair ce qui constitue une faille évidente dans la sécurité de leur réseau.
OpenSSH chiffre tout le trafic (mots de passe y compris), via une combinaison astucieuse de cryptage symétrique et asymétrique. OpenSSH fournit également d'autres méthodes d'authentifications alternatives au traditionnel mot de passe.
Comme son nom l'indique, OpenSSH est développé dans le cadre du projet OpenBSD
SSH remplace de manière sécurisée:
Si vous voulez accéder à votre PC depuis un autre ordinateur, vous devez d'abord transformer votre PC en serveur.
Pour ça, sur la bécane distante à accéder (le serveur), passez en root et tapez :
ufw status
et voyez si le port 22 est ALLOW (ou ALLOW IN, sans importance).
S'il n'est pas en ALLOW IN ou s'il n’apparaît pas dans le 'status', voyez la page UFW pour connaître le fonctionnement du pare-feu, ou, plus confortable, utilisez Gufw : interface graphique du pare-feu UFW
installez le paquet openssh-server sur votre poste.
Par défaut, il se lance au démarrage.
Pour l'activer après une fausse manipulation :
sudo service ssh start
Pour l'arrêter :
sudo service ssh stop
Sur le poste client (qui va prendre l'accès à distance) openssh-client, installé par défaut sous Ubuntu, doit être présent.
Si vous devez prendre le contrôle depuis un poste équipé de Windows vous pouvez installer PuTTY qui est disponible sous licence MIT (une licence libre comparable à la licence BSD).
Si vous voulez établir une connexion ssh depuis un smartphone Blackberry®, vous pouvez installer bbssh, qui est sous licence libre GPLv2, les sources sont fournies.
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 qui sera utilisé par défaut.
Pour se connecter avec ssh en ipv6 depuis un terminal, écrire sans crochet :
ssh -6 <nom>@<adresse ipv6>
soit par exemple pour un lien Internet :
ssh -6 alfred@2a01:e35:2431::2e57
ssh utilisateur@nom_machine
à partir du moment où celui-ci est résolu par votre machine.
Cela peut se faire sur le réseau local par le fichier /etc/hosts, éventuellement distribué d'un serveur vers les clients locaux au travers de NIS, ou bien par un service de DNS si vous accédez à une machine distante (serveur loué) pour lequel vous avez enregistré un nom de domaine.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Please contact your system administrator. Add correct host key in /home/<vous>/.ssh/known_hosts to get rid of this message. Offending key in /home/<vous>/.ssh/known_hosts:4 RSA host key for <ip> has changed and you have requested strict checking. Host key verification failed.
Soit l'information est exacte et une machine a été corrompue, ou bien il s'agit juste d'un changement de clé(réinstallation par exemple) et dans ce cas il faut effacer les entrées dans le fichier .ssh/known_hosts de votre compte. Avant la chose était relativement simple, la clé était directement associée au nom ou à l'IP de la machine cible. Ce n'est plus le cas à présent où elle est associée par UUID rendant quasiment impossible l'identification visuelle de la ligne concernée. Mais ssh étant sympathique, il vous indique quelle est la ligne du fichier concernée (dans l'exemple précédent "Offending key…. :4" → la clé en erreur est située ligne 4.
Il existe une méthode plus subtile en employant la commande suivante :
ssh-keygen -R <ip>
Vous pourrez ainsi effacer seulement l'adresse IP concernée et relancer un ssh.
La commande ssh offre un joker inattendu : on peut exécuter des applications X-Windows à distance. Cela est bien pratique pour travailler loin de chez soi, partager une machine ou simplement faire de l'entretien.
ssh -X nomUtilisateur@Ipserver
L'option -X permet la déportation de l'application X-Window (affichage graphique à distance). Ceci est possible grâce aux fonctions de tunneling réseau dont dispose SSH. N'oubliez pas que Ubuntu (Unix en général) travaille en mode client/serveur et cela s'applique aussi à l'affichage géré par X-Window.
ssh -x nomUtilisateur@Ipserver
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>@<ipaddressDistant>:<DestinationDirectory> scp -6 <élément> <nom>@[addresse ipv6]:<destination>
Ou en termes profanes, si l'on désirait copier un fichier d'un ordinateur à un autre, il faudrait procéder de cette manière :
scp fichier.txt hornbeck@192.168.1.103:/home/hornbeck scp -6 fichier.txt albertine@[2a01:e35:2431::2a34]:/home/albertine
Ou copier un répertoire vers un ordinateur :
scp -r répertoire hornbeck@192.168.1.103:/home/hornbeck/ scp -6r répertoire/ albertine@[2a01:e35:2431::2a34]:/home/albertine
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
Dans le cas où le port SSH du serveur ne serait pas le port par défaut (22), il faut indiquer le port distant à utiliser :
scp -P port fichier.txt hornbeck@192.168.1.103:/home/hornbeck
SFTP est une autre méthode pour accéder à ses fichiers via SSH, au lieu de jouer sur un plan fichier par fichier, il est possible via cette méthode de naviguer dans ses fichiers grâce à un client SFTP.
En utilisant le navigateur de fichier Nautilus, vous pouvez également accéder aux emplacements à distance par l'intermédiaire de SSH pour passer en revue, modifier et copier des fichiers. Ouvrez Nautilus, puis dans la fenêtre emplacement (Ctrl–L), entrez l'URL suivante (remplacez username, hostname et port 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 fichiers 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/
Il est également possible d'y avoir accès dans Nautilus par : Fichier > Se connecter à un serveur… et choisir le Type de service « ssh ».
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 boîte de dialogue apparaîtra 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.
Le nouveau navigateur de KDE permet de faire ça très simplement. Cliquez sur le raccourci Réseau, puis Ajoutez un dossier réseau. Remplissez ensuite les champs demandés (n'oubliez pas que votre adresse se trouve par ifconfig, à inet adr:xxx.xxx.x.xx dans eth1 en général), et pensez à mettre la racine (/) comme dossier d'accès pour pouvoir rentrer sur l'intégralité de l'ordinateur distant.
Il est également possible de rentrer l'adresse et d'enregistrer le lien dans ses emplacements favoris :
sftp://username@hostname:port
Parce qu'il est parfois nécessaire de faire un transfert de fichier à partir d'une machine sous MS Windows, il existe un logiciel libre nommé WinSCP qui permet de faire du SFTP (transfert de fichier par SSH) avec une interface semblable à celle des clients FTP.
Sans avoir à chercher trop loin, FileZilla, le client FTP compatible Linux, Windows et Mac OS X, permet aussi la connexion à un serveur SFTP (SSH File Transfer Protocol) depuis la version 3.
sshfs est un outil permettant d'utiliser le protocole ssh comme un système de fichier et ainsi monter un répertoire distant à travers le protocole ssh pour y accéder comme n'importe quel répertoire local à la manière d'un partage NFS; mais sécurisé !
Voir la page sshFS.
L'authentification par mot de passe (transmis chiffré) est le mode d'identification par défaut.
Suite à l'installation du paquet openssh-server il peut parfois être nécessaire de modifier le fichier de configuration /etc/ssh/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 simplement 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
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 et connaître le mot de passe de cette clé).
Ceci peut permettre par exemple :
À moins que vous n'ayez déjà un couple de clés, vous devez d'abord en créer : exemple pour une clé utilisant le protocole de cryptage DSA. 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 : ~/.ssh, et ne changez pas le nom) puis de choisir une passphrase (phrase de reconnaissance). Bien que non obligatoire, l'utilisation d'une passphrase est recommandée pour protéger votre clé privée. En effet toute personne qui obtiendrait l'accès à votre clé privée (non protégée) aurait alors vos permissions sur d'autres ordinateurs. Veuillez prendre un instant et choisissez une très bonne passphrase.
Votre clef publique a été créée avec la nouvelle clé privée. Elles sont habituellement localisées dans le dossier caché ~/.ssh/id_dsa.pub pour la clé publique et ~/.ssh/id_dsa pour la clé privée.
Il faut maintenant envoyer au serveur votre clé publique pour qu'il puisse vous chiffrer des messages.
L'utilisateur distant doit avoir cette clé (c'est une ligne de caractères en code ASCII) dans son fichier de clés d'autorisation situé à ~/.ssh/authorized_keys sur le système distant. Employez la commande ssh-copy-id.
ssh-copy-id est un script qui utilise ssh pour se connecter à une machine à distance en utilisant le mot de passe de l'utilisateur. L'authentification par mot de passe "PasswordAuthentication yes" doit donc être autorisée dans le fichier de configuration du serveur ssh (par défaut sur Ubuntu). Il change également les permissions des répertoires : ~/.ssh, et ~/.ssh/authorized keys de l'hôte distant pour enlever l'accès en écriture du groupe (qui vous empêcherait de vous connecter si le serveur distant ssh a "StrictModes yes" dans son fichier de configuration, ce qui est le cas par défaut sur Ubuntu).
ssh-copy-id -i ~/.ssh/id_dsa.pub <username>@<ipaddress>
ou si le port est différent du port standard 22 :
ssh-copy-id -i ~/.ssh/id_dsa.pub "<username>@<ipaddress> -p <num_port>"
Vous devrez alors donner le mot de passe utilisateur de cet ordinateur. Après que votre clé publique ait été ajoutée, vous devenez un hôte de confiance.
Si l'authentification par mot de passe est désactivée, alors vous aurez besoin de copier-coller votre clé suivant un autre moyen.
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 <username>@<ipaddress> -p <num_port>
Dorénavant n'utilisez plus votre mot de passe mais votre passphrase pour vous connecter. Cette-ci 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 par rapport à l'authentification par mot de passe classique :
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.
/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
tail /var/log/auth.log
Plus d'indications vous seront données dedans, et si la ligne suivante apparaît :
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
La meilleur solution est de créer des liens virtuels vers un dossier qui n'est pas soumis au chiffrage/déchiffrage comme expliqué ici : https://rohieb.wordpress.com/2010/10/09/84/
Lorsque l'on se connecte à plusieurs serveurs, certains avec clé cryptée, d'autres avec clé en clair, il faut pouvoir indiquer à ssh quelle clé on veut utiliser pour la connexion.
Pour indiquer au client ssh la clé qu'il doit utiliser pour chacun des serveurs il faut créer le fichier ~/.ssh/config (ou /etc/ssh/ssh_config pour tous les utilisateurs de la machine) dans lequel il faut spécifier pour chacun des serveurs la clé qui doit être utilisée :
Host adresse-serveur-sans-passphrase.com User votreutilisateur IdentityFile ~/.ssh/key-sans-passphrase Host adresse-serveur-avec-passphrase.com User votreutilisateur IdentityFile ~/.ssh/key-avec-passphrase
Ce qui donnerait : IdentityFile ~/.ssh/id_ecdsa.pub pour le premier, et: IdentityFile ~/.ssh/id_dsa.pub pour le second
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.
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.
PasswordAuthentication no
Passez de yes à no pour interdire l'utilisation du mot de passe et forcer l'usage de jeux de clefs public/privé (plus sûr).
Ne pas oublier: "UsePAM no" sinon le mot de passe sera toujours demandé.
Il peut arriver (en entreprise, dans un cybercafé…) qu'il y ait un mandataire (« proxy ») HTTP. Pour initier une connexion vers un poste de l'extérieur il est nécessaire d'utiliser l'outil connect-proxy.
Installer le paquet connect-proxy.
éditer le fichier /etc/ssh/ssh_config pour y ajouter les adresses IP extérieures :
host ip_du_pc_distant ProxyCommand connect-proxy -H adresse.du_proxy:port %h %p
Remplacer ip_du_pc_distant et adresse.du_proxy:port par ce qui convient. Vous pouvez maintenant vous connecter à travers votre mandataire en toute transparence, avec la commande 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.
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és (ssh-keygen -t dsa) et quand on vous demande de rentrer la passphrase tapez juste sur la touche « Entrée ». Ceci fera que votre clé privée ne sera pas protégée. Ajoutez la clé publique de l'autre ordinateur dans le fichier authorized_keys (« 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.
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 ?
ssh-add ».À la prochaine ouverture de session, vous devrez taper votre passphrase.
Vous pouvez :
openssh-server),Tunnéliser sa connexion Web est très utile dans quelques situations :
On va donc installer le serveur de médiation Squid (serveur 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 mandataire distant (le serveur sous Ubuntu) qui se connectera aux sites Web et renverra le résultat à votre navigateur.
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 choisi pour la règle et 192.168.1.1 est l'adresse IP locale de l'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.
La partie précédente consiste à installer un mandataire HTTP sur le serveur et de s'y connecter via SSH. Cependant, SSH lui-même peut jouer le rôle de mandataire, ce qui évite l'installation d'un logiciel supplémentaire.
Il n'y a en principe rien à faire. Cette fonctionnalité est activée par défaut sous Ubuntu.
Cette fois, le mandataire est de type SOCKS (à prendre en compte lors de la configuration du navigateur).
La configuration est la même que dans la partie précédente, sauf qu'il faut cocher la case "dynamic". La case "destination" n'est pas prise en compte et peut rester vide.
Utiliser la commande ssh avec l'option -D :
# Ouverture d'un tunnel ssh (sur le port 1234 local) vers un serveur qui autorise la connexion # le port (1234 dans cet exemple) est choisi arbitrairement, tant qu'il n'est pas utilisé pour autre chose ssh -D 1234 monuser@monserver.net
Configurer ensuite le navigateur, gestionnaire de courrier, etc., pour utiliser un mandataire de type SOCKS 5, adresse : localhost, port: 1234 (selon ce que vous avez utilisé ci dessus).
La connexion fonctionnera tant que le tunnel restera ouvert (si vous fermez le terminal ayant servi à ouvrir le tunnel, vous fermerez le tunnel). Pour vous assurer que le tunnel remplit son office, affichez une page telle que http://www.monip.org et constatez que l'IP affichée n'est pas la même que lorsque vous naviguez sans mandataire.
Il est possible aussi d'utiliser un navigateur passant par le tunnel et un autre navigateur sortant directement.
Il existe une petite application graphique bien pratique pour gérer les tunnels SSH : au lieu de les recréer chaque fois on utilise gSTM (Graphical SSH Tunnel Manager).
Il est intéressant de pouvoir accéder à des ressources réseau locales (RDP, VNC, Administration périphérique réseau comme les box, etc.) sans pour autant rendre ces périphériques directement accessibles depuis Internet. SSH permet l'accès à ces ressources comme si l'on était en local (une sorte de réseau privé virtuel).
Prenons un exemple.
Donc nous avons un réseau avec une machine sous Windows (XP, Vista…) avec comme adresse locale 192.168.1.2 où TSE est activé mais accessible uniquement en local, un serveur ssh sous Ubuntu avec comme IP locale 192.168.1.3, et une Livebox (ou autre) dont seul le port ssh (22) est « natté » pour un accès au serveur ssh depuis l'extérieur.
Nous voulons depuis l'extérieur accéder à la machine Windows via RDP.
Nous allons pour cela utiliser la tunnélisation. À partir de votre station depuis l'extérieur on va tunnéliser la connexion RDP de la station Windows au travers du serveur ssh :
$ ssh -L 3389:192.168.1.2:3389 username@IP_Publique_Box
Il suffit ensuite d'ouvrir le terminal serveur client sur votre machine et de se connecter à localhost.
Nous pouvons de la même façon accéder à la configuration de notre Box sans pour autant devoir la rendre accessible depuis Internet (attention seul root peut faire suivre le port 80) :
# ssh -L 80:192.168.1.1:80 username@IP_Publique_Box
Puis en ouvrant son navigateur préféré et en entrant comme adresse http://localhost
Pour accéder à un serveur par rebond sur un serveur ssh intermédiaire, on réalise normalement 2 connexions ssh :
Ceci est fastidieux lorsqu'on doit réaliser cette opération régulièrement. SSH peut cependant faciliter cette opération :
$ ssh <srv_intermédiaire> ssh <srv_final>
Pseudo-terminal will not be allocated because stdin is not a terminal., rajouter -t au ssh du serveur intermédiaire, ce qui donne :
$ ssh -t <srv_intermédiaire> ssh <srv_final>
ProxyCommand qui indique à ssh une commande à utiliser pour ensuite pouvoir parler directement avec le serveur finalHost <srv_final>
ProxyCommand ssh <srv_intermédiaire> nc %h %p
nc (netcat) qui permet de se connecter sur le port ssh du serveur final et établit juste un « socket » entre le client et le serveur final.nc (netcat) doit donc être présente sur le serveur intermédiaire
ProxyCommand qui indique à ssh une commande à utiliser pour ensuite pouvoir parler directement avec le serveur finalHost <srv_final>
ProxyCommand ssh -W %h:%p <srv_intermédiaire>
nc (netcat) n'a pas besoin d'être disponible sur le serveur intermédiaire.
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)