SSH : associer putty au type d'url 'ssh:\\'

| Reading time ~3 minutes

Introduction

Dans mon entreprise, nous utilisons depuis peu WhatsUp Gold pour la supervision de notre infrastructure, or cet outil a la particularité de générer des liens sous la forme ssh://host.example.com pour se connecter à un équipement depuis la map.

Liens SSH

1. Utilisation

De base Windows ne connait pas les liens SSH://IP.

L’un des outils le plus utilisé pour effectuer des connexions SSH est : PuTTY. On pourrait donc croire qu’en installant PuTTY, le format d’url SSH serait reconnu automatiquement par Windows.

Que nenni !!

2. Pourquoi ?

Car PuTTY ne reconnait pas le formalisme utilisé pour ce genre de liens SSH, PuTTY a fait le choix d’ignorer purement et simplement les liens SSH://IP. D’un autre côté, il ne semble pas y avoir de validation officielle pour ce format d’adresse.

a. Documentations

En effet, on ne trouve que des brouillons de RFC et donc l’URI (Uniform Resource Identifier) pour SSH (Scheme for Secure Shell) n’est pas validée.

b. Démo

Donc si je passe la commande suivante :

 .\putty.exe ssh:\\127.0.0.1

J’obtiens un joli message d’erreur…

PuttySSHError

3. Solutions ?

a. Quelques pistes

Pour résoudre ce problème, il y a quelques solutions :

  • Utiliser un autre outil
  • Utiliser une version modifiée de PuTTY
  • Utiliser un lanceur pour PuTTY

C’est cette dernière piste que j’ai choisi d’utiliser, un lanceur !! Celui-ci pouvait être dans n’importe quel langage… y compris powershell, mais pour des raisons de rapidité au lancement, j’ai préféré un bon vieux batch DOS.

b. Le batch DOS

Mais alors pourquoi un article DOS sur un blog Powershell ??? Car le lanceur ne fait pas tout, il y a aussi une configuration de Windows à faire et aussi créer le lanceur en fonction du chemin de PuTTY sur votre poste. Donc, j’ai créé un petit outil pour effectuer la mise en place de tout cela et devinez quoi. Cet outil, est en PowerShell !! CQFD

4. Le GUI Powershell

a. L’interface

Petit tour du propriaitaire :

Interface

Sur ce screenshot on constate que j’ai déjà une association pour les url SSH : WinSCP.exe En fait, avec WinScp, les liens fonctionnent car WinScp fait office de lanceur pour PuTTY …

Interface

A l’aide du bouton Bouton naviguez jusqu’à l’emplacement de votre putty.exe.

Interface

Il reste à cliquer sur Start

/!\ Attention : l’outil doit être lancé en admin, il va modifier la base de registre et déposer le lanceur à l’endroit de votre putty.exe

Interface

Une fois revenu sur Ready. dans la barre de status, on constate que l’association SSH actuelle à changer. Désormais pour les liens SSH://IP c’est mon lanceur puttyssh.cmd qui sera utilisé, et il se chargera de lancer PuTTY avec toutes les bonnes informations.

b. Les erreurs

Erreur

Pas de chemin indiqué pour putty.exe

Erreur

Le chemin indiqué pour putty.exe n’existe pas…

Erreur

Problème de mise en place de la config, relancez en admin

c. La compatibilité

Les liens suivants sont gérés :

5. Le test FINAL

Depuis, par exemple, internet Explorer, je rentre dans la barre d’URL : SSH://127.0.0.1 +RETURN

And voila !

PuttyOK

J’espère que l’article vous a plu et que l’outil pourra vous être utile. N’hésitez pas à me laisser des commentaires ainsi que des suggestions. Tout est toujours perfectible…

6. Téléchargement

sur mon GitHub : AssociateSSH

Annexe

1. Le code DOS

Pour ceux que cela intéresse, voici le contenu du fichier puttyssh.cmd sur mon poste.

Sur votre poste, il sera différent en fonction du chemin de putty.exe

@setlocal
@echo off 

set var=%1

echo.%var%|findstr /C:"@" >nul 2>&1
if not errorlevel 1 (
   echo Found
   for /f "tokens=1,2,3,4 delims=@/\" %%a in ("%var%") do (
set loginFull=%%b
set hostFull=%%c
   )
) else (
    echo Not found.
       for /f "tokens=1,2,3,4 delims=@/\" %%a in ("%var%") do (
set "loginFull="
set hostFull=%%b
       )
)

for /f "tokens=1,2 delims=:" %%a in ("%loginFull%") do set Login=%%a&set pass=%%b

for /f "tokens=1,2 delims=:" %%a in ("%hostFull%") do set ip=%%a&set port=%%b

IF NOT DEFINED port (set port=22)
IF NOT DEFINED login (set login=)
IF NOT DEFINED pass (set pass=)

if DEFINED pass ( 
    set param=-ssh %ip% -P %port% -pw "%pass%" -l "%login%" 
    ) else (
    set param=-ssh %ip% -P %port% -l "%login%" 
)

start /D "C:\Program Files (x86)\PuTTY" putty.exe %param%
)