0% ont trouvé ce document utile (0 vote)
34 vues3 pages

Feuille 8

Transféré par

electro-ub ub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • SSH,
  • clés SSH,
  • environnement de développement,
  • accès distant,
  • tunnel SSH,
  • ssh-agent,
  • trafic réseau,
  • fichier de configuration,
  • tunnel dynamique,
  • authentification
0% ont trouvé ce document utile (0 vote)
34 vues3 pages

Feuille 8

Transféré par

electro-ub ub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • SSH,
  • clés SSH,
  • environnement de développement,
  • accès distant,
  • tunnel SSH,
  • ssh-agent,
  • trafic réseau,
  • fichier de configuration,
  • tunnel dynamique,
  • authentification

Université Bordeaux année 2020-2021

Master Informatique/Master CSI Admin. des Réseaux

TD - Utilisation de ssh

Le but de ce TP est de maitriser les fonctionnalités du protocole ssh. La topologie réseau peut
être obtenue en lançant le script de démarrage /net/stockage/aguermou/AR/TP/8/qemunet.sh
en lui fournissant la description de la topologie réseau à l’aide de l’option -t ainsi que l’archive
contenant la configuration initialte des machines à l’aide de l’option -a. Ceci revient à lancer les
commandes suivantes :
— au cremi :
# cd /net/stockage/aguermou/AR/TP/8/; ./qemunet.sh -x -t topology -a archive_tp8.tgz
— à distance :
# cd /net/stockage/aguermou/AR/TP/8/; ./qemunet.sh -d tmux -b -t topology -a archive_tp8.tgz
# tmux a
Toutes les actions qui vous sont demandées dans la feuille devront être (sauf exception) faites
en utilisant un utilisateur autre que root. Sur chaque machine il y a utilisateur ayant comme login
(resp. mot de passe) le nom de la machine : Par exemple, sur dt il y a un utilisateur dt ayant
comme login (resp. mot de passe) dt.

Utilisation basique
1. Pour permettre une authentification sans mot de passe avec ssh il faut au préalable posi-
tionner la clé publique correspondant au client (opeth) sur la machine serveur (immortal).
Pour ce faire, il faut :
(a) Générer (sur la machine cliente) le couple clé privée/clé publique se fait via la com-
mande ssh-keygen. Ceci a pour effet de créer le fichier id_rsa (resp id_rsa.pub) qui
correspond à la clé privée (resp. publique) dans le dossier $HOME/.ssh.
(b) Copier depuis la machine cliente la clé publique (.ssh/id_rsa.pub) sur la machine
serveur. Ceci pourra être fait à l’aide de scp.
(c) Concaténer la clé publique copiée au fichier $HOME/.ssh/authorized_keys. $HOME cor-
respond ici au dossier personnel de l’utilisateur avec lequel on se connecte sur le serveur.
Remarque : Dans le cas ou une passphrase a été utilisée pour protéger la clé privée,
cette dernière vous sera demandée à chaque utilisation de la clé. Pour éviter celà, il sera
nécessaire d’utiliser un ssh-agent.
2. On va essayer maintenant de mettre en place un alias à une connexion ssh pré-définie. Pour
ce faire, il suffit d’éditer le fichier .ssh/config sur le machine cliente et y ajouter une
section ayant la structure suivante :
Host example
Hostname addr_immortal
User <username>

Ainsi il sera possible d’utiliser maintenant ssh example au lieu de ssh <username>@addr_immortal.
3. Si nous voulons maintenant nous connecter à la machine grave via la machine immortal,
il faut ajouter une nouvelle section dont le champs Hostname contient l’adresse de grave.
Puis, il est nécessaire d’ajouter l’option ProxyJump pour dire qu’on veut accéder à grave
via immortal :

1
Host example2
Hostname addr_grave
User <username>
ProxyJump example #example correspond au nom de la section d’immortal

Ces alias seront aussi utilisable pour la commande scp.

Tunnels
Il y a deux façons de créer un tunnel SSH, le transfert de port local et distant. La meilleure
façon de les comprendre est de commencer par un exemple, commençons par le transfert
de port local.

Connexion telnet

port 5555 port 22 port 23

opeth Réseau immortal Réseau dt


Réseau

Client telnet Serveur telnet


Tunnel ssh communication en clair

Figure 1 – Transfert de port local.

1. Imaginez que vous êtes sur un réseau privé (sur opeth par exemple) qui ne permette pas
les connexions à un serveur spécifique (dt dans notre cas). Pour contourner ce problème,
nous pouvons créer un tunnel à travers un serveur (immortal dans notre cas) qui n’est pas
dans notre réseau et qui peut donc accéder à dt (voir Figure 1).
ssh -N -f -L 5555:addr_dt:23 <username>@addr_immortal

L’option clé est le -L qui dit que nous faisons un transfert de port local. Ensuite, il est
dit que nous transférons notre port local 5555 vers dt sur le port 23, qui est le port par
défaut pour telnet. Vous pouvez maintenant vous connecter à dt en utilisant le tunnel via
la commande suivante :
telnet localhost 5555

Dans ce contexte, toute connexion locale sur le port 5555 sera transférée automatiquement
sur le port 23 de la machine dt.
2. Nous allons maintenant nous intéresser au deuxième type de transfert de port : le transfert
de port distant. Encore une fois, il est préférable de l’expliquer à l’aide d’un exemple.
Supposons que vous développez une application web sur votre machine locale (opeth), et
que vous aimeriez la montrer à un ami. Malheureusement, votre administrateur ne vous a
pas fourni d’adresse IP publique, il n’est donc pas possible de se connecter directement à
votre machine via Internet.
Pour résoudre ce problème à l’aide de ssh, vous avez besoin d’avoir accès un autre ordinateur
(immortal), qui est lui accessible depuis internet et qui a un serveur ssh (voir Figure 2).
Il peut s’agir de n’importe quel serveur sur Internet, à condition que vous puissiez vous y
connecter à l’aide de ssh. Nous allons donc demander à ssh de créer un tunnel qui ouvre
un nouveau port sur le serveur, et le connecter à un port local sur votre machine. Ceci peut
être fait à l’aide de la commande suivante.

2
Connexion telnet

port 23 port 22 port 5555

opeth Réseau immortal Réseau dt


Réseau

serveur telnet client telnet


Tunnel ssh communication en clair

Figure 2 – Transfert de port distant.

ssh -N -f -R 5555:localhost:23 <username>@addr_immortal

La commande peut être interprétée de la manière suivante : Toute connexion sur le port
5555 d’immortal sera redirigée vers le port 23 de la machine locale ce qui rend le serveur
écoutant sur le port 23 de la machine locale accessible depuis l’extérieur.
Pour que ceci soit fonctionnel, il faudra au préalable positionner l’option GatewayPorts à
yes dans /etc/ssh/sshd_config sur le machine qui sert de pivot (immortal dans notre
cas) puis redémarrer le démon ssh.
port 80

dt
grave

Serveur http
port 5555 port 22 port 23

opeth Réseau immortal Réseau dt


Réseau

Client Serveur telnet


Tunnel ssh

Figure 3 – Transfert de port dynamique.

3. Enfin le tunnel le plus avancé est le tunnel dynamique (voir Figure 3). Il sert à transférer
via une connexion ssh pré-établie n’importe quelle connexion TCP (contrairement aux cas
précédent). La commande pour établir un tunnel dynamique est la suivante :
ssh -f -N -D <port> <username>@addr_immortal

Le port dans la commande correspond au point d’accès au tunnel sur la machine locale.
Ensuite pour utiliser le tunnel de manière dynamique il est nécessaire d’utiliser un outil
tel que proxychains 1 qui permet de forcer n’importe quelle connexion TCP établie par
n’importe quelle application à passer par un proxy SOCKS (ssh étant aussi un serveur SOCKS).
Deux méthodes sont possibles pour faire en sorte que proxychains redirige le trafic vers le
port d’entrée du tunnel :
— Modifier le fichier /etc/proxychains.conf pour spécifier le port local utilisé à l’étape
précédente (i.e. proxychains doit envoyer le traffic sur le port local correspondant au
tunnel ssh établi à l’étape précédente). De la documentation relative à cette configura-
tion est fournie sur le site suivante : https://netsec.ws/?p=278. Enfin, Pour faire en
sorte qu’une commande se basant sur des connexions tcp utilise le tunnel ssh que vous
avez créé, il suffit de la préfixer avec proxychains.
— Soit en positionnant la variable d’environnement PROXYCHAINS_SOCKS5 à la valeur du
numéro de port d’entrée du tunnel avant tout appel a proxychains. Par exemple :
PROXYCHAINS_SOCKS5=<port> proxychains <cmd>.

1. https://github.com/haad/proxychains

Vous aimerez peut-être aussi