~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

Solutions CLI pour connexion hostile / dégradée

Mini-tutos pour screen, irssi, bitlbee, cone et gcalcli.

Ne plus avoir de connexion de qualité au net, et devoir passer par un wifi non sécurisé et qui n'est pas de confiance, comme c'est mon cas en ce moment, est un véritable calvaire. Je suis actuellement sur une connexion FreeWifi, et le bilan n'est pas bon :

  • Il faut re-donner ses identifiants FreeWifi régulièrement sinon la connexion se coupe (aucune idée de l'intervalle, ça semble assez aléatoire)
  • Utiliser Pidgin pour MSN est hors de question, le protocole n'étant pas chiffré
  • utiliser Meebo.com (pour jabber/msn) est lent
  • GMail ne fonctionne pas, le login ne se termine jamais (ça va un peu mieux avec la correction de MTU mais ça marche quand même pas bien)
  • Google Calendar ne fonctionne pas non plus
  • Twitter est lent et impossible de poster un twit

Heureusement, ssh est là ! Faire un proxy SOCKS / HTTP ? Trop chiant, il faudrait le relancer régulièrement quand la session FreeWifi expire. Faire un tunnel avec VPN ? Pfiou c'est relou ! Pourquoi ne pas plutôt être le plus léger / indépendant possible, et retrouver sa session quand on se connecte ? C'est la magie d'une connexion SSH et de GNU/Screen !

D'abord régler le problème de l'expiration de session FreeWifi avec le script shell suivant (qui inclut la correction de MTU mentionnée précédemment) :

#!/bin/sh

LOGIN="remplacer par mon login freewifi"
PASSWORD="remplacer par mon passe freewifi"
INTERFACE="remplacer par l'interface wifi"

RESULT=`curl -s -A "Opera/10.11" -F login=$LOGIN -F "password=$PASSWORD" \
-F submit=Valider https://wifi.free.fr/Auth | fgrep "CONNEXION AU SERVICE REUSSIE"`

if [ "$RESULT" == "" ]
then
	echo "FAIL"
else
	echo $RESULT
	ifconfig $INTERFACE mtu 1460
fi

Ne pas oublier de chmod +x le script. Ensuite relancer ce script dans un terminal à intervalle régulier :

$ while true; do ./freewifi-connect.sh; sleep 30m; done;

Trente minutes me semble un bon délai, ça marche jusque là.

Recherche web

Une fois la connexion établie, première chose désactiver les scripts sur google.com (noscript roxor), ce qui évite de faire une requête à google à chaque fois qu'on clique sur un résultat dans la page de recherche (tracking des clics, c'est lent et c'est pas cool pour votre vie privée). Si vous avez un brouteur qui trouve pas utile de bloquer les scripts site par site (au hasard, Chrome), utilisez Scroogle.

Session Screen

Première chose, connectez-vous à un serveur distant en ssh, et installez screen (apt-get install screen) si ce n'est pas déjà fait. Pour rendre screen un peu plus attractif visuellement, recopiez la ligne suivante dans ~/.screenrc :

startup_message off
hardstatus alwayslastline "%?%{kw}%-Lw%?%{kR}%n*%f %t%?(%u)%?%?%{kw}%+Lw%?"

Lancez screen. Voyez screen comme un genre de gestionnaire de fenêtres en mode texte, avec la configuration affichée ci-dessus vous verrez en bas les fenêtres ouvertes en ce moment, la fenêtre active étant en rouge. Voici quelques commandes pour commencer, à précéder par la séquence Ctrl-A (attention aux majuscules) :

c	Créer une nouvelle fenêtre
A	Renommer la fenêtre active
n	Aller à la fenêtre suivante
p	Aller à la fenêtre précédente
Ctrl-A	Alterner la fenêtre active et celle active précédemment
k	Tuer la fenêtre active (kill)
0	Aller à la fenêtre n°0
1	Aller à la fenêtre n°1 (etc. jusqu'à 9)
x	Locker la session screen courante (il faudra donner votre mot de passe)
d	Détacher la session screen (permet de reprendre la session plus tard)

Voilà qui donne déjà de bonnes bases. Le plus important étant de créer, fermer des fenêtres (quitter un shell d'une fenêtre fermera la fenêtre automatiquement), et s'y promener. Si votre connexions ssh est coupée, que le terminal est fermé, ou que vous détachez la session, vous pourrez la rependre à tout moment en tapant screen -r -d (-r pour rattacher et -d pour détacher si un autre terminal est encore attaché à cette session, par exemple une connexion ssh qui ne fonctionne plus mais pas encore expirée). Comme vous le voyez, screen est très résistant aux coupures involontaires, tant que vous n'arrêtez pas la session screen et que la machine où elle est reste allumée, les programmes qui sont dans la session continueront de fonctionner comme si vous êtiez devant. Screen est un programme génial aux multiples capacités (on peux même faire une copie écran-texte de la fenêtre en cours en faisant Ctrl-A h), mais ce n'est pas le sujet ici, je vous invite donc à taper "Ctrl-A ?" pour lister les commandes clavier, et à lire le man de screen pour le programme lui-même et ses multiples options.

Chat IRC

Le plus simple : installer irssi ou weechat.

# apt-get install irssi

Lancer irssi et là rajouter un réseau :

/network add Freenode

Y ajouter un serveur :

/server add -auto -ssl -network Freenode irc.freenode.net 7000

Puis des salons :

/channel add -auto ##openweb Freenode

Enfin sauvegarder ce qu'on vient de faire et l'exécuter :

/save
/connect Freenode

Et voilà !

Chat MSN, Jabber, AIM, Yahoo, Twitter, Status.net, etc.

Personnellement mon préféré pour l'IM (Instant Messaging) est bitlbee qui est un serveur qui fait passerelle IRC <-> IM. En se connectant sur un serveur Bitlbee (ça peut être celui que vous avez installé vous-même ou un des serveurs publics), avec n'importe quel client IRC vous pourrez ajouter vos compte de messagerie instantanée et parler avec tous vos contacts, vous verrez les contacts en ligne sur un salon #bitlbee.

L'installation est simple, il suffit ensuite de se connecter avec un client IRC (comme irssi, vu au dessus) sur 'localhost' si vous avez installé votre instance de Bitlbee, ou sur un serveur bitlbee public.

Là il faudra vous créer un compte sur le serveur (oui vous pouvez être plusieurs sur le même serveur Bitlbee) :

register mot_de_passe

Vous devrez ensuite vous identifier quand vous vous reconnecterez à bitlbee avec :

identify mot_de_passe

Ensuite pour ajouter par exemple un compte MSN :

account add msn msn.really.sucks.a.lot@bohwaz.net mot_de_passe_msn

Et s'y connecter :

account on

Pour parler à un contact il suffit de lancer une query :

/query KnuX

Si un contact a un pseudo qui ne vous rappelle rien, vous pouvez le renommer :

rename KnuX Knuckles

Ça fonctionne aussi avec les comptes Facebook (il faut avoir un login facebook unique) :

account add jabber login@chat.facebook.com mot_de_passe_fb
account set nick_source full_name
account on

La seconde ligne n'est là que pour le cas particulier de facebook dont les logins sont en fait des IDs numériques, on demande donc à bitlbee de créer le pseudo (nick) à partir du nom complet.

Et ça fonctionne aussi avec Twitter :

account add twitter bohwaz foo
account on

A ce moment, une query s'ouvrira avec une URL à visiter, allez sur cette URL, acceptez l'autorisation, et recopiez le code PIN dans la query déjà ouverte. Pas besoin de votre mot de passe, c'est pour ça que j'ai mis 'foo' comme mot de passe. Une fois l'autorisation avec le code PIN effectuée, un channel #twitter_bohwaz apparaîtra qui affichera les messages des gens que vous suivez.

Pour twitter il suffit d'écrire sur le salon #twitter_pseudo. Par exemple pour répondre à Thanh qu'il est pas rigolo :

Thanh: rho même pas drôle :)

Apparaîtra dans votre timeline comme suit :

@Thanh rho même pas drôle :)

Bref la plus pure tradition IRC pour twitter comme des gens bien élevés.

Alternatives pour la messagerie instantanée

Tout le monde n'est pas fan de l'approche IRC et je le comprends. Alors quelques pistes testées et approuvées :

  • Pour MSN/Jabber/etc. : CenterIM
  • Pour Twitter/Status.net/etc. : ttytter, qui est particulièrement impressionnant en terme de fonctionnalités, et permet même de filtrer les statuts par regexp.

Mails

Et oui le plus important au final c'est quand même de lire ses mails. Alors je sais qu'il y a quelques années, lire ses mails en console relevait du parcours du combattant, et rien qu'à voir les 3000 lignes de la configuration d'exemple de Mutt rendait blêmes les plus barbus d'entre nous, mais de nos jours tout a changé, le mail en console est enfin accessible au plus grand nombre. Et tout ça grâce à un merveilleux client mail cone issu de la non moins merveilleuse suite 'courier' (qui fait aussi serveur de mail, webmail, etc., je vous en reparlerais dans un autre billet un jour). Nous allons ici prendre l'exemple d'un compte GMail mais vous allez voir que c'est assez simple, il suffit de suivre ce qui est indiqué.

D'abord installer cone :

# apt-get install cone

Ensuite lancez cone, et accédez au menu principal en appuyant sur la touche 'M', puis avec les flèches allez sur 'New Account' et faites Entrée, appuyez sur la touche 'I' pour indiquer un compte IMAP. Dans 'Account name' indiquer 'Gmail' par exemple (peu importe), dans 'Server', indiquer 'imap.gmail.com:993/novalidate-cert', donner login et mot de passe, ne pas cocher 'Do not send password in clear text' et cocher 'Use an encrypted connection'. Voilà, le compte est ajouté et fonctionnel. Avec les flèches vous pouvez désormais vous promenez dans les dossiers. Les commandes sont affichées en bas de l'écran, il suffit d'appuyer sur la touche indiquéer pour réaliser l'action. C'est relativement aisé.

Attention pour supprimer un compte, positionnez-vous bien sur le nom du compte, pas sur INBOX, sinon cela pourrait effacer vos messages.

Un petit truc, pour envoyer un message dans la fenêtre écrire/répondre, c'est Ctrl-X qu'il faut appuyer :)

Agenda Google

Simple ! Il suffit d'installer gcalcli :

# apt-get install gcalcli

Ensuite configurez-le en éditant ~/.gcalclirc :

<a href="gcalcli">gcalcli</a>
user: mon_login_google
pw: mon_passe_google

Ensuite pour voir les événements des 5 prochains jours :

$ gcalcli agenda

Ce qui donne de manière assez colorée (mais en N&B ici) :

Tue Jan 11   6:30pm  Etat des lieux

Wed Jan 12  12:00am  Début soldes d'hiver
           12:00am  Ciné Green Hornet

Thu Jan 13  11:52am  Train > Paris

Fri Jan 14   8:00pm  Concert GY!BE @ La Villette

D'autres commandes sont disponibles, par exemple :

# Ajouter un événement
$ gcalcli remind "10pm 10/31 Miam miam"
# Voir l'agenda de la semaine
$ gcalcli calw
# Voir l'agenda du mois
$ gcalcli calm

Conclusion

Voilà on a fait tour relativement complet des outils en ligne de commande qui vous permettront de survivre depuis un modem 56K ou un wifi pourri en plein centre d'une ville. N'hésitez pas à partager si vous avez d'autres bons plans du genre, je suis toujours intéressé. Je rappelle évidemment que tous es outils peuvent aussi très bien servir pour une utilisation quotidienne, même sans avoir des problèmes de connexion. D'ailleurs j'utilise bitlbee et irssi régulièrement car il serait difficile de leur trouver un logiciel graphique qui soit aussi pratique à utiliser dans le temps.

Écrire un commentaire
(facultatif)
(facultatif)
(obligatoire)
                           
  __ _  ___ _ __  _ __ ___ 
 / _` |/ _ \ '_ \| '__/ _ \
| (_| |  __/ | | | | |  __/
 \__, |\___|_| |_|_|  \___|
 |___/                     
(obligatoire)

Les adresses internet seront converties automatiquement.
Tags autorisés : <blockquote> <cite> <pre> <code> <var> <strong> <em> <del> <ins> <kbd> <samp> <abbr>

develo-man

Merci pour toutes ces astuces. Je confirme : c'est vraiment la plaie de devoir se connecter sur un réseau wifi non sécurisé ou sur un réseau wifi public quand notre connexion habituelle tombe en panne.