14 mar. 2011

Configuration d'OpenSSH

OpenSSH est un logiciel formidable, tout le monde le sait. Quelque chose que j'aime beaucoup avec ce logiciel, c'est la manière dont son fichier de configuration permet de simplifier certaines opérations. Je vous propose de voir ou de revoir certaines options qu'on peut ajouter à la suite d'un bloc de configuration qu'on stocke généralement dans ~/.ssh/config .

La base

On va configurer l'accès à la machine "testdrive" dont l'adresse IP est 192.168.13.37. Commençons avec les informations de base :

Host testdrive
        HostName 192.168.13.37
        User nils
        Protocol 2
        Port 22
        ServerAliveInterval 5

Lorsque que je taperai la commande "ssh testdrive", OpenSSH me connectera à la machine 192.168.13.37 en tant qu'utilisateur nils, en utilisant la version 2 du protocole SSH, sur le port 22 et vérifiera toutes les 5 secondes si la machine en question est toujours joignable, ce qui peut s'avérer pratique dans certains cas où on peut être déconnecté du réseau pour cause d'inactivité (réseau de téléphonie mobile, proxy...)

Connexion au travers d'un proxy HTTP

ProxyCommand /usr/bin/corkscrew monproxy.lan 3128 %h %p ~/.ssh/proxy_auth

Ici, j'utilise un utilitaire nommé Corkscrew qui me permet de me connecter via un proxy HTTP à mon serveur. Dans mon exemple, le proxy écooute sur le port 3128 et nécessite une authentification, j'ai donc ajouté un fichier proxy_auth contenant les identifiants. Les variables %h et %p désignent l'hôte vers qui se connecter et son port. A noter que la plupart des serveurs proxy qu'on peut trouver sont configurés pour ne pas autoriser les ports autres que les ports HTTP, HTTPS, et éventuellement FTP. Il faudra donc peut-être changer le port d'écoute de notre testdrive, et mettre notre serveur SSH sur le port 80 ou 443. A noter que selon l'organisation qui administre le proxy, cette manière de faire peut être vue comme une violation de la charte informatique du réseau, ou de tout autre règlement intérieur. Ne l'utilisez donc que si vous y êtes autorisés !

Créer un tunnel SOCKS

DynamicForward 1080

Cette option est très pratique si vous ne voulez pas vous casser la tête à créer un tunnel VPN. Une fois cette option ajoutée à la configuration de votre hôte, et la connexion à celui-ci effective, un tunnel SOCKS écoute sur la boucle locale de votre machine, sur le port 1080. Un cas concret d'utilisation est la connexion à vos sites préférés depuis un point d'accès sans fil public, comme une gare : une fois connecté au réseau, on se connecte en SSH à son serveur, puis on modifie les paramètres de proxy de notre navigateur web pour utiliser un proxy SOCKS dont l'adresse est 127.0.0.1 et le port est 1080. Tout le trafic web du navigateur passe ainsi dans la connexion SSH. Si vous faites souvent le va-et-viens dans votre configuration de proxy, Firefox possède une extension nommée FoxyProxy qui vous facilitera l'existence !

Créer un tunnel pour rediriger du trafic

LocalForward 5901 192.168.13.38:5900

Encapsuler un trafic réseau dans SSH est quelque chose de connu, et l'exemple ci-dessus est lui aussi archi-connu : le protocole VNC transite en clair sur le réseau, l'utilisation de SSH permet de chiffrer la transmission entre notre client et notre serveur. On transfère donc le port 5900 de la machine 192.168.13.38 (qui doit être joignable depuis notre machine testdrive) vers le port 5901 local. On lance ensuite notre client VNC en direction la machine localhost sur le port 5901.

Spécifier l'algorithme de chiffrement

Ciphers aes128-cbc

De nombreux algorithmes de chiffrement sont disponibles avec OpenSSH, vous pourrez trouver la liste dans les pages de manuel. Certains processeurs (tels que l'AMD Geode LX ou le VIA C7) savent déchiffrer certains algorithmes, ce qui les rend plus rapide pour ces types d'opérations. Forcer le chiffrement en AES 128 si vous vous connectez à une machine ayant un CPU AMD Geode peut ainsi s'avérer très efficace pour limiter l'utilisation du CPU et alléger la charge.

22 déc. 2009

Utilisation transparente d'une passerelle SSH

Ou comment rebondir sans même le faire exprès !

Lire la suite...

13 oct. 2009

Transfert de fichier simple et sécurisé : sftp en chroot

Meurs, FTP, meurs !

Lire la suite...

5 mar. 2008

Forcer openssh à ouvrir un terminal

Ces jours-ci, j'en apprend des trucs marrants !

L'autre jour, je voulais faire la feignasse : plutôt que de me connecter en ssh, devenir root puis taper une commande (un bête mkdir je crois), et ce sur 5-6 serveurs, je me suis demandé si je ne pouvais pas faire tout ça en une fois, au moins disons une commande par bécane, quitte à juste taper les mots de passe ensuite. Et bien c'est possible !

D'abord, on regarde la page de manuel de ssh, et on voit qu'on peut donner une commande en argument pour juste exécuter cette commande :

nils@darkmoon:~ $ssh www.anotherhomepage.org /bin/uname
nils@www.anotherhomepage.org's password: 
Linux

Ensuite on se dit qu'on rajouterait bien des arguments à notre commande, donc on rajoute des guillemets :

nils@darkmoon:~ $ssh www.anotherhomepage.org "/bin/uname -sp"
nils@www.anotherhomepage.org's password: 
Linux i686

Pour s'amuser, disons qu'on veut faire un truc en tant que root. On peut, si on ne dispose pas de sudo, utiliser "su -c" pour ne taper qu'une commande en tant que root, sous réserve de connaître le mot de passe. Mais si on le fait, on se heurte à un message d'erreur :

nils@darkmoon:~ $ssh www.anotherhomepage.org "su -c whoami"
nils@www.anotherhomepage.org's password: 
standard in must be a tty

Et là, c'est le drame... comment ouvre-t-on un tty? Un retour dans la page de manuel (merci Stéphane !) nous apprend que l'option "-t" force ssh à ouvrir un tty. Allez, on recommence :

nils@darkmoon:~ $ssh -t www.anotherhomepage.org "su -c whoami"
nils@www.anotherhomepage.org's password: 
Password: 
root
Connection to www.anotherhomepage.org closed.

On remarquera que cette fois-ci, on me demande 2 mots de passe : le mot de passe de nils (utilisateur implicite du fait que je suis connecté en tant que nils sur darkmoon), et le mot de passe de root. Le tty est ensuite refermé avec le ssh.

On pourrait bien entendu se passer de taper les mots de passe en utilisant une authentification par clés pour ssh et sudo pour les commandes qui le nécessitent. Ensuite, si on désire faire ceci sur plusieurs machines d'affilée, rien n'empêche d'imbriquer tout ça dans une boucle for. Si la commande lancée après le "su -c" nécessite des arguments, alors on peut utiliser les guillemets simples :

nils@darkmoon:~ $ssh -t www.anotherhomepage.org "su -c 'whoami --help'"
nils@www.anotherhomepage.org's password: 
Password: 
Usage: whoami [OPTION]...
Print the user name associated with the current effective user ID.
Same as id -un.

      --help     display this help and exit
      --version  output version information and exit

Report bugs to <bug-coreutils@gnu.org>.
Connection to www.anotherhomepage.org closed.

Propulsé par Dotclear