Streaming audio/vidéo avec cat & mplayer over SSH 1 sans chiffrement

Voici comment streamer tout types de fichiers, audio comme vidéo, contenus sur un serveur distant.

Nous utiliserons pour cela ssh(client/serveur), cat et mplayer.

Configuration du serveur SSH

/etc/ssh/sshd_config
Protocol 2,1

Créer un certificat RSA1
ssh-keygen -t rsa1 -f /usr/local/etc/ssh_host_key -N ""

invoke-rc.d ssh restart
Restarting OpenBSD Secure Shell server: sshd.

Si le démon sshd ne redémarre pas:
mkdir /var/empty
chown root:sys /var/empty
chmod 755 /var/empty

Recompiler ssh avec l’option –with-none

sshd-compilation

Client (poste bureautique sous Linux par exemple)

ssh -oCypher=none user@serveur -- cat ~/video.avi | mplayer -

Quelques explications pour finir

  1. Le client se connect en ssh(port:22) -> sur le serveur distant
  2. Une connexion ssh est ouverte entre le client et le serveur utilisant le protocol SSH1 (clef RSA1)
  3. Le client lance la commande cat à travers le tunnel ssh (créé avec l’option -oCypher=none), le flux de donnée transite en clair sans encryption sur le réseau allégeant le CPU sur le serveur et optimisant la BP.
  4. mplayer avec l’option –hard-framedrop améliore encore « le rendu » de la vidéo

Attention cependant certaines vidéos encoder en HD nécessite une BP > 100ko/sec en Up.

VNC over SSH

vnc ssh

Serveur

Installer vnc4server:
sudo apt-get install vnc4server

Lancer vncserver:
vncserver

xauth: creating new authority file /home/ben/.Xauthority
New 'eeebox:1 (ben)' desktop is eeebox:1
Starting applications specified in /home/ben/.vnc/xstartup
Log file is /home/ben/.vnc/eeebox:1.log

Desktop

Installer xvnc4viewer:
sudo apt-get install xvnc4viewer

Créer le tunnel ssh permettant de « binder » 5901 distant sur 5902 local:
ssh -f -N -L 5902:localhost:5901 eeebox

Connection au server VNC via le port local
xvncviewer localhost:2

App

Xemacs – Edit over SSH

Grâce au package TRAMP (Transparent Remote Access, Multiple Protocols), il est possible d’éditer des fichiers distants via SSH par exemple.

Installation (Debian) :

apt-get install tramp

Utilisation :

  • Avec xemacs :
  • xemacs /[ssh/user@host]/chemin/fichier

  • Avec emacs :
  • emacs /ssh:user@host:/chemin/fichier

Remarque :

Ajoutez (setq tramp-default-method « ssh »)
dans votre ~/.xemacs/custom.el pour de pas avoir à préciser la méthode ssh

Créer des liens SSH avec Firefox 3

Configurer votre client léger
Ouvrir Firefox à l’addresse suivante:

about:config

network.protocol-handler.app.ssh; /home/user/fox.sh
network.protocol-handler.external.ssh; true
network.protocol-handler.warn-external.ssh; true

/home/user/fox.sh

#!/bin/sh
gnome-terminal -e "ssh `perl -MURI -e 'print $u=URI->new($ARGV[0])->host;' $1`"

Intégrer des liens SSH à l’HTML

Il suffit maintenant d’intégrer des liens de cette forme:

a href="ssh://hostname"

En cliquant sur le lien une fenêtre de terminal s’ouvrira.

App

Organiser son code avec un dépot Subversion

Définition du répertoire SVN Racine:

SVNREPOS=/usr/local/share/svn

Création des utilisateurs et leurs droits associés:

groupadd svnusers
useradd -m svnadm -g svnusers
usermod -L svnadm
echo umask 002 >> ~svnadm/.bashrc
mkdir -p $SVNREPOS
chown -R root.svnusers $SVNREPOS
chmod -R u+wrx,g+wrx,o-wxr $SVNREPOS

Création du wrapper:

mv /usr/bin/svnserve /usr/bin/svnserve.bin
cat << EOF > /usr/bin/svnserve
#!/bin/sh
# wrap in order to put root in by default
# Script implemented by Adrian Robert <arobert@cogsci.ucsd.edu>
exec /usr/bin/svnserve.bin -r $SVNREPOS "\$@"
EOF
chmod u+wrx,g+rx-w,o+xr-w /usr/bin/svnserve

On se connecte sous l’utilisateur svnadm afin de créer les repositories projets:

su - svnadm

Créer le dépot svn
svnadmin create dossier/sousDossier/depot

Si vous souhaitez importer à partir d’un dump svn existant:

svnadmin load "/usr/local/svn/projet1" < mon_dump.svn

Si vous souhaitez importer à partir d’un répertoire:

svn import /home/user/projet1/ file:///usr/local/share/svn/projet1 -m "import initial de projet sous Zend Framework"

Création du fichier de configuration du projet1:

cat << EOF /usr/local/svn/projet1/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
EOF

Accéder en SSH au repository
svn list svn+ssh://<user-id>@<machine>/projet1

Sources:

App

Expect pour les rebonds ssh

Aprés un sudo apt-get install expect, voici le contenu du fichier ssh-bound :

#!/usr/bin/expect -f
# des que la chaine de caractère attendu en retour est matché,
# on attend 1 seconde et on envoit notre chaine
set timeout 1
# la 1ere commande qui est executée sur notre machine
# c'est le 1er saut
spawn ssh user@host1
# on "attend" du shell qu'il nous renvoit la chaine "assword"
expect "*?assword :"
# on envoit notre pw, \r pour retour chariot
send -- "MON_SUPER_PASS_EN_CLAIR\r"
# le prompt
expect "*05b\$ "
# 2eme saut
send -- "ssh user@host2\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# 3eme saut#!/usr/bin/expect -f
# des que la chaine de caractère attendu en retour est matché,
# on attend 1 seconde et on envoit notre chaine
set timeout 1
# la 1ere commande qui est executée sur notre machine
# c'est le 1er saut
spawn ssh user@host1
# on "attend" du shell qu'il nous renvoit la chaine "assword"
expect "*?assword :"
# on envoit notre pw, \r pour retour chariot
send -- "MON_SUPER_PASS_EN_CLAIR\r"
# le prompt
expect "*05b\$ "
# 2eme saut
send -- "ssh user@host2\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# 3eme saut
send -- "ssh user@host3\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# expect nous rend la main
interact
send -- "ssh user@host3\r"
expect "*?assword :"
send -- "MON_SUPER_PASS_EN_CLAIR\r"
expect "*05b\$ "
# expect nous rend la main
interact

Source

Recent Tweets

Catégories