Ce billet présente l’utilisation de l’option -R de la commande ssh qui permet par exemple de monter une connexion SSH dans le sens inverse.

Pour illustrer cette option, prenons le cas ou le “support” doit prendre la main en SSH sur la machine du “client”..mais sans que le “client” ne soit contraint d’autoriser dans son FireWall une connexion entrante vers le port SSH de son serveur.

-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

  • Le petit dessin illustrant la communication de l’exemple ci-dessous:

Yannick16Fev2005ssh-R

  • Blocage de l’accès en SSH à distance vers “client” (simulation d’un FireWall)

ListenAddress 127.0.0.1 dans le /etc/ssh/sshd_config de “client”

yannick@client:~$ netstat -ant|grep 22  
tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN   
yannick@client:~$

Il est donc impossible à une autre machine distante, de se connecter de manière “normale” sur le port 22 de “client”…

  • Rien de spécial pour l’instant sur la machine “support”:
yannick@support:~$ netstat -ant |grep 1111  
yannick@support:~$
  • On fait lançer (par le client) la commande ssh -R sur la machine “client”:
ssh -R port-distant:HOSTNAME:port-local machine-distante
yannick@client:~$ ssh -R 1111:127.0.0.1:22 support

…on entre le mot de passe de “support”…on est connecté a “support”….

  • Sur la machine “support”:

… on a désormais le port 1111 d’ouvert:

yannick@support:~$ netstat -ant |grep 1111  
tcp 0 0 127.0.0.1:1111 0.0.0.0:* LISTEN  
yannick@support:~$

…en se connectant sur le port 1111 de “support” on arrive donc sur le port 22 du “client”:

yannick@support:~$ ssh -p1111 127.0.0.1  

…demande le mot de passe de “client”…on est connecté sur le ssh de “client”

  • Fin:

Il suffira au “client” de faire exit et un CTRL+C pour couper la connexion du “support”

yannick@client:~$ Connection to 127.0.0.1 closed by remote host.  
Connection to 127.0.0.1 closed.  
yannick@support:~$
  • La même chose en graphique avec putty:

Yannick16Fev2005ssh-R-Putty

  • Il est à noter qu’il est possible de maintenir le tunnel ouvert même en quittant la session en utilisant screen.

2 petites lignes qui peuvent servir dans des scripts pour supprimer des vieux fichiers de backup etc..

  • Pour supprimer les fichiers qui ont été modifiés, pour la dernière fois, il y a plus de 30 jours (ou autrement dit pour ne conserver que les fichiers de moins de 30 jours):

Avantage -> pas de risque de supprimer un fichier récent

find /var/backuptoto/ -name 'backup*' -mtime +30 | xargs rm -f

-mtime n
Fichier dont les données ont été modifiées il y a n*24 heures.

+n
supérieur à n

  • Pour supprimer le plus vieux fichier d’un répertoire:

Avantage -> bon compromis entre faire de la place et garder un maximum de fichiers

ls -t /var/backuptoto/ | tail -1 | xargs rm -f

-t
Trier le contenu des répertoires en fonction de la date et non pas en ordre alphabétique. Les fichiers les plus récents sont présentés en premier.

Ce petit script tout simple de Graham Forest est super pratique.. il permet de décompresser/ détarrer/ dézipper..etc.. automatiquement sans se prendre la tête à se rapeller toutes les options de tar ou de bzip2.

Je l’ai mis dans /usr/sbin/unfoo

Allez un petit exemple en image avec le dernier fichier tar.bz2 qui me soit passé sous la main:

unfoo27012006

Le petit + sur les autres scripts que j’avais:

  • Il fonctionne même si il y a des points dans le nom du fichier (autre que l’extension) (comme dans l’exemple ci dessus)
  • Il fonctionne même si il y a des espaces dans le nom du fichier.

Two years from now, spam will be solved

Bill Gates - 25th January 2004 - World Economic Forum - Davos

Le petit lien1 qui va bien
Le petit lien2 qui va bien

Je crois que je n’ai plus qu’à fermer ma rubrique “Spam” alors..

Description:

Podget is a simple bash script to automate the downloading and organizing of podcasts content.

A l’installation du deb on a quelques erreurs…mais..

Lancer le script une fois.. il créé les fichiers..on les modifie comme il faut..

vi .podget/serverlist  
vi .podget/podgetrc

Exemple au 1er lancement:

podget.sh  

podget  

Category: DidierPorte Name:  
 Downloading feed index from http://www.ouifm.fr/podcast/didierporte.rss  
 14:04:03 URL:http://www.ouifm.fr/podcast/didierporte.rss [8810/8810] -> "-" [1]  
 Dowloading DIDIERPORTE060106.mp3 from http://www.ouifm.fr/podfile/  
 14:04:06 URL:http://www.ouifm.fr/podfile/DIDIERPORTE060106.mp3 [4566768/4566768] -> "/home/yannick/POD/DidierPorte/DIDIERPORTE060106.mp3" [1]  
 [...]  

Puis les fois suivantes, si rien de nouveau, il ne retélécharge pas:

podget.sh  

podget  

Category: DidierPorte Name:  
 Downloading feed index from http://www.ouifm.fr/podcast/didierporte.rss  
 14:04:42 URL:http://www.ouifm.fr/podcast/didierporte.rss [8810/8810] -> "-" [1]  
 Already downloaded DIDIERPORTE060106.mp3.  
 Already downloaded DIDIERPORTE050106.mp3.  
 [...]  

Tout est bien arrivé:

$ ls  
DIDIERPORTE030106.mp3 DIDIERPORTE050106.mp3 DIDIERPORTE191205.mp3 DIDIERPORTE211205.mp3 DIDIERPORTE231205.mp3 DIDIERPORTE040106.mp3 DIDIERPORTE060106.mp3 DIDIERPORTE201205.mp3 DIDIERPORTE221205.mp3

Puis le tout en cron avec l’option :

-s --silent Run silently (for cron jobs).

Par contre le deb mettait un peu le souk dans Apt car pour lui les versions ne sont pas à jour blahhblahh.. donc j’ai backupé le script, désinstallé podget, puis remis le script à sa place.. maintenant, tout a l’air ok (au moins pour mon utilisation..)