Accès distant à l'aide de SSH

Utilisez des connexions SSH pour accéder en toute sécurité aux ressources, réseaux et applications distants.

Accès à distance aux services et réseaux à l'aide de SSH

Le transfert de port SSH, également appelé tunnel SSH, transporte de manière sécurisée les données via une connexion SSH chiffrée entre un système local et un système distant. Une fois qu'un tunnel SSH est établi, le client SSH écoute sur un port local spécifié et transmet tout trafic arrivant sur ce port via la connexion au port distant correspondant.

En chiffrant les données en transit, le transfert de port SSH garantit que les informations sensibles sont sécurisées et inaccessibles, permet un accès sécurisé aux services et réseaux distants sans exposition directe à Internet, et contourne les pare-feu et les restrictions réseau.

Les trois principaux types de transfert de port SSH sont les suivants :

Vous pouvez utiliser le transfert de port pour accéder à un service qui n'est pas exposé à l'interface du réseau public. Vous pouvez configurer un transfert de port local pour accéder à un service (tel qu'une base de données) sur un serveur distant. La base de données du serveur n'est pas exposée à l'interface du réseau public, mais vous pouvez créer un tunnel entre un ordinateur local et le port du serveur de base de données interne. Vous pouvez ensuite vous connecter à localhost et l'ensemble du trafic sera transféré sur la base de données distante via le tunnel SSH.

Vous pouvez utiliser le transfert de port inverse pour permettre à une personne extérieure au réseau local d'accéder à un service interne. Par exemple, vous pouvez montrer à un autre développeur une application Web que vous avez développée sur la machine locale. L'ordinateur n'ayant pas d'adresse IP publique, l'autre développeur ne peut pas accéder à l'application sur Internet. Toutefois, si vous avez accès à un serveur SSH distant, vous pouvez configurer le transfert de port inverse pour fournir l'accès développeur.

Configuration du transfert de port sur le serveur

Pour configurer le transfert de port SSH :

  1. A partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
  2. Modifiez le fichier /etc/ssh/sshd_config. Vérifiez au minimum les paramètres suivants :
    • AllowTCPForwarding

      Autorise le transfert de port TCP. Lorsqu'elle est omise, la valeur par défaut est yes, ce qui active les transferts de port TCP unique et le proxy SOCKS.

    • AllowStreamLocalForwarding

      Permet de transférer des sockets de domaine UNIX. Lorsqu'elle est omise, la valeur par défaut est yes.

Transfert de port local

Le transfert de port local via SSH met en correspondance un port local du système client avec un port distant du système serveur. Cette configuration vous permet d'accéder à des services sur le système distant qui sont autrement inaccessibles parce que les services peuvent être exécutés derrière un pare-feu ou ne pas écouter sur une interface de réseau public.

Pour créer un tunnel de transfert TCP direct, utilisez l'option ssh -L :

ssh -L <bind_address>:<port>:<destination>:<destination_port> <user>@<remote_ssh_server>
  • bind_address

    Facultatif et affecte une interface locale pour écouter les connexions. En cas d'omission, ssh effectue uniquement des liaisons sur les interfaces loopback. Pour lier toutes les interfaces, vous pouvez utiliser 0.0.0.0 ou ::.

  • port

    Numéro de port local. Vous pouvez utiliser tout numéro de port supérieur à 1024.

  • destination

    Adresse IP ou nom d'hôte de l'ordinateur de destination. Si la destination se trouve sur le serveur distant, vous pouvez utiliser localhost.

  • destination_port

    Port sur l'ordinateur de destination.

  • user@remote_ssh_server

    Adresse IP du serveur et de l'utilisateur SSH distant.

Par exemple :

ssh -L 8080:localhost:8888 user@192.168.1.20

Cela permet d'ouvrir une connexion SSH au serveur distant sur 192.168.1.20 et d'ouvrir un tunnel vers le port localhost 8888.

Transmission de port dynamique

Utilisez le transfert de port dynamique pour que le client SSH écoute sur un port de liaison spécifié et agisse en tant que serveur proxy SOCKS. Vous n'avez pas besoin d'indiquer un hôte de destination car toutes les connexions entrantes sur le port spécifié passent par le tunnel à un port dynamique sur l'ordinateur de destination.

Pour créer un port dynamique, utilisez l'option ssh -D.

ssh -D <bind_address>:<port> <user>@<remote_ssh_server>

Transfert de port inverse

Un tunnel inverse transfère toute connexion reçue sur le serveur SSH distant vers le réseau client local.

Pour créer un port inverse, utilisez l'option ssh -R.

  • Pour le transfert inverse de port local :
    ssh -R <bind_address>:<port>:<destination>:<destination_port> <user>@<remote_ssh_server>
  • Pour le transfert inverse dynamique de port :
    ssh -R <bind_address>:<port> <user>@<remote_ssh_server>

Accéder à distance aux applications basées sur X11 à l'aide de SSH

Le transfert X11 permet d'utiliser une connexion SSH pour ouvrir une application graphique basée sur X11 sur un système Oracle Linux distant et de l'utiliser à partir d'un système local. Le système distant n'a pas besoin d'avoir un serveur X11 ou un environnement de bureau graphique en cours d'exécution, mais le système local doit avoir un service compatible X11 en cours d'exécution.

Activer le transfert X11 sur le serveur distant

  1. A partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
  2. Activez X11Forwarding dans le fichier /etc/ssh/sshd_config.

    Si X11Forwarding est omis de /etc/ssh/sshd_config, la valeur par défaut est no. Pour activer le transfert X11, ajoutez une entrée qui définit la valeur de ce paramètre sur yes.

    X11Forwarding yes
  3. Installez les packages X11 :
    dnf install xorg-x11-xauth xorg-x11-fonts-\* xorg-x11-utils dbus-x11
    Si vous n'avez jamais exécuté d'application graphique sur le serveur distant, lors de la première connexion au serveur distant à l'aide du transfert X11, un message d'avertissement s'affiche :
    /usr/bin/xauth: file /home/user/.Xauthority does not exist

    Vous pouvez ignorer cet avertissement car le fichier .Xauthority est créé automatiquement.

  4. Redémarrez le service sshd pour que la modification prenne effet :
    sudo systemctl restart sshd.service

Ouvrez une application à distance à l'aide du transfert X11

  1. Connectez-vous au serveur distant à l'aide de SSH :
    ssh -X <user>@<server1.example.com>
    
    The authenticity of host 'remote-server (192.168.122.120)' can't be established.
    ECDSA key fingerprint is SHA256:uYwFlgtP/2YABMHKv5BtN7nHK9SHRL4hdYxAPJVK/kY.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
  2. Saisissez yes.
    Warning: Permanently added 'remote-server' (ECDSA) to the list of known hosts.
  3. Ouvrez une application graphique sur le serveur distant qui s'affiche sur le système local. Par exemple, pour exécuter l'éditeur de texte graphique gedit, entrez :
    gedit &
    L'ajout de l'esperluette (&) exécute l'application en arrière-plan, libérant ainsi le terminal pour les autres commandes.