# WinSCP & remote file transfer A series of 8 article(s), in reading order. # KeePass - Remplacer le champ URL > Découvrez comment détourner le champ URL de KeePass pour lancer des programmes comme PuTTY, WinSCP ou une connexion Bureau à distance (RDP) directement depuis vos entrées. --- ![KeePass - Remplacer le champ URL](/img/v2/keepass.webp) **TL;DR** Cet article montre comment détourner le champ `URL` de KeePass pour lancer des programmes externes au lieu d'un navigateur web, à l'aide du préfixe `cmd://` et des placeholders d'entrée : démarrer PuTTY avec les identifiants enregistrés, ouvrir WinSCP directement sur un chemin SFTP ou lancer une connexion Bureau à distance Windows (`mstsc.exe`) vers un host enregistré. Le champ `url` peut aussi servir à démarrer un programme et donc ne pas contenir uniquement une URL valide. La documentation officielle se trouve ici : . ## Démarrer PuTTY depuis KeePass {#start-putty-from-keepass} Si PuTTY n'est pas installé sur votre machine, téléchargez-le depuis . Vous n'avez besoin que du fichier `putty.exe`. *Si PuTTY refuse votre session enregistrée avec une erreur d'authentification, voyez [Fatal error was starting Putty after having saved settings](/blog/putty-no-supported-authentication-methods).* Téléchargez-le et enregistrez `putty.exe` dans un répertoire présent dans votre PATH. Pour cela, même si vous n'êtes pas administrateur de votre machine, démarrez simplement une console MS-DOS et lancez `echo %PATH%`. Vous verrez alors la liste des répertoires déjà présents et vous choisirez celui où vous pouvez copier un nouveau fichier. Copiez ensuite `putty.exe` dans ce dossier. Désormais, vous pouvez lancer `putty.exe` depuis n'importe où. Mettez à jour votre entrée KeePass et donnez à la propriété `URL` l'instruction suivante : `cmd://putty.exe -load "Default Settings" {S:host} -l {USERNAME} -pw {PASSWORD}` > **Caution:** > > Assurez-vous d'avoir rempli la propriété avancée `host`. ## Démarrer WinSCP depuis KeePass {#start-winscp-from-keepass} > Si vous souhaitez ouvrir WinSCP (voyez aussi [WinSCP - Synchronize host and remote](/blog/winscp-synchronize-both)) et consulter des fichiers, vous pouvez y arriver en mettant à jour votre entrée KeePass et en donnant à la propriété `URL` l'instruction suivante : `cmd://"{ENV_PROGRAMFILES_X86}\WinSCP\WinSCP.exe" sftp://{USERNAME}:{PASSWORD}@{S:ip}:{T-REPLACE-RX:/{S:port}/-1//}{S:path}` > **Caution:** > > Assurez-vous d'avoir rempli la propriété avancée `ip`. Vous pouvez aussi définir les propriétés `port` et `path` ; elles restent toutefois facultatives. ## Démarrer une connexion RDP/TS depuis KeePass {#start-an-rdpts-connection-from-keepass} > Vous pouvez aussi démarrer une connexion Bureau à distance / terminal server depuis KeePass. L'URL doit être définie comme ceci : `cmd://mstsc.exe /v:{S:host} /f` > **Caution:** > > Assurez-vous d'avoir rempli la propriété avancée `host`. --- # WinSCP - Récupérer un mot de passe enregistré > Vous avez oublié un mot de passe WinSCP enregistré ? Suivez ce guide rapide pour activer les logs et récupérer votre mot de passe en clair depuis le fichier de log de session. --- ![WinSCP - Récupérer un mot de passe enregistré](/img/v2/winscp.webp) **TL;DR** Cet article montre comment récupérer un mot de passe WinSCP oublié : activez temporairement « Log passwords and other sensitive information » dans les préférences de logging, reconnectez-vous au site pour qu'il soit écrit dans le log de session dans `%TEMP%`, puis lisez le mot de passe en clair dans ce log — sans oublier de désactiver les logs et de supprimer le fichier ensuite. Il m'est arrivé plus d'une fois d'avoir un site enregistré dans la configuration de [WinSCP](https://winscp.net/) avec le mot de passe sauvegardé et, euh, mince, c'était quoi déjà ? *Le vrai remède, c'est d'arrêter complètement de taper des mots de passe : [How to connect to your hosting server using SSH](/blog/connect-using-ssh-to-your-hosting-server) met en place l'authentification par clé, et [KeePass - Overriding the URL field](/blog/keepass-overriding-url) ouvre WinSCP avec les bons identifiants directement depuis votre coffre.* Saviez-vous que WinSCP propose une option pour afficher, en clair, un mot de passe enregistré ? Pour cela, allez dans le menu `Preferences`, puis dans `Logging` et cochez *Log passwords and other sensitive information*. ![Log password](./images/log_password.webp) Cliquez sur `Ok` et double-cliquez sur votre site pour établir effectivement une connexion. Lancez l'explorateur Windows et allez dans votre répertoire `%TEMP%`. Triez sur la date/heure de dernière modification. Vous devriez retrouver un fichier portant le même nom que votre session, avec l'extension `.log`. > **N'oubliez pas de supprimer le fichier et de décocher la case:** > > Retournez sur la page `preferences` - `Logging` et décochez la case. Vous ne voulez pas que ça arrive à chaque fois. Vous vous battez plutôt avec PuTTY ? Voyez [Fatal error was starting Putty after having saved settings](/blog/putty-no-supported-authentication-methods). Et si vous préférez ne plus dépendre du tout des mots de passe enregistrés, [SSH - Launch a terminal on your session without having to authenticate yourself](/blog/linux-ssh-scp) montre comment passer à l'authentification par clé. --- # Erreur fatale au démarrage de Putty après avoir sauvegardé les paramètres > Corrigez l'agaçante erreur fatale « No supported authentication methods available » de PuTTY qui survient après la sauvegarde des paramètres. Voici la solution rapide : supprimer une entrée précise du registre PuTTY. --- ![Erreur fatale au démarrage de Putty après avoir sauvegardé les paramètres](/img/v2/putty.webp) **TL;DR** Cet article corrige l'erreur fatale « No supported authentication methods available » de PuTTY, qui peut apparaître après avoir sauvegardé les paramètres par défaut : supprimez l'entrée `Default%20Settings` sous `HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\Sessions` dans le registre Windows pour réinitialiser les valeurs par défaut de PuTTY. Il y a quelques jours, j'ai modifié ma configuration Putty pour passer la taille de police par défaut à 12 ; fini le 10. Aujourd'hui, au démarrage de Putty — quel que soit le serveur auquel je voulais me connecter — j'ai obtenu l'erreur *No supported authentication methods available*, suivie, dans mon cas, de *(server sent: publickey, gssapi-keyex, gssapi-with-mic, keyboard-interactive)*. Je n'ai compris l'origine du problème qu'en regardant le titre de la fenêtre : Putty essayait de se connecter à un autre serveur que celui que je voulais. Pourquoi ? Ah, ok, la dernière fois que j'ai modifié mes paramètres, je travaillais sur ce serveur. La solution devait donc venir de là : *comment réinitialiser mes paramètres Putty ?* La solution a été donnée par @makurison sur . Lancez simplement `regedit.exe`, cherchez la clé `Computer\HKEY_CURRENT_USER\SOFTWARE\SimonTatham\PuTTY\Sessions` et, là, supprimez l'entrée appelée `Default%20Settings`. *Tant qu'on y est : [KeePass - Overriding the URL field](/blog/keepass-overriding-url) montre comment lancer une session PuTTY directement depuis une entrée KeePass, identifiants compris — et [Windows Terminal - Adding a SSH profile](/blog/windows-terminal-ssh-profile) fait la même chose sans PuTTY du tout.* > **Fatigué des soucis de sessions et de mots de passe avec Putty ?:** > > Si vous vous battez aussi avec un mot de passe stocké que vous avez oublié, voyez [WinSCP - Retrieve a stored password](/blog/winscp-retrieve-password). Ou mieux, passez à l'authentification par clé une fois pour toutes : [SSH - Launch a terminal on your session without having to authenticate yourself](/blog/linux-ssh-scp). --- # WinSCP - Synchroniser l'host et le serveur distant > Utilisez un script avec WinSCP pour synchroniser facilement des fichiers entre votre machine locale et un serveur FTP/SFTP distant. Découvrez les commandes pour une synchronisation locale, distante ou bidirectionnelle. --- ![WinSCP - Synchroniser l'host et le serveur distant](/img/v2/winscp.webp) **TL;DR** Cet article partage un script WinSCP qui synchronise un dossier local avec un serveur FTP/SFTP distant (ou l'inverse) via la commande `synchronize`, lancée avec `winscp.com /script=...`. Il explique les options de direction `local`/`remote`/`both`, pratiques pour des sauvegardes automatisées comme la synchronisation d'un dossier vers un NAS Synology. Grâce à un script, il est possible de demander à [WinSCP](https://winscp.net/) de synchroniser votre machine locale et votre machine distante : si un fichier est plus récent en local, il est copié vers le serveur distant, et inversement. Si un fichier a été ajouté en local, il est copié vers le serveur distant, et vice versa. J'utilise ce genre de script pour faire une sauvegarde complète de certains de mes dossiers vers mon Synology. *Je l'ai aussi utilisé pendant des années pour déployer ce blog, avant de passer à [GitHub Actions](/blog/github-action).* *Deux autres scripts WinSCP sur ce blog : [télécharger récursivement les fichiers ayant une extension précise](/blog/winscp-download-recursively-files) et [ouvrir une session WinSCP directement depuis KeePass](/blog/keepass-overriding-url).* ## Le script {#the-script} **c:\temp\synchronize.txt** ```txt open ftp://USERNAME:PASSWORD@HOST_OR_IP:PORT/ option transfer ascii lcd "C:\Christophe" cd /Christophe synchronize remote -preservetime -transfer=automatic -filemask="|.git/" close exit ``` ## Comment l'utiliser {#how-to-use} 1. Enregistrez le script ci-dessus sous, par exemple, `c:\temp\synchronize.txt` 2. Éditez le script et précisez : 1. si nécessaire, remplacez `ftp` par `sftp` 2. `USERNAME` : le nom d'utilisateur FTP 3. `PASSWORD` : le mot de passe associé à ce compte 4. `HOST_OR_IP` : le nom d'host FTP ou son IP 5. `PORT` : le port à utiliser (21 pour une connexion FTP par exemple) 6. Le dossier local où vos fichiers sont stockés (ligne `lcd "C:\Christophe"`) 7. Le dossier distant depuis lequel les fichiers doivent être copiés (ligne `cd /Christophe`), ça peut être la racine FTP ou n'importe quel sous-dossier 3. Ouvrez une session DOS 4. Lancez `cd \temp` 5. Lancez `winscp.com` depuis là : tapez `"c:\program files (x86)\WinSCP\WinSCP.com" /script="c:\temp\synchronize.txt"` Si tout est correctement configuré, WinSCP ouvrira un terminal de session et démarrera la synchronisation. ## Plus d'infos {#more-info} Plus d'infos sur le verbe Synchronize de WinSCP : . * Si les fichiers/dossiers sont déjà présents, ne rien faire. * S'il y a de nouveaux fichiers/dossiers, les copier. * Si des fichiers/dossiers ne sont plus sur le disque local, les supprimer du serveur distant. Le local est donc le maître. ### Local / Remote / Both {#local--remote--both} Voyez la ligne `synchronize remote`. Choisissez `remote`, `local` ou `both` : * Quand le premier paramètre est `local`, les changements des répertoires distants sont appliqués aux répertoires locaux. * Quand le premier paramètre est `remote`, les changements des répertoires locaux sont appliqués aux répertoires distants. * Quand le premier paramètre est `both`, les répertoires locaux et distants peuvent tous les deux être modifiés ([source](https://winscp.net/eng/docs/scriptcommand_synchronize#remarks)). --- # FTP - Supprimer fichiers et dossiers à la vitesse de la lumière > Fini la suppression interminable de fichiers via FTP ! Découvrez comment effacer des sites et des dossiers entiers à la vitesse de l'éclair grâce à un simple script PHP qui s'auto-supprime — même sans accès SSH. --- ![FTP - Supprimer fichiers et dossiers à la vitesse de la lumière](/img/v2/winscp.webp) **TL;DR** Cet article partage un petit script `erase.php` que vous pouvez envoyer par FTP et lancer une seule fois depuis le navigateur pour vider instantanément tout un dossier de site côté serveur, et éviter la suppression fichier par fichier, terriblement lente, via un client FTP — avec un avertissement clair : il supprime tout immédiatement, sans confirmation ni sauvegarde. Avez-vous déjà supprimé un site web depuis votre client FTP ? C'est facile, il suffit de sélectionner le dossier contenant le site et d'appuyer sur la touche `delete`. Facile, simple et... tellement lent. Supprimer les fichiers et les dossiers prend un temps fou. Plusieurs dizaines de minutes ! Aïe. Si vous avez [une connexion SSH vers votre serveur web](/blog/connect-using-ssh-to-your-hosting-server) et que vous êtes à l'aise avec elle, vous pouvez faire un `rm -rf` sur le dossier et ce sera terminé en quelques secondes. Mais si vous n'avez pas SSH ou si vous craignez de faire des erreurs ? Il existe une alternative, le script `erase.php`. Ouvrez votre client FTP, ouvrez le dossier de votre site (par exemple `/var/www/html/old_site`), celui que vous voulez supprimer, et créez un nouveau fichier appelé par exemple `erase.php` puis copiez/collez le code ci-dessous dedans. **erase.php** ```php Deleting all files and subfolders in '.$directory.''; $it = new RecursiveDirectoryIterator($directory); foreach (new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST) as $file) { if ( ($file->isDir()) && (!in_array($file->getFilename(), array('.', '..'))) ){ echo '

Deleting folder '.$file->getPathname().'

'; rmdir($file->getPathname()); } else { if ( ($file->isFile()) && ($file->getPathname()!=__FILE__) ) { echo '

Deleting file '.$file->getPathname().'

'; unlink ($file->getPathname()); } } } echo '

Deletion complete. Only the '.$script_name.' file remains in the folder.

'; unlink(__FILE__); ?> ``` Lancez votre navigateur, allez sur votre site (`http://your_old_site.com`) et ajoutez `/erase.php` à la fin pour exécuter le script. > **Assurez-vous que c'est bien ce que vous voulez:** > > Soyez vraiment sûr que c'est ce que vous voulez > **Soyez absolument certain que c'est ce que vous voulez:** > > Le script démarre immédiatement et supprime tout sans demander de confirmation ni faire de sauvegarde. Il tue simplement fichiers et dossiers. > > À la fin du processus (c'est-à-dire en quelques secondes à peine), le dossier sera complètement vide. > > *Et, exactement comme pour [le scanner QuickScan](/blog/aesecure-quickscan), pensez à supprimer `erase.php` de votre serveur dès que vous avez terminé : un script capable de vider un dossier n'a rien à faire accessible depuis Internet.* --- # WinSCP - utilisation avec Visual Basic for Application > Automatisez des transferts de fichiers SFTP/FTP sécurisés directement depuis MS Office. Découvrez comment appeler les DLL WinSCP avec du code Visual Basic for Application (VBA), exemple pratique à l'appui. --- ![WinSCP - utilisation avec Visual Basic for Application](/img/v2/winscp.webp) **TL;DR** Cet article montre comment appeler la bibliothèque .NET/COM de WinSCP depuis VBA (par exemple dans Excel) pour automatiser des transferts de fichiers sécurisés : un objet `Session` se connecte en SFTP avec l'host, les identifiants et l'empreinte de la clé SSH, puis `PutFiles` envoie les fichiers, avec une gestion d'erreurs via `On Error Resume Next` et une boucle sur les résultats qui confirme chaque transfert. [WinSCP](https://winscp.net/) est un gestionnaire de fichiers gratuit et open-source qui permet de transférer des fichiers en toute sécurité entre votre machine et des serveurs distants, via des protocoles comme SFTP, FTP, SCP et WebDAV. Saviez-vous que vous pouvez appeler WinSCP depuis ... du code VBA ? Voir . Il y a aussi plusieurs sujets sur le forum : Les DLL de [WinSCP](https://winscp.net/) peuvent être appelées depuis du code VBA, ce qui permet donc d'envoyer ou de télécharger un fichier vers ou depuis un serveur FTP. *Si VBA n'est pas une obligation, WinSCP peut faire la même chose avec son propre langage de script, bien plus simple ; voir [WinSCP - Synchronize host and remote](/blog/winscp-synchronize-both) et [WinSCP - Download files with specific extension recursively](/blog/winscp-download-recursively-files).* Voici un exemple VBA simple que vous pouvez utiliser dans MS Excel, par exemple, pour envoyer un fichier sur votre serveur distant. ```vbnet Option Explicit Sub Example() Dim mySession As New Session ' Enable custom error handling On Error Resume Next Upload mySession ' Query for errors If Err.Number <> 0 Then MsgBox "Error: " & Err.Description ' Clear the error Err.Clear End If ' Disconnect, clean up mySession.Dispose ' Restore default error handling On Error GoTo 0 End Sub Private Sub Upload(ByRef mySession As Session) ' Setup session options Dim mySessionOptions As New SessionOptions With mySessionOptions .Protocol = Protocol_Sftp .HostName = "example.com" .UserName = "user" .Password = "mypassword" .SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" End With ' Connect mySession.Open mySessionOptions ' Upload files Dim myTransferOptions As New TransferOptions myTransferOptions.TransferMode = TransferMode_Binary Dim transferResult As TransferOperationResult Set transferResult = mySession.PutFiles("c:\temp\*", "/home/user/", False, myTransferOptions) ' Throw on any error transferResult.Check ' Display results Dim transfer As TransferEventArgs For Each transfer In transferResult.Transfers MsgBox "Upload of " & transfer.Filename & " succeeded" Next End Sub ``` --- # WinSCP - Télécharger récursivement les fichiers d'une extension donnée > Apprenez à utiliser la fonction de scripting de WinSCP pour télécharger récursivement les fichiers d'une extension spécifique (comme .php) depuis votre serveur FTP/SFTP. Avec un exemple de script simple. --- ![WinSCP - Télécharger récursivement les fichiers d'une extension donnée](/img/v2/winscp.webp) **TL;DR** Cet article partage un script d'automatisation WinSCP qui télécharge récursivement tous les fichiers correspondant à une extension donnée (par ex. `.php`) depuis un serveur FTP/SFTP distant vers un dossier local, lancé via `winscp.com /script=...` — pratique pour récupérer un type de fichier précis sur tout un site et l'analyser en local. Le client FTP [WinSCP](https://winscp.net/) prend en charge le scripting, comme on peut le lire sur . Dans une vie antérieure, j'ai souvent eu besoin de télécharger un certain type de fichier : me connecter à un serveur FTP et récupérer les fichiers PHP en local pour les analyser. *Tout télécharger juste pour y faire une recherche est parfois exagéré : [Search your FTP server at lightning speed](/blog/php-grep-searching-at-lightning-speed) fait la recherche **sur** le serveur. Et une fois les fichiers en local, [jakzal/phpqa](/blog/php-jakzal-phpqa) vous donne tous les outils d'analyse PHP sans rien installer.* Comme WinSCP permet l'automatisation, il est facile d'écrire un petit script pour faire exactement ça. À titre d'exemple, nous allons donc télécharger tous les fichiers `.php` d'un host. ## Le script {#the-script} Le script est plutôt simple, si vous voulez bien me croire : **C:\temp\download.txt** ```txt lcd "c:\temp" open ftp://USERNAME:PASSWORD@HOST_OR_IP/ cd /public_html option transfer ascii get -filemask:*.php * close exit ``` ## Comment l'utiliser {#how-to-use} 1. Sauvegardez le script ci-dessus sous, par exemple, `C:\temp\download.txt` 2. Éditez le script et apportez ces modifications : 1. L'endroit où les fichiers doivent être téléchargés, le dossier local (ligne `lcd "c:\temp"`) 2. Si besoin, remplacez `ftp` par `sftp` 3. `USERNAME` : le nom d'utilisateur FTP 4. `PASSWORD` : le mot de passe associé à ce compte 5. `HOST_OR_IP` : le nom d'host FTP ou son IP 6. Le dossier distant depuis lequel les fichiers doivent être téléchargés (ligne `cd /public_html`) 7. L'extension de fichier à télécharger (si ce n'est pas `.php`) (ligne `get -filemask:*.php *`) 8. Sauvegardez le script 3. Ouvrez une session DOS 4. Lancez `cd c:\temp` 5. Lancez `winscp.com` depuis là : tapez `"C:\Program Files (x86)\WinSCP\WinSCP.com" /script="c:\temp\download.txt"` Si tout est correctement configuré, WinSCP ouvrira une session terminal et commencera à télécharger chaque fichier `.php` trouvé dans votre dossier distant (sous-dossiers inclus). --- # Cherchez sur votre serveur FTP à la vitesse de l'éclair > Fatigué des fonctions de recherche FTP désespérément lentes ? Découvrez php_grep, le script PHP ultra-rapide qui utilise les expressions régulières pour trouver du contenu sur votre serveur FTP en un éclair. --- ![Cherchez sur votre serveur FTP à la vitesse de l'éclair](/img/v2/winscp.webp) **TL;DR** Chercher du texte sur un serveur FTP peut être incroyablement lent, surtout avec des outils comme la recherche intégrée de WinSCP. Cet article présente `php_grep`, un script PHP léger et ultra-rapide qui change la donne pour la recherche sur FTP. Il suffit d'uploader ce fichier unique sur votre serveur et d'y accéder via une URL pour lancer des recherches instantanées basées sur des expressions régulières dans le contenu de vos fichiers, et même filtrer les résultats par type de fichier. Saviez-vous qu'avec [WinSCP](https://winscp.net/), vous pouvez lancer une recherche sur votre FTP pour trouver tous les documents contenant une chaîne donnée ? C'est natif dans WinSCP, rien de plus à installer, mais... *D'autres astuces WinSCP sur ce blog : [télécharger récursivement les fichiers ayant une extension précise](/blog/winscp-download-recursively-files) et [synchroniser la machine locale et le serveur distant](/blog/winscp-synchronize-both).* Le problème : c'est terriblement lent. Voyons comment faire mieux et quasi instantanément. ## WinSCP - Rechercher du texte {#winscp---search-for-text} Vous ne l'avez probablement jamais remarqué (c'était mon cas), mais vous pouvez lancer une recherche dans les fichiers de votre serveur FTP depuis WinSCP. Pour cela, allez dans le menu `Commands`, puis `Static custom` commands et enfin `Search for Text...`. Tapez votre motif de recherche et appuyez sur `Enter`. ![Rechercher du texte](./images/search_for_text.webp) Un nouveau prompt Powershell va s'ouvrir et vous verrez la liste des fichiers analysés. ![Résultat](./images/result.webp) > **C'est un script Powershell:** > > WinSCP lance en réalité un script `.ps1` situé ici : `C:\Program Files (x86)\WinSCP\Extensions\SearchText.WinSCPextension.ps1`. N'hésitez pas à modifier le fichier selon vos besoins. C'est atrocement lent et vous obtenez une énorme liste avec tous vos fichiers, pas seulement ceux où le motif a été trouvé. Cette fonction a le mérite d'exister, mais ça s'arrête là. ## php\_grep {#php\_grep} Le temps passe... En 2016, j'ai développé un petit script ultra-rapide appelé [php\_grep](https://github.com/cavo789/php_grep) qui parcourt chaque fichier présent et, à l'aide d'une petite expression régulière, trouve les fichiers contenant le motif recherché et affiche sa position en cas de succès. Il vous suffit de télécharger une copie de mon script (une seule page PHP), de la copier sur votre serveur FTP et d'y accéder via une URL. Vraiment simple. Vous obtenez alors une interface où vous pouvez taper, bien sûr, l'expression recherchée, mais aussi restreindre la recherche aux fichiers `.html` par exemple. ![php\_grep en action](./images/php_grep.webp) Plus d'infos sur *L'astuce ici, c'est de chercher **sur le serveur** : rien ne transite sur le réseau. Quand les fichiers sont déjà sur votre propre disque, c'est [ripgrep](/blog/ripgrep) qui procure la même sensation de vitesse fulgurante.* ---