Utiliser curl pour récupérer des logs sur un serveur Microsoft IIS avec l'authentification ntlm
Quand il s'agit de récupérer des fichiers depuis un serveur Web Microsoft IIS, (sisi ça arrive dans la vie d'un sysadmin linux) il ne faut pas hésiter à utiliser curl (en lieu et place de wget)
En effet curl (via libcurl) supporte toute les variantes d'authentification dont certaines spécifiques à Microsoft comme le fameux ntlm.
Pour vérifier si vous avez déjà curl vous pouvez exécuter un simple
dpkg -l |grep curl
Ce qui dans mon cas donne sur une Ubuntu 9.1 :
voici un exemple d'utilisation :
toutes les nombreuses options sont documentées dans les "man" pages ou en ligne sur le site de curl
Dans cet exemple j'utilise notamment :
D'ailleurs il est utile de préciser pour cette dernière option que ce fichier .netrc doit se trouver dans votre répertoire HOME, et que donc curl va voir ou se trouve votre HOME en regardant dans le contenu de la variable d'environnement HOME. (par exemple HOME=/home/cgil)
si d'aventure vous êtes sur une Ubuntu ou un autre dérivé de Debian, il y a des fortes chances que vous usiez et abusiez du "sudo qqcchose" or dans ce cas il faut juste prendre garde au fait que bien qu'on agisse en tant que USER root il se trouve que dans ces distributions la variable d'environnement HOME reste elle fixée à votre HOME de simple mortel et utilisateur lambda.
Ce qui fait que curl ou un shell script utilisant curl avec l'option --netrc ira chercher le fichier --netrc dans votre HOME en non pas dans le HOME théorique de /root comme on pourrait s'y attendre pour vérifer cela il suffit de :
En effet curl (via libcurl) supporte toute les variantes d'authentification dont certaines spécifiques à Microsoft comme le fameux ntlm.
Pour vérifier si vous avez déjà curl vous pouvez exécuter un simple
dpkg -l |grep curl
Ce qui dans mon cas donne sur une Ubuntu 9.1 :
ii curl 7.19.5-1ubuntu2 Get a file from an HTTP, HTTPS or FTP server ii libcurl3 7.19.5-1ubuntu2 Multi-protocol file transfer library (OpenSS ii libcurl3-gnutls 7.19.5-1ubuntu2 Multi-protocol file transfer library (GnuTLS ii libcurl4-gnutls-dev 7.19.5-1ubuntu2 Development files and documentation for libc ii php5-curl 5.2.10.dfsg.1-2ubuntu6.3 CURL module for php5Vous pouvez le cas échéant installer ces paquets avec un gestionnaire de paquets graphique (tel synaptic) ou avec un simple :
sudo apt-get install curl
voici un exemple d'utilisation :
curl --proxy '' --verbose --ntlm --netrc http://myserver.mydomain.ch/iislog/
toutes les nombreuses options sont documentées dans les "man" pages ou en ligne sur le site de curl
Dans cet exemple j'utilise notamment :
- --proxy '' : pour forcer la non-utilisation du proxy d'entreprise, en effet dans mon cas j'ai une variable d'environnement du style "http_proxy=http://monproxy.mondomaine.ch:8080/" qui existe et curl et assez futé pour l'utiliser par défaut, sauf que dans mon cas je veux aller sur un serveur en interne d'ou mon besoin de désactivez l'usage du proxy
- --verbose : pour avoir quelques infos utile en cas de problèmes, pratiquement cette option n'est que rarement utilisée en production
- --ntlm : dans ce cas je force l'utilisation de l'autentification ntlm, j'aurais pu utiliser --anyauth et curl aurait essayé différent mode d'authentification jusqu'à trouver le bon (dans ce cas --verbose prend tout son sens) en production il est de bon ton d'utiliser directement le bon mode ( --basic, --digest, --ntlm, and --negotiate.
- --netrc : cette option demande à curl de scanner le contenu du fichier .netrc (_netrc on Windows) pour connaitre les utilisateurs et les mot de passes pour un serveur donné en gros le format du fichier est le suivant pour chaque ligne on a : machine monserveur.mondomaine.com login monusername password monmotdepassesecret.
D'ailleurs il est utile de préciser pour cette dernière option que ce fichier .netrc doit se trouver dans votre répertoire HOME, et que donc curl va voir ou se trouve votre HOME en regardant dans le contenu de la variable d'environnement HOME. (par exemple HOME=/home/cgil)
si d'aventure vous êtes sur une Ubuntu ou un autre dérivé de Debian, il y a des fortes chances que vous usiez et abusiez du "sudo qqcchose" or dans ce cas il faut juste prendre garde au fait que bien qu'on agisse en tant que USER root il se trouve que dans ces distributions la variable d'environnement HOME reste elle fixée à votre HOME de simple mortel et utilisateur lambda.
Ce qui fait que curl ou un shell script utilisant curl avec l'option --netrc ira chercher le fichier --netrc dans votre HOME en non pas dans le HOME théorique de /root comme on pourrait s'y attendre pour vérifer cela il suffit de :
cgil@neotux:~$ env|grep -E 'USER|HOME' USER=cgil USERNAME=cgil JAVA_HOME=/opt/jdk/ HOME=/home/cgil cgil@neotux:~$ sudo env|grep -E 'USER|HOME' HOME=/home/cgil USER=root USERNAME=root SUDO_USER=cgilceci a parfois des effets de bords fort génants et je trouve personnellement que le HOME devrait toujours suivre le USER
Commentaires