Établir une connexion SSH entre Windows et Linux
Utilisez l'outil open source PuTTY pour établir une connexion SSH entre une machine Windows et un système Linux.
Le protocole Secure Shell (SSH) est la méthode la plus courante pour contrôler des machines distantes via la ligne de commande dans le monde Linux. SSH est un véritable original de Linux et gagne également en popularité dans le monde Windows. Il existe même une documentation officielle Windows pour SSH, qui couvre le contrôle des machines Windows à l'aide d'OpenSSH.
Cet article décrit comment établir une connexion SSH entre une machine Windows et un système Fedora 33 Linux à l'aide de l'outil open source populaire PuTTY.
Façons d'utiliser SSH
SSH utilise une architecture client-serveur, dans laquelle un client SSH établit une connexion à un serveur SSH. Le serveur SSH fonctionne généralement comme un démon système, c'est pourquoi il est souvent appelé SSHD. Il est difficile de trouver une distribution Linux qui ne soit pas fournie avec le démon SSH. Dans Fedora 33, le démon SSH est installé mais pas activé.
Vous pouvez utiliser SSH pour contrôler presque n'importe quelle machine Linux, qu'elle s'exécute en tant que machine virtuelle ou en tant que périphérique physique sur votre réseau. Un cas d'utilisation courant est la configuration sans tête de périphériques embarqués, notamment le Raspberry Pi. SSH peut également être utilisé pour tunneler d’autres services réseau. Le trafic SSH étant chiffré, vous pouvez utiliser SSH comme couche de transport pour tout protocole qui ne fournit pas de chiffrement par défaut.
Dans cet article, je vais expliquer quatre façons d'utiliser SSH : 1. comment configurer le démon SSH côté Linux, 2. comment configurer une connexion de console distante, 3. comment copier des fichiers sur le réseau, et 4. . comment tunneliser un certain protocole via SSH.
1. Configurez SSHD
Le système Linux (Fedora 33 dans mon cas) fait office de serveur SSH qui permet au client PuTTY SSH de se connecter. Tout d’abord, vérifiez la configuration SSH du démon. Le fichier de configuration se trouve dans /etc/ssh/sshd_config
et contient de nombreux commutateurs qui peuvent être activés en commentant les lignes associées :
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
# 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 override the
# default value.
Include /etc/ssh/sshd_config.d/*.conf
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
La configuration par défaut, où aucune ligne n'est sans commentaire, devrait fonctionner pour cet exemple. Vérifiez si le démon SSH est déjà en cours d'exécution en tapant systemctl status sshd
:
$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-06-22 11:12:05 UTC; 2 years 11 months ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 577 (sshd)
Tasks: 1 (limit: 26213)
CGroup: /system.slice/sshd.service
└─577 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-[...]
S'il est inactif, démarrez-le avec la commande systemctl start sshd
.
2. Configurer une console distante
Sous Windows, téléchargez le programme d'installation de PuTTY, puis installez-le et ouvrez-le. Vous devriez voir une fenêtre comme celle-ci :
(Stephan Avenwedde, CC BY-SA 4.0)
Dans le champ de saisie Nom d'hôte (ou adresse IP), saisissez les informations de connexion de votre système Linux. Dans cet exemple, j'ai configuré une machine virtuelle Fedora 33 avec une carte réseau pontée que je peux utiliser pour contacter le système à l'adresse IP 192.168.1.60
. Cliquez sur Ouvrir et une fenêtre comme celle-ci devrait s'ouvrir :
(Stephan Avenwedde, CC BY-SA 4.0)
Il s'agit d'un mécanisme de sécurité SSH destiné à empêcher une attaque de l'homme du milieu. L'empreinte digitale dans le message doit correspondre à la clé du système Linux à l'adresse /etc/ssh/ssh_host_ed25519_key.pub.
. PuTTY imprime la clé sous forme de hachage MD5. Pour vérifier son authenticité, passez au système Linux, ouvrez un shell de commande et saisissez :
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
Le résultat doit correspondre à l'empreinte digitale affichée par PuTTY :
$ ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
256 MD5:E4:5F:01:05:D0:F7:DC:A6:32 no comment (ED25519)
Confirmez l'alerte de sécurité PuTTY en cliquant sur Oui. L'empreinte digitale du système hôte se trouve désormais dans la liste de confiance de PuTTY, qui se trouve dans le registre Windows sous :
HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\SshHostKeys
Entrez vos identifiants de connexion corrects et vous devriez être sur la console dans votre répertoire personnel :
(Stephan Avenwedde, CC BY-SA 4.0)
3. Copiez des fichiers sur le réseau
En plus de la console distante, vous pouvez utiliser PuTTY pour transférer des fichiers via SSH. Regardez dans le dossier d'installation sous C:\\Program Files (x86)\\PuTTY
et recherchez pscp.exe
. Vous pouvez l'utiliser pour copier des fichiers vers et depuis un système Linux.
Ouvrez une invite de commande avec Windows + R et saisissez cmd. Copiez le fichier MyFile.txt
de votre répertoire personnel Linux vers votre répertoire personnel Windows en saisissant :
C:\"Program Files (x86)"\PuTTY\pscp.exe stephan@192.168.1.60:/home/stephan/MyFile.txt .
Pour copier un fichier du répertoire de base de Windows vers le répertoire de base de l'utilisateur Linux, saisissez :
C:\"Program Files (x86)"\PuTTY\pscp.exe MyFile.txt stephan@192.168.1.60:/home/stephan/
Comme vous l'avez peut-être déjà compris, la structure générale de la commande copy est la suivante :
pscp.exe <source> <target>
4. Tunnelier un protocole
Imaginez que vous disposez d'une machine Linux qui exécute un service HTTP pour une application arbitraire. Vous souhaitez accéder à ce service HTTP depuis votre machine Windows via Internet. Bien entendu, vous ne pouvez pas exposer le port TCP associé au public car :
- Le serveur exécute HTTP, pas HTTPS
- Il n'y a pas de gestion des utilisateurs ni de connexion du tout
À première vue, il semble impossible de mettre en place cette architecture sans produire une horrible faille de sécurité. Mais SSH facilite relativement facilement la mise en place d’une solution sûre pour ce scénario.
Je vais démontrer cette procédure avec mon projet logiciel Pythonic. S'exécutant en tant que conteneur, Pythonic expose deux ports TCP : le port TCP 7000 (éditeur principal) et le port TCP 8000 (l'éditeur de code source du serveur de code).
Pour installer Pythonic sur une machine Linux, exécutez :
podman pull pythonicautomation/pythonic
podman run -d -p 7000:7000 -p 8000:8000 pythonic
Basculez sur votre ordinateur Windows, ouvrez PuTTY et accédez à Connexion -> SSH -> Tunnels. Ajoutez les deux ports TCP que vous souhaitez transférer :
- Source :
7000
/Destination :localhost:7000
- Source :
8000
/Destination :localhost:8000
(Stephan Avenwedde, CC BY-SA 4.0)
Revenez ensuite à la section Session et établissez une connexion SSH comme vous l'avez fait auparavant. Ouvrez un navigateur et accédez à http://localhost:7000
; vous devriez voir un écran comme celui-ci :
(Stephan Avenwedde, CC BY-SA 4.0)
Vous avez configuré avec succès la redirection de port !
Avertissement : Si vous exposez le port TCP 22 au public, n'utilisez pas d'identifiants de connexion faciles à deviner. Vous recevrez des tentatives de connexion du monde entier essayant d'accéder à votre machine Linux avec des informations d'identification standard communes. Au lieu de cela, autorisez uniquement les clients connus à se connecter. Cette restriction de connexion peut être obtenue à l'aide de la cryptographie à clé publique, qui utilise une paire de clés dans laquelle la clé publique est stockée sur la machine hôte SSH et la clé privée reste chez le client.
Débogage
Si vous avez du mal à vous connecter à votre machine Linux, vous pouvez suivre les processus dans votre démon SSH avec :
journalctl -f -u sshd
Voici à quoi ressemble un processus de connexion ordinaire avec LogLevel DEBUG :
(Stephan Avenwedde, CC BY-SA 4.0)
Apprendre encore plus
Cet article a à peine effleuré la surface des façons d’utiliser SSH. Si vous recherchez des informations sur un cas d’utilisation spécifique, vous les trouverez probablement parmi les tonnes de didacticiels SSH disponibles sur Internet. J'utilise beaucoup PuTTY au travail car sa configuration simple et sa bonne interopérabilité entre les systèmes d'exploitation en font un outil couteau suisse pour les solutions de connectivité.