jueves, 16 de agosto de 2012

Cosas con SSH

Ya sabréis que SSH es una potente aplicación para manejos remotos de los sistemas Linux. Con ella podemos conectarnos a un ordenador que este en otra parte del mundo de forma encriptada, de forma que podamos introducir comandos como si estuviéramos sentados delante.

SSH usa el puerto 22 TCP, consume muy poco ancho de banda. En linux se instala con tan solo:

 $ sudo apt-get install ssh

Al ser una conexion encriptada, la primera vez que te conectas a un equipo, te indica su "firma" para que la aceptes. Esto impedirá que si en un futuro te conectas y esta firma no coincide (por que hay otro equipo enmedio haciendose pasar por el original,lo que se llama "man in the midle) no te permita conectar.

Las posibilidades que permite son casi infinitas. Vamos a ver ejemplos:

1. Conectar dos equipos a traves de SSH

Como dije anteriormente, requiere del puerto 22 del equipo destino abierto, por que debe redirigirse ese puerto desde el router al ordenador. La conexión seria:

 $ ssh usuario_remoto@ip_equipo_remoto 

2. Conectar dos equipos a traves de un SSH remoto que corre en otro puerto distinto al 22

 En ocasiones, resulta interesante cambiar el puerto que corre el SSH, para evitar ataques dirigidos especificamente contra este en el puerto 22. Si este es nuestro caso (recuerden, han de cambiar primero el puerto al que quieran), la conexión se realizaría asi:

 $ ssh -p 2222 usuario_remoto@ip_equipo_remoto 

Donde -p 2222 seria el puerto donde escucha el ssh del equipo destino

3. Conectar a traves de SSH con otra aplicacion corriendo en el equipo

Esta es muy interesante. Suponer que queremos conectarnos al entorno grafico. Lo mas recomendable en Linux es hacerlo a traves de VNC, pero esto es una conexión insegura, y que ademas requiere de otro puerto abierto. La solución es realizar un tunel seguro entre los SSH y ya en el equipo remoto, una conexion "interna" (que ya si puede ser insegura) entre SSH y VNC. Se realizaria asi:

$ ssh usuario_remoto@ip_equipo_remoto -L 5901:127.0.0.1:5900

Donde -L le indica que va a conectar el puerto 5900 del equipo con IP 127.0.0.1 (esto es el mismo equipo destino), con otro 5901 del equipo local, como si fueran el mismo.

Así, ahora si en nuestro cliente VNC realizamos la conexion 127.0.0.1:5901, nos conectaremos al VNC remoto... magico verdad?

4. Conectar a través de SSH con otra aplicación corriendo en otro equipo de la red remota

Esto es tan potente, que permite conectar puertos de la misma LAN a traves de SSH. Por ejemplo, supongan que queremos conectarnos al router remoto (que lógicamente estará en otra ip de la red remota) para realizar unas modificaciones, y además el servidor SSH del equipo remoto corre en el puerto 222. Esto lo podemos hacer así:

$ ssh -p 222 usuario_remoto@ip_equipo_remoto -L 81:192.168.1.1:80

 Donde:

-p 222: ya lo hemos visto, es el puerto donde corre el SSH remoto

-L : indica que vamos  a unir dos puertos
81:192.168.1.1:80 : uniremos el puerto 80 (servidor web) remoto  de la IP 192.168.1.1 remota (usualmente es la direccion donde se encuentran los router domesticos), con el puerto 81 de nuestro equipo local.
Asi, si a continuacion escribimos en nuestro navegador la dirección: 127.0.0.1:81, nos conectaremos al servidor web del router remoto !!!!!

Ejecutar una aplicación X a través de SSH

Se puede, aunque evidentemente la ejecución será muy lenta, incluso ejecutar aplicaciones gráficas remotas pero mostrandolas en nuestro equipo local, para ello, deberemos escribir el modificador -X:

$ ssh usuario_remoto@ip_equipo_remoto -X 

Aunque Insisto en que no esperemos el mismo rendimiento como si se ejecutara en local. Solo debiera usarse para emergencias cuando no tengamos el VNC remoto funcionando.

5. Conectar por SSH con un equipo remoto que no tiene ningun puerto abierto

Esto es util para casos en los que el ordenador al que queremos acceder está en una red donde no podemos modificar nada (hoteles, puntos wifi libres, etc). Rizando el rizo, se puede realizar una conexion SSH inversa, en la que el puerto abierto tiene que estar en el equipo local.
En nuestro ejemplo, supongamos que tengo el puerto local del SSH en el 2222 y que esta correctamente abierto. Le tendremos que decir al usuario remoto que escriba (logicamente, debemos hacerle llegar nuestros datos de IP, usuario y password) :

$ ssh -p 2222 -R 9999:localhost:222 usuario_local@IP_equipo_local

Donde:

-p 2222 : es el puerto abierto de nuestro equipo local (remoto para el que realiza la conexion SSH, que recordemos, es el equipo al que queremos acceder y tiene los puertos bloqueados)
-R : conexión SSH inversa
9999:localhost:222 : 9999 será un puerto cualquiera de nuestro equipo local (insisto, puerto remoto para el que realiza la conexion SSH, que recordemos, es el equipo al que queremos acceder y tiene los puertos bloqueados), que usaremos como "puente".
localhost, para indicar que el puente será local (exactamente igual que si escribieramos 127.0.0.1)
222 el puerto donde corre el SSH remoto (local para el que hace la conexion, que insisto una vez mas, es el equipo al que queremos acceder y tiene los puertos bloqueados).

Una vez realizada la conexión inversa remota, ya solo falta, desde nuestro equipo local, completar la conexión con el equipo remoto:

$ ssh -p 9999 usuario_remoto@127.0.0.1

Donde:
- p 9999 : es el puerto elegido antes (que puede ser cualquiera no ocupado en el equipo local)

Saludos !!!!!!

miércoles, 15 de agosto de 2012

Sopcast en ubuntu, pero visto en la tele normal

Este ha sido mi desafio del dia: Ver Sopcast (video en P2P), en una tele normal.
Y digo del día, porque pensé que me iba a llevar más tiempo, pero la verdad es que se ha dado bastante bien
Esto es ideal para ver partidos de futbol de pago con calidad mas que aceptable, ya que cuanta mas gente está conectada, menos problema hay con la señal (y eso que a mi no me gusta el futbol).

Por ejemplo, dicen que un buen canal es el de vladimir (futbol en HD):
sop://broker.sopcast.com:3912/116205


1. Nucleo Sopcast

Lo primero que necesitamos es tener el nucleo del visor Sopcast instalado en el sistema Ubuntu. Digo el nucleo porque realmente no necesitamos ver la imagen en el ordenador, ya que esta se enviará a la tele (realmente al reproductor multimedia conectado a la TV a traves de un servidor DLNA).

Si solo vamos a instalar el nucleo sopcast, se hace así:

- Si el sistema es de 64bits también necesitaremos instalar las librerías de 32:
  $ sudo apt-get install ia32-libs

- Descargamos los archivos nucleo sopcast a la carpeta descargas:
http://download.easetuner.com/download/sp-auth.tgz

- Lo descomprimimos y movemos lo resultante a /usr/bin y /usr/local/bin:
$ sudo cp ~/Descargas/sp-auth/sp-sc-auth /usr/bin/sp-sc
$ sudo cp ~/Descargas/sp-auth/sp-sc-auth /usr/local/bin/sp-sc

$ sudo cp -a ~/Descargas/usr/lib/libstdc++.so.5* /usr/lib/

Tambien se puede añadir desde repositorio que lo contenga, por ejemplo:
 
$ sudo add-apt-repository ppa:jason-scheunemann/ppa
$ sudo apt-get update && sudo apt-get install sp-auth sopcast-player

Con ello, además se instalará el reproductor, que nos irá bien para comprobar que se ve el canal, aunque sea en la pantalla del ordenador.

Para hacerlo funcionar el nucleo, simplemente se tiene que escribir en un terminal:

$ sp-sc sop://broker.sopcast.com:3912/116205 3912 8902

Donde:
- El canal que queremos ver es sop://broker.sopcast.com:3912/116205
- El puerto por donde recibe el stream es 3912 (conviene abrirlo en el Router y dirigirlo al equipo)
- El puerto de emision (que lo recogerá el servidor DLNA) es el 8902


Si el navegador Firefox no sabe cómo abrir esta dirección, porque el protocolo (sop) no está asociado a ningún programa

Después de instalar Sopcast-Player , al pulsar un enlace "sop" me aparecía el mensaje: "Firefox no sabe cómo abrir esta dirección, porque el protocolo (sop) no está asociado a ningún programa".


Pues ya lo tengo resuelto después de probar varias soluciones que no funcionaban he hecho lo siguiente.

Edita el archivo "mimeTypes.rdf" que se encuentra en la carpeta "~/.mozilla/firefox/xxxxxxxx.default/" y añade la siguiente líneas "<RDF:li RDF:resource="urn:scheme:sop"/>" en la sección "<RDF:Seq RDF:about="urn:schemes:root">" tal como te muestro:

<rdf:seq rdf:about="urn:schemes:root">
  <rdf:li rdf:resource="urn:scheme:mailto/">
  <rdf:li rdf:resource="urn:scheme:irc/">
  <rdf:li rdf:resource="urn:scheme:ircs/">
  <rdf:li rdf:resource="urn:scheme:webcal/">
  <rdf:li rdf:resource="urn:scheme:sop/">
</rdf:seq>


y añade despues de </RDF:Seq> las siguiente líneas:

<RDF:Description RDF:about="urn:scheme:sop" NC:value="sop">
  <NC:handlerProp RDF:resource="urn:scheme:handler:sop"/>
</RDF:Description>
<RDF:Description RDF:about="urn:scheme:handler:sop" NC:alwaysAsk="true" />


Guarda las modificaciones y listo! Ahora si que funciona!! Cuando pulses un enlace "sop" se mostrará la ventana de "Abrir con..." O si prefieres como en mi caso ve a "Editar" --> Preferencias --> Aplicaciones y busca en la columna "Tipo de contenido" la palabra "sop", y modifica el tipo de acción seleccionar "sopcast-player" (que esta en "/usr/bin/sopcast-player"

2. Servidor DLNA

Ahora necesitamos un programa servidor de DLNA.
Este es el encargado de retransmitir el streaming a los demas sitios de la red local (en este caso el reproductor multimedia. Hay varios, pero personalmente me gusta Serviio (libre y gratuito), por lo que lo descargamos de su homepage:


http://www.serviio.org/download

No tiene instalacion, para poner el servidor en marcha en Ubuntu, simplemente se descomprime y se ejecuta el serviio.sh dentro de la carpeta /bin. El servidor es un demonio que funciona en segundo plano por lo que no veremos nada respecto a su ejecución.

Si ademas queremos arrancar la consola del servidor, ejecutaremos serviio_console.sh. Esto solo es necesario hacer cuando queremos modificar parametros de éste o ver que si efectivamente esta funcionando el servidor.

Así, para recibir el streaming retransmitido por el sp-sc, tendremos que realizar la siguiente modificacion en el servidor serviio a traves de su consola:


Donde:
- La direccion IP es la propia de la maquina y el puerto el proveniente del sp-sc http://127.0.0.1:8902/
- Le ponenos un nombre para reconocerlo en el cliente DLNA del reproductor multimedia, por ejemplo Sopcast

Guardamos y reiniciamos el servidor Serviio.

Una vez configurado el Serviio, si quieremos hacer mas comodo el visionado, podemos podemos crear un archivo sopcast.sh (que deberemos hacer ejecutable), con todos los comandos de una vez, poniendolo en un lugar comodo para su ejecucion (escritorio, por ejemplo):

#!/bin/sh

sp-sc s
op://broker.sopcast.com:3912/116205 3912 8902 &
cd /home/jose/Programas/Linux/serviio-1.0.1/bin/
./serviio.sh &
Solo hay que cambiar el canal por el queramos ver (sop://broker.sopcast.com:3912/116205), y cambiar la ruta del Serviio por donde lo tengais vosotros (cd /home/jose/Programas/Linux/serviio-1.0.1/bin/).


3. Reproductor multimedia conectado a la TV

Ya solo queda buscar en nuestro reproductor multimedia, que por supuesto, debe poder leer de la red (streaming), al servidor DLNA, llamado Serviio, y dentro de éste, la carpeta Video, dentro Online, y dentro de ésta, Sopcast.
Yo he probado con tres con exito:

- Popcorn Hour MNT A-100
- WD Live
- Reproductor multimedia del receptor satelite VU Plus Duo

Este es el caso mas complicado, ya que previamente hay que activar el programa UPnp DjMount. Esto se hace pulsando:

Boton azul --> Black Hole panel
Boton azul --> Extra settings
Buscamos UPnp DjMount y lo activamos

Volvemos al menu principal y activamos el reproductor, buscamos en DLNA, siguiendo con el resto como los demas.

Si todo ha ido bien, veremos pasados unos segundos el stream Sopcast procedentes del ordenador.

Saludos !!!!!!!!!!
Hola !!!

Este blog pretente ser un resumen-archivo de "desafios" conseguidos, relacionadas con la informatica y tecnologia en mi vida cotidiana.

La mayoria tendrá que ver con Linux (Ubuntu o Mint para ser exacto) e internet o sobre mi ultimo gran desafío: VOIP y mas concretamente Asterisk

Normalmente será un compendio de ideas o procedimientos resueltos de cosas que me interesan o preocupan y que las dejaré aquí a modo de recordatorio cuando las  haya conseguido poner en marcha.

Si llegas hasta aquí y te interesa... Bienvenido !!!