====== Tunnel SSH inversé vers RDP / VNC / SSH via un serveur tiers ======
La mise en place d'un tunnel SSH inversé se fait dans le contexte suivant:
  * On veut accéder à un poste dit "client" qui a un service SSH, RDP ou VNC activé mais pas disponible à l'extérieur de son réseau local
  * On dispose d'un serveur SSH disponible sur Internet
  * Le poste "client" peut se connecter sur un serveur SSH sur Internet
  * Le poste a partir duquel on veut accéder au "client" peut se connecter sur un serveur SSH sur Internet
===== Sur le serveur SSH tiers =====
  * On accepte les connections via authentification par clés publiques seulement
  * Un compte utilisateur assigné au poste "client" est configuré, sans shell. La clé publique correspondant au poste "client" y est installée.
  * Un compte "technicien" est configuré, sans shell (ou avec, selon). La clé publique correspondant au poste "technicien" y est installée.
  * Un compte "administrateur" est configuré, avec shell. La clé publique correspondant au poste "administrateur" y est installée.
===== Sur un client GNU/Linux =====
  * Les applications %%ssh%% et %%ssh-keygen%% disponibles lorsque le paquet %%openssh-client%% est installé
  * %%gSTM%% pour activer le tunnel sur demande (via le paquet ayant le même nom)
  * %%openssh-server%% installé et configuré pour accepter uniquement les connections par authentification par clés publiques
  * La clé publique du poste "technicien" est ajoutée à la fin du fichier .ssh/authorized_keys
Installation des applications:
sudo apt install openssh-server openssh-client gstm
Configuration du service SSH:
  - Dans %%/etc/ssh/sshd_config%%:PasswordAuthentication no 
RSAAuthentication yes
PubkeyAuthentication yes
===== À partir de Windows =====
Pour mettre en place un tunnel SSH vers un poste Windows (RDP) il faut:
  * Puttygen.exe (générateur de clés SSH) pour générer la paire de clés publique / privée permettant la connection
  * Putty.exe (client SSH) pour activer le tunnel sur demande
  * RDP actif et l'utilisateur configuré pour accepter les connections
Putty est disponible ici (prendre les versions 64-bit de préférence):
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
===== Génération de paire de clés SSH =====
==== GNU/Linux - SSH ====
  - À partir du compte utilisateur:
 mkdir ~/.ssh
 chmod 700 ~/.ssh
 ssh-keygen -t rsa -b 4096Vous pourrez indiquer une phrase secrète pour la paire de clés et confirmer leur emplacement. Cette phrase secrète protégera votre clé privée pendant son stockage:Generating public/private rsa key pair.
Enter file in which to save the key (/home/b/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/b/.ssh/id_rsa.
Your public key has been saved in /home/b/.ssh/id_rsa.pub.La clé publique sera disponible dans le fichier %%.ssh/id_rsa.pub%% dans le dossier de l' utilisateur.
==== Windows - Putty ====
  - Démarrer puttygen.exe
  - Accepter l'avertissement d'installation Windows
  - *Parameters > Type of key*: RSA
  - *Parameters > Number of bits*: 4096
  - *Actions > Generate* Important: il faut bouger la souris dans la région blanche!
  - Une fois terminé, assigner un mot de passe
    - À partir d'un poste GNU/Linux, générer un mot de passe (avec pwqgen par exemple)
    - Mettre le mot de passe dans *Key passphrase* et *Confirm passphrase*
  - Cliquer dans la section *Key > Public key*, choisir *Tout sélectionner* et coller cette information dans un nouveau fichier *PCXXX-NOM_Client_SSH-pub.txt* - mettre dans *Documents*
  - Actions > Save the generated key > Save private key > PCXXX-NOM_Client_SSH - mettre dans Documents, l'extension est .ppk par défaut (note: pour fins de backup)
  - Demander à un administrateur d'ajouter l'accès au compte SSH correspondant sur $GW_HOSTNAME à l'aide de la clé publique SSH enregistrée dans *Documents*
===== Configuration du tunnel SSH (session Putty) =====
  - Démarrer putty.exe
  - Dans *Basic settings*:
    - *Host Name*: $GW_HOSTNAME (nom de domaine de la passerelle SSH cible)
    - *Port*: 22 (ou autre)
    - *Save Sessions*: PCXXX-NOM_Tunnel_RDP (caractères de soulignement importants)
    - Click *Save*
  - Dans *Connection*:
    - *Seconds between keepalives (0 to turnoff)*: 30
    - *Data > Login Details > Auto-login username*: $USERNAME (nom d'utilisateur GNU/Linux fourni par l'admin)
    - *SSH > Protocol options > Don't start a shell or command at all* (cocher)
    - *SSH > Protocol options > Enable compression*
    - *SSH > Tunnels > Add new forwarded port > Source port*: 2000 (ou autre)
    - *SSH > Tunnels > Add new forwarded port > Destination*: 192.168.X.XXX:3389 (IP du système Windows 7 cible, port RDP)
  - Click *Add*
  - Click sur *Session* et enregistrer la session
  - SSH > Auth > Private key file for authentication > Pointer vers Documents/fichier .ppk de la clé privée
  - Retourner à Session, clicker 1 fois sur le profil et sauvegarder
===== Tester le tunnel et la connection RDP =====
  - Démarrer putty.exe
  - Session > Load, save or delete a stored session > Saved sessions, click 1 fois sur le profil, ensuite click Load
  - Click Open, accepter l'avertissement clé SSH
  - Une fenêtre noire Putty devrait s'ouvrir, entrer le mot de passe de la clé SSH
  - Ouvrir l'outil RDP de Windows
  - Spécifier 127.0.0.1:2000 (ou autre port au lieu de 2000) comme adresse, tester avec les informations RDP du poste serveur
===== Faire le raccourci mRemoteNG =====
Installer "mRemoteNG":https://mremoteng.org/
  - Ajouter le tunnel (connection SSH2): *Fichier > Nouvelle connection* (ou Ctrl-N)
    - Affichage > Nom: PCXXX-NOM SSH Tunnel
    - Affichage > Panneau: PCXXX-NOM SSH Tunnel
    - Connexion > Nom d'hôte/IP: $GW_HOSTNAME (nom du serveur passerelle)
    - Connexion > Nom d'utilisateur: fourni par l'admin système
    - Connexion > Mot de passe: celui qui protégeait la clé SSH
    - Protocole > Protocole: SSH2
    - Protocole > Port: 22 (ou autre)
   - Session Putty > choisir celle enregistrée lors de la création de session
  - Ajouter la connection RDP: *Fichier > Nouvelle connection* (ou Ctrl-N)
    - Affichage > Nom: PCXXX-NOM accès RDP
    - Affichage > Panneau: PCXXX-NOM accès RDP
    - Connexion > Nom d'hôte/IP: 127.0.0.1
    - Connexion > Nom d'utilisateur: celui sur le PC Windows cible
    - Connexion > Mot de passe: celui sur le PC Windows cible
    - Protocole > Protocole: RDP
    - Protocole > Port: 2000 (ou autre)
    - Session Putty > choisir celle enregistrée lors de la création de session