jueves, 30 de agosto de 2012

Entérate cuando pierde la cobertura tu Android

Alerta Cobertura!

He preparado una aplicación para los moviles con Android llamada Alerta Cobertura. Este es el link de Google Play https://play.google.com/store/apps/details?id=com.endika_iglesias.alerta.cobertura 
Y este es el texto de descripción: Tienes miedo de perder la cobertura y no darte cuenta de ello. Prueba Alerta Cobertura! la aplicación que he desarrollado es muy limitada pero hace su cometido. Emite un sonido fuerte cuando la cobertura se pierde y una campanilla cuando se recupera. Si teneis alguna duda o sugerencia estoy encantado de atenderlas, contactar conmigo en @endika_iglesias muchas gracias ;)
Por último aquí esta el evento creado en Weertik.
Un saludo

sábado, 25 de agosto de 2012

Eliminar ficheros de los Bucket de Amazon S3 con PHP

Buenas hace un tiempo publique en este blog Usar la SDK de Amazon S3 para subir ficheros ahora toca aprender a eliminarlos. Os dejo un ejemplo:
<?php
error_reporting(-1);
header("Content-type: text/html; charset=utf-8");
require_once 'sdk.class.php';
$ec2 = new AmazonEC2();
$bucket = 'NombreDelBucket';
authenticate($bucket, AmazonS3::ACL_PUBLIC);

//indicamos la ruta donde se localiza el fichero en el bucket.
   $response = $s3->delete_object($bucket, 'ruta/del/Fichero.txt');
//ejecutamos
   var_dump($response->isOk());
?>

viernes, 24 de agosto de 2012

Eliminar instancia EC2 con PHP parte 3 de 3

Y para terminar en esta última parte mostramos como eliminar una instancia con Amazon EC2. Para seguir las anteriores publicaciones:
crear instancia ec2 con php parte 1 de 3
editar instancia ec2 con pho parte 2 de 3

<?php
error_reporting(-1);
header("Content-type: text/html; charset=utf-8");
require_once 'sdk.class.php';
$ec2 = new AmazonEC2();
//SI QUEREMOS ELIMINAR (TERMINATE) UNA INSTANCIA EJECUTAMOS
$response = $ec2->terminate_instances('ID_DE_LA_INSTANCIA');
var_dump($response->isOK());

//EJEMPLO DE LA WEB OFICIAL
//$response = $ec2->terminate_instances('i-1f549375');
//var_dump($response->isOK()); 
Adiós nos vemos pronto.

jueves, 23 de agosto de 2012

Editar instancia EC2 con PHP Parte 2 de 3

Al igual que en el post anterior (crear instancia ec2 con php parte 1 de 3) en este editamos una instancia ya creada
<?php
error_reporting(-1);
header("Content-type: text/html; charset=utf-8");
require_once 'sdk.class.php';
$ec2 = new AmazonEC2();
//Editamos una máquina.
$response = $ec2->modify_instance_attribute('ID_DE_LA_INSTANCIA', array(
    'InstanceType.Value' => 'c1.medium'
));
var_dump($response->isOK());//True o False si todo ha ido bien o mal.

//EJEMPLO DE LA PÁGINA OFICIAL
//$response = $ec2->modify_instance_attribute('i-1f549375', array(
//    'InstanceType.Value' => 'c1.medium'
//));
//var_dump($response->isOK());
Gracias por leerme.

miércoles, 22 de agosto de 2012

Crear instancia EC2 con PHP parte 1 de 3

Muy buenas a todos, hace tiempo que quería publicar estos post. La pena es que actualmente no funcionan al 100% pero no tengo encuentro la forma ni el error. Sigo al pie de la letra toda la documentación de la API de Amazon EC2. 

En el siguiente ejemplo se verá como crearemos una instancia en EC2, con mis comentarios y ejemplos de la web oficial.

Según la ayuda y la info de la web está todo correcto no hay errores. Pero en mi caso no me crea la máquina. Cuando saque tiempo investigaré más en el asunto. Y os preguntareis si está mal por que lo publicas!! pues me repito diciendo que según la ayuda de los técnicos y la documentación de la web de Amazon AWS está correcto. Quiero pensar que el problema es mio por no abrir algún puerto o permisos.
<?php
error_reporting(-1);
header("Content-type: text/html; charset=utf-8");
require_once 'sdk.class.php';

//creamos una máquina a partir de una plantilla ya creada para ello rellenamos los siguientes datos recogidos por POST

$ami = $_POST['amis']; //IDENTIFICADOR DE LA AMIs

$instancetype = $_POST['instancetype']; //TYPO DE INSTANCIA MYCRO,SMALL...

$keyname = $_POST['key']; //NOMBRE DE LA CLAVE DE ACCESO

$securitygroup = $_POST['securitygroups']; //ID DEL GRUPO DE SEGURIDAD

$ec2 = new AmazonEC2();

$response = $ec2->run_instances($ami, 1, 1, array(

    'KeyName' => $keyname,

    'InstanceType' => $instancetype,

    'SecurityGroupId' => $securitygroup,

));

//ejemplo de la web oficial
//$response = $ec2 -> run_instances(
//'ami-38fe7308', 1, 1,
//array(
//'InstanceType' => 'm1.small',
//'KeyName' => 'my-php-key-pair',
//'SecurityGroup' => 'my-php-security-group'));

if (!($response->isOK())) {
    echo "<p class='error'>ERROR! No se ha podido crear la instancia!</p>";
return;}

$instance = $response->body->instancesSet->item->instanceId;
$message = "<p>La instancia se a creado correctamente.</p>";
$message .= ("<p>Instancia ID: <b>$instance</b></p>");

$response = $ec2->describe_instances(array(
    'Filter' => array(
       array('Name' => 'instance-id', 'Value' => "$instance"),
    )
));

if (!($response->isOK())){
    echo "<p class='error'>ERROR! No se puede recibir el hostname de la instancia!</p>";
return;}

$hostname = $response->body->reservationSet->item->instancesSet->item->dnsName;
$message .= "<p>Host de la instancia: <b>$hostname</b></p>";
$message .= "<p>Para conectarte usa el comando:".
"<b>ssh -i $keyname.pem usuario@".$hostname."</b></p>";
echo $message;
Cuando de con mi error actualizaré la información. De todas formas espero que os ayude a vosotros.

sábado, 9 de junio de 2012

guía rápida y sencilla para montar y usar tu servidor GIT con Ubuntu

Buenas frikinautas para todos aquellos programadores que quieren usar su propio servidor como un controlador de versiones. Hoy voy a mostrar lo sencillo que sería tener tu propio servidor con Git.
Primero instalamos en nuestro servidor lo siguiente:
sudo apt-get install git-core openssh-server
Con esto ya tenemos lo necesario para crear nuestro primer repositorio. Para ello nos creamos una carpeta donde nos apetezca y creamos en ella nuestro repositorio:
mkdir repositorios
cd repositorios
git init --bare mi_proyecto.git
Con esto ya tenemos el servidor listo. Solo nos falta configurar nuestro cliente instalando:
sudo apt-get install git-core openssh-client
Una vez instalado configuramos nuestro Git para que cada vez que realicemos commit quede registrado nuestro nombre y correo. Para ello editamos
vim /home/TUusuario/.gitconfig
y lo editamos rellenando los campos por ejemplo:
[user]
name = NombreUsuario
email = Correo@Usuario.com
Así al hacer los commits saldrá nuestro nombre y correo. Bien ya solo nos queda un paso para poder tener configurado nuestro cliente. Nos creamos una carpeta en nuestro equipo y nos bajamos TODO el repositorio del proyecto de nuestro servidor.
mkdir misProyectos
cd misProyectos
git clone ssh://usuarioServidor@ipServidor/~/repositorios/mi_proyecto.git
Dentro de nuestra carpeta nos aparecerá una nueva en ella es donde debemos trabajar añadir ficheros, editarlos......
Una vez que hemos colocado todos los ficheros que queremos en ella podemos añadirlo al repositorio.
git add .
git add *
git add -A
git add NombreFichero
Una vez echo esto. Hacemos commit para guardar nuestras modificaciones
git commit -m "Prueba inicial "
El parametro -m es para dejar un comentario del commit que vas a realizar. Cuando tengas todos los commit listos, sincronizamos con el servidor ejecutando:
git push origin master
Por otro lado si queremos actualizar nuestro repositorio local con los cambios que han podido subir otros usuarios al servidor ejecutamos:
git pull --rebase
Para ver un historial de los cambios que se han ido realizando
git log
en caso de querer deshacer el último commit ejecutamos
git reset HEAD~1
Si queremos deshacer más cambios de un golpe sustituimos el 1 por otra cifra. Y creo que con esto ya podemos trabajar con nuestro nuevo repositorio.

un saludo 

jueves, 7 de junio de 2012

Ubuntu instalador de OpenERP 6.0.4 de un golpe

Simplificando las tareas de HowtoForge para la instalación de OpenERP 6.0.4 he creado un script que en dos simples pasos se instala todo.
Inicialmente hay que crear 3 ficheros aquí os dejo el contenido de los ficheros:
Código del fichero openerp-server este contiene el código que se va a usar para iniciar el servicio automáticamente
#!/bin/sh

### BEGIN INIT INFO
# Provides:             openerp-server
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Enterprise Resource Management software
# Description:          Open ERP is a complete ERP and CRM software.
### END INIT INFO

PATH=/bin:/sbin:/usr/bin
DAEMON=/opt/openerp/server/bin/openerp-server.py
NAME=openerp-server
DESC=openerp-server

# Specify the user name (Default: openerp).
USER=openerp

# Specify an alternate config file (Default: /etc/openerp-server.conf).
CONFIGFILE="/etc/openerp-server.conf"

# pidfile
PIDFILE=/var/run/$NAME.pid

# Additional options that are passed to the Daemon.
DAEMON_OPTS="-c $CONFIGFILE"

[ -x $DAEMON ] || exit 0
[ -f $CONFIGFILE ] || exit 0

checkpid() {
    [ -f $PIDFILE ] || return 1
    pid=`cat $PIDFILE`
    [ -d /proc/$pid ] && return 0
    return 1
}

case "${1}" in
        start)
                echo -n "Starting ${DESC}: "

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        stop)
                echo -n "Stopping ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                echo "${NAME}."
                ;;

        restart|force-reload)
                echo -n "Restarting ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                sleep 1

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        *)
                N=/etc/init.d/${NAME}
                echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
                exit 1
                ;;
esac

exit 0


Código del fichero openerp-web este contiene el código que se va a usar para iniciar el servicio web automáticamente.


### BEGIN INIT INFO
# Provides:             openerp-web
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    OpenERP Web - the Web Client of the OpenERP
# Description:          Open ERP is a complete ERP and CRM software.
### END INIT INFO

PATH="/sbin:/bin:/usr/sbin:/usr/bin"
DAEMON="/opt/openerp/web/openerp-web.py"
NAME="openerp-web"
DESC="openerp-web"

# Specify the user name (Default: openerp).
USER=openerp

# Specify an alternate config file (Default: /etc/openerp-web.conf).
CONFIGFILE="/etc/openerp-web.conf"

# pidfile
PIDFILE=/var/run/$NAME.pid

# Additional options that are passed to the Daemon.
DAEMON_OPTS="-c $CONFIGFILE"

[ -x $DAEMON ] || exit 0
[ -f $CONFIGFILE ] || exit 0

checkpid() {
    [ -f $PIDFILE ] || return 1
    pid=`cat $PIDFILE`
    [ -d /proc/$pid ] && return 0
    return 1
}

case "${1}" in
        start)
                echo -n "Starting ${DESC}: "

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        stop)
                echo -n "Stopping ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                echo "${NAME}."
                ;;

        restart|force-reload)
                echo -n "Restarting ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                sleep 1

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        *)
                N=/etc/init.d/${NAME}
                echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
                exit 1
                ;;
esac

exit 0

Por último este es el fichero instalador.sh es la base de todo con el siguiente código procederemos a instalar el servidor.

if [ $1 == 2 ]; then
 sudo apt-get install python python-psycopg2 python-reportlab \
 python-egenix-mxdatetime python-tz python-pychart python-mako \
 python-pydot python-lxml python-vobject python-yaml python-dateutil \
 python-pychart python-pydot python-webdav
 sudo apt-get install python-cherrypy3 python-formencode python-pybabel \
 python-simplejson python-pyparsing
 wget http://www.openerp.com/download/stable/source/openerp-server-6.0.4.tar.gz
 wget http://www.openerp.com/download/stable/source/openerp-web-6.0.4.tar.gz
 cd /opt/openerp
 sudo tar xvf ~/openerp-server-6.0.4.tar.gz
 sudo tar xvf ~/openerp-web-6.0.4.tar.gz
 sudo chown -R openerp: *
 sudo cp -a openerp-server-6.0.4 server
 sudo cp -a openerp-web-6.0.4 web
 sudo cp /opt/openerp/server/doc/openerp-server.conf /etc/
 sudo chown openerp:root /etc/openerp-server.conf
 sudo chmod 640 /etc/openerp-server.conf
 #configuramos que se inicie el servidor al arranque
 sudo cp openerp-server /etc/init.d/openerp-server
 sudo chmod 755 /etc/init.d/openerp-server
 sudo chown root: /etc/init.d/openerp-server
 sudo mkdir /var/log/openerp
 sudo chown openerp:root /var/log/openerp
 sudo update-rc.d openerp-server defaults
 #configuramos que se inicie el servicio web al arranque
 sudo cp /opt/openerp/web/doc/openerp-web.cfg /etc/openerp-web.conf
 sudo chown openerp:root /etc/openerp-web.conf
 sudo chmod 640 /etc/openerp-web.conf
 sudo cp openerp-web /etc/init.d/openerp-web
 sudo chmod 755 /etc/init.d/openerp-web
 sudo chown root: /etc/init.d/openerp-web
 sudo update-rc.d openerp-web defaults
else
 sudo apt-get install openssh-server denyhosts
 sudo apt-get update
 sudo apt-get dist-upgrade
 sudo adduser --system --home=/opt/openerp --group openerp
 sudo apt-get install postgresql
 sudo su - postgres
 createuser --createdb --username postgres --no-createrole --pwprompt openerp
 echo "Ahora ejecuta la segunda parte del programa primero escribe exit y despues ./instalador.sh 2"
fi

#fuente http://www.howtoforge.com/how-to-install-openerp-6-on-ubuntu-10.04-lts-server
 
Después de crear los tres ficheros openerp-server, openerp-web y instalador.sh los tenemos que alojar en la misma carpeta de nuestro servidor Ubuntu. Para comenzar con la instalación ejecutamos:

sudo chmod 777 instalador.sh
sudo chmod 777 openerp-web
sudo chmod 777 openerp-servidor
#y comenzamos la instalación ejecutando
./instalador.sh

En principio el instalador.sh instalará los paquetes iniciales para preparar el usuario postgresql y openerp. Una vez terminado tenemos que ejecutar exit y nos pedirá introducir la clave del usuario postgres. Es muy probable que durante este breve proceso necesite confirmación del usuario para instalar los paquetes. Una vez listo y escrito exit volveremos a nuestro usuario inicial y nos aparecerá un mensaje donde nos pide que ejecutemos la segunda parte de la instalación.

./instalador.sh 2

En esta segunda parte se instalaran TODOS los paquetes necesarios. Como he dicho antes es posible que se necesite confirmación del usuario. Después se descarga el instalador OpenERP del server y web. Descomprime los ficheros y los instala en el servidor y los prepara para que al reiniciar el equipo arranquen solos automáticamente. Una vez echo esto si entramos en http://localhost:8069 accederemos a nuestro servidor OpenERP. Lo único que falta es configurar la clave de la BBDD en nuestro servidor.

Y esto es todo espero que os sirva de algo

un saludo 

martes, 8 de mayo de 2012

Python con C++

Usaremos una biblioteca incluida de forma nativa a partir de las versiones 2.5 de Python llamada ctypes. Está nos permite usar funciones de bibliotecas compartidas de C. De esta forma podemos conseguir que nuestro programa no pierda la eficiencia de C y sin renunciar la legibilidad y limpieza de Python.

Comenzamos con un ejemplo sencillo crearemos una biblioteca de C llamada "bPrimos.c".
int esPrimo(int n){
    int nc=0;
    for(i=1;i<=num;i++){
        if(n%i==0) nc++;
        if(nc>2) break;
    }
    if(nc==2) return "Es primo";
return "No es primo";}

Ahora compilamos la bilbioteca "bPrimos.c" para ello ejecutamos lo siguiente:
gcc -c -fPIC bPrimos.c
gcc -shared bPrimos.o -o bPrimos.so

Una vez creada la librería "bPrimos.so" podemos usarla en nuestro código de Python
import sys

#comprobamos que tenemos incluida la librería ctypes
try:
    from ctypes import *
except ImportError:
    print "Error, la biblioteca ctypes no está disponible"
    sys.exit(-1)

#Cargamos la biblioteca creada en C
p=cdll.LoadLibrary('pPrimos.so')

numero=int(raw_input("Introduce una cifra "))
print 'El numero introducido ', p.esPrimo(numero)

Sencillo verdad. Espero que os sea de gran utilidad. 

lunes, 7 de mayo de 2012

PHP ejecutar script Python pasando parametros

En el siguiente ejemplo crearemos un script en Python que cuente los caracteres de una cadena de texto que le hemos pasado por PHP. Este último se encargará de recoger lo que dice Python y mostrarlo por la pantalla.

Script Python contar.py
# -*- coding: iso-8859-15
import sys
import os
if len(sys.argv) >= 2:
 print "El texto '%s' tiene %s caracteres" % (sys.argv[1],len(sys.argv[1]))
else:
 print "Necesito un parámetro"

Código PHP ejecutar.php
<?php
$salida= array(); //recogerá los datos que nos muestre el script de Python

    $texto="Hola Mundo";
    exec("python contar.py '".$texto."'",$salida);
    echo $salida[0];
?>
Realmente fácil.

Python conocer el sistema operativo

Cómo saber en que sistema operativo se ejecuta el script.
import plataform
#Conocer si se esta ejecutando en un sistema Linux o Windows
if platform.system() == "Windows":
   print "Corro en Windows"
elif platform.system() == "Linux":
   print "Corro en Linux"

Python ejecutar comandos de sistema

Cómo ejecutar comandos del sistema en Python
import os
#Ejecutar comandos del sistema
os.system("COMANDO EJECUTAR")

jueves, 26 de abril de 2012

Weertik la red social donde compartes tus escapadas

Imaginaros que siempre que salgas de fiesta o realices un viaje con un grupo de amigos no tienes que pasar las fotos por un CD o DVD simplemente con un click ya tendríais todo.

Os presento la red social Weertik, donde la privacidad del usuario es primordial. No es como todas las redes sociales conocidas. Esta es más privada de cara a tu circulo de amistades. Donde todo lo que compartas, escribas, publiques... solo tus amistades o quien tu permitas podrá verlo. A no ser que quieras hacerlo público en ese caso TODA la red de Weertik lo sabrá. 

Que diferencia a Weertik de otras redes sociales
Como ya os he comentado la privacidad pero hay una característica muy buena que hará de weertik una red social útil. Las fotos que publiques en una quedada/evento que estés organizando con tus amigos u otros usuarios podrán ser descargadas en calidad original. No os asustéis eso solo y únicamente podrán hacerlo los que pertenecen a la quedada aunque para los más abiertos cabe la posibilidad que lo pueda hacer cualquier usuario de weertik.

¿Que hago yo con una cuenta de Weertik?
Weertik está pensado para facilitarte las quedadas con tus amigos. En ella podrás organizar eventos/quedadas ya sea con tus amigos o por que eres un comunity manager y te dedicas profesionalmente a ello. Podrás formular preguntas para que los usuarios del evento voten por la respuesta que quieran, enviaros comentarios, marcar un punto de encuentro... y no se queda hay ya que con el tiempo se pretende mejorar la calidad de este servicio gracias a vosotros y vuestras opiniones. 

un saludo y espero veros la próxima vez en weertik

lunes, 5 de marzo de 2012

Ubuntu ejecutar script al inicio

Uno de los problemas que nos surge a la hora de administrar un servidor es añadir un script al inicio del mismo. 

Con la interfaz gráfica es muy sencillo, ya que tiene un modulo para administrar las aplicaciones que se ejecutan al inicio.

Bien nosotros usaremos update-rc.d con este comando podemos indicar que se ejecute en cada inicio el script que nosotros le indiquemos. Veamos un ejemplo

sudo update-rc.d NuestroScript.sh defaults

Espero que os sea de utilidad.

jueves, 23 de febrero de 2012

controlar que un programa no se ejecute más de una vez

Cómo controlar que un programa Java se cargue más de una vez. Es decir, que si ya lo hemos lanzado, evitemos que se vuelva a lanzar.

Existen formas desde Java Web Start y el modo SingleInstanceService para evitar que un programa se cargue dos veces. Pero en nuestro caso vamos a realizarlo de una forma "manual" en Java, pero muy efectiva.

El truco es que el programa Java cree un objeto que esté escuchando a un puerto específico del ordenador. Para ello utilizamos un ServerSocket, objeto que nos permite crear un objeto escuchando a un determinado puerto.
private static ServerSocket SERVER_SOCKET;
SERVER_SOCKET = new ServerSocket(12345);
Escoge un puerto que no sea el estándar de los protocolos: 80 para el http, 21 para el ftp,...

Además vemos que el objeto ServerSocket que hemos instanciado es un objeto estático dentro de nuestro programa. Así, nuestro programa tendrá un listener sobre un puerto, al que nadie dirá nada, pero que lo dejará como reservado.

Lo que sucede es que si intentamos volver a crear un ServerSocket sobre ese puerto, saldrá una excepción indicando que el puerto ya está en uso. Esto nos permite controlar que ya hay una instancia de nuestro programa ejecutándose.
try {
       SERVER_SOCKET = new ServerSocket(12345);
       System.out.println("La primera instancia de la aplicación...");
       System.in.read();
} catch (IOException x) {
       System.out.println("La aplicación ya se está ejecutando...");
}

Muy simple y con esto podemos evitar que un programa Java se ejecute dos veces.

viernes, 17 de febrero de 2012

proteger nuestro servidor: iptables bloquear y desbloquear una IP

Proteger nuestro servidor de ataques es primordial. También es muy cómodo usar paquetes que te hacen todo el trabajo como fail2ban.

 Una opción para proteger el servidor en este caso de ataques DDOS es usar los script de InetBase estos nos dan la posiblidad de protequerlo en sencillos pasos. Se trata de un script que analiza el trafico comprobando posibles ataques. Instalarlo en nuestro servidor web es sencillo

wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh 
./install.sh 


Igualmente tienes el widget para desinstalar si ya no lo deseas:
wget http://www.inetbase.com/scripts/ddos/uninstall.ddos 
chmod 0700 uninstall.ddos 
./uninstall.ddos 


Una vez instalado DoS-Deflate, podemos editar la configuración que se ubica en /usr/local/ddos/ddos.conf:
* FREQ=1.- Cada cuantos minutos correr el script. Viene programado para correr cada minuto, lo que parece razonable, teniendo en cuenta que de un minuto a otro podrían saturarte mucho el servidor web.  
* NO_OF_CONNECTIONS=150.- Indica el límite de conexiones, 150 en este caso. Si una conexión IP hace más conexiones que este límite, se le bloqueará por el tiempo que se especifica en BAN_PERIOD.  
* APF_BAN=1 . Si es igual a uno (1) se usará APF, sino lo tienes instalado, cámbialo por cero (0) para usar iptables.  
* BAN_PERIOD=600. Cantidad de segundos en que la IP estará bloqueada. Son 10 en la configuración predeterminada, puedes cambiarlo por una hora (3600 segundos).

Teniendo funcionando el script, se nos enviará un mail con el detalle de la ip bloqueada.

Si deseas que alguna IP conocida realice muchas conexiones hacia tu servidor web, y la tienes bien identificada puedes indicarlo en /usr/local/ddos/ignore.ip.list para que no sea bloqueada.

Por mucho paquete que incluyamos en nuestro servidor par hacerlo más seguro. Es muy fácil que una máquina atacante se salte estas restricción, ya que puede que cada 1 minuto intente validarse con un usuario y contraseña. Si es una opción muy poco común, pero creerme que existe.

En estos casos la solución es muy rápida y fácil con iptables.
//Bloquear dirección IP
sudo iptables -A INPUT -s dirección_ip -j DROP
//En caso de  querer desbloquear usar
sudo iptables -D INPUT -s dirección_ip -j DROP

jueves, 16 de febrero de 2012

nmap y que no te engañen

Los cortafuegos (firewalls) al detectar un scaneo de puertos se defienden mandando ACK a todos los puertos de esta forma mostrará que tiene todos los puertos abiertos.
sudo nmap -sS 10.10.0.1


Nmap cuenta con el parámetro -T donde podemos indicar la velocidad con la que escaneará los puertos. Con la cifra más alta es más agresiva y con la más baja será difícil detectar el tráfico. Dependiendo de nuestro interés a la hora de escanear, podemos elegir entre los siguiente valores
paranoid (0)
sneaky (1)
polite (2)
normal (3) opción por defecto
aggressive (4)
insane (5)

Para evitar que el firewall nos engañe mostrándonos todos los puertos abiertos podemos probar con -T2
sudo nmap -sS 1.2.3.4 -T2

miércoles, 15 de febrero de 2012

Ubuntu por consola ver espacio libre

Una situación complicada en la de administración de un servidor vía consola es saber cuanto espacio libre queda en el servidor o cuales son los ficheros de mayor tamaño para identificar donde está el problema del espacio. Os dejo una lista de comandos que pueden ser útiles.

Conocer el tamaño total, el espacio usado y el espacio libre del sistema.
df -h

Lista los ficheros como "ls" pero nos muestra los tamaños de los archivos.
ls -sh

Listar todos los ficheros del disco duro cuyo tamaño sea mayor a 1Giga.
find / -size +1G


lunes, 6 de febrero de 2012

Navegador web en papel, para diseñar páginas

Buscando por internet me he topado con estas peculiares herramientas para diseñadores web muy interesantes.


Paper Browser son plantillas en papel listas para descargar e imprimir. Reproducen la ventana del navegador web con rejillas y guías para diseñar páginas web en distintos tamaños (800, 960, 1024 píxeles)

Se pueden descargar con distintas configuraciones o comprar en forma de cuadernos de espiral con esas mismas plantillas como páginas.

Ideales para diseñadores web que saben que siempre se debe comenzar a bocetar en papel, no en Photoshop.








App Sketchbooks El dibujo de las hojas varía dependiendo del cuadernillo que escojamos:



  • iPad App Sketchbook: el tamaño y las siluetas de cada página son las del iPad, punteadas en la parte central como guía para el dibujo de los elementos de la pantalla.
  • iPhone App Sketbook: lo mismo, pero la versión iPhone. Hojas con tres siluetas de tres pantallas y espacio para anotaciones.

  • UX Sketchbook: un cuaderno de diseño general de sitios y aplicaciones web. Cada hoja tiene siluetas de un navegador web, con un grid para ayudar al dibujo y espacio para comentarios.
  • Responsive Design Sketchbook:  Las siluetas están preparadas para pensar en las diferentes resoluciones y diseñar una interfaz adaptable a todas ellas.
El precio es el mismo para todos ellos: 12,95$.






El Web Design Sketchbook  es un libro de bocetos pensado para diseñadores web. Sus páginas tienen impresas rejillas para dibujar, además de prototipos de ventanas de navegadores web en diferentes tamaños y espacios libres para tomar notas.

El equipo que ha editado este libro también ha publicado un PDF con varias plantillas para descargar libremente desde la web.

Su precio es el más caro de todas las opciones que comentamos en este artículo: 30$.










UI Stencils  es una tienda online para diseñadores web y de aplicaciones para móviles. Se hicieron populares cuando mostraron al mundo su nueva idea: una regla de dibujo como las de toda la vida, pero con patrones de diseño de inferfaces de usuario en vez de formas geométricas. Es una regla que te ayuda a tomar medidas y a dibujar botones, iconos, formularios, etc.
En la tienda puedes encontrar unos librillos de hojas con cuadrículas de ayuda para el dibujo y con algunas siluetas ya impresas: navegadores web, contornos de iPhone/iPad… e incluso puedes comprarlos como hojas normales o con adhesivo, para poder quitar las hojas y pegarlas donde quieras.

Es un rollete artesano y simple, aunque para no tener tapas ni anillas creo que es un poquitín caro, comparándolo con otras soluciones. Para ver en detalle una hoja de los librillos, está disponible una plantilla de navegador web en A4 para descargar en PDF.

Un librillo cuesta 13.95$ y te hacen descuento si compras varios a la vez.
Las reglas cuestan 26.95$, también te hacen descuento por varias compras y viene con un lapicero.







Behance Outfitter, en la tienda online puedes ver el catálogo completo. Tienen libretas pequeñas pensadas para la movilidad, paquetes de hojas y tarjetas basadas en su método de gestión de tareas, cuadernos con diferentes tapas y anillas…
Pero la joya son el Dot Grid Book y el Action Book. El primero es un cuaderno un poco más grande que un A4 con un papel de gran grosor y textura, perfecto para dibujar, pintar y tomar notas. Con anillas resistentes y unas tapas duras muy elegantes que da gustito tocarlas.

El segundo, el Action Book, es exactamente el mismo cuaderno que el Dot Grid, pero pensado para los seguidores de la metodología. En las caras frontales de las páginas, incluye un lateral con espacios para capturar las acciones a realizar y después recortarlas o trasladarlas donde quieras.

Estos dos valen 15$ cada uno.

Ficheros: conocer la fecha de modificación en Java

En primer lugar deberemos de acceder al fichero mediante la clase File.
File fichero = new File("test.txt");

Ahora que ya tenemos instanciada la clase File utilizaremos el método .lastModified(), el cual nos devolverá la fecha de la modificación pero en formato de milisegundos.
long ms = fichero.lastModified();

Así, las siguientes líneas tendrán que servirnos para convertir los milisegundos en una fecha. Esto, en Java, lo podemos conseguir mediante una clase Calendar, la cual instanciaremos mediante un Date y el resultado devuelto por .lastModified().
Date d = new Date(ms); 
Calendar c = new GregorianCalendar();
c.setTime(d);

Por último nos apoyaremos en las constantes Calendar.DATE, Calendar.MONTH, Calendar.MINUTE,... para sacar los valores que nos ayuden a obtener la fecha de modificación de un fichero con Java.

dia = Integer.toString(c.get(Calendar.DATE));
mes = Integer.toString(c.get(Calendar.MONTH));
annio = Integer.toString(c.get(Calendar.YEAR));
hora = Integer.toString(c.get(Calendar.HOUR_OF_DAY));
minuto = Integer.toString(c.get(Calendar.MINUTE));
segundo = Integer.toString(c.get(Calendar.SECOND));

un saludo

viernes, 3 de febrero de 2012

Aumenta tu creatividad con estos 29 consejos


Esta es la lista de cosas que nos recomienda el vídeo:
  1. Elabora listas 
  2. Llévate un cuaderno de notas a todas partes 
  3. Practica la escritura libre 
  4. Aléjate del ordenador 
  5. Deja de castigarte a ti mismo 
  6. Relájate 
  7. Canta en la ducha 
  8. Toma café 
  9. Descubre nueva música 
  10. Mantén una actitud abierta 
  11. Rodéate de gente creativa 
  12. Escucha 
  13. Colabora 
  14. No te rindas 
  15. Practica, practica, practica… 
  16. Permítete cometer errores 
  17. Viaja a nuevos lugares 
  18. Enumera tus virtudes 
  19. Descansa mucho 
  20. Asume riesgos 
  21. Rompe las reglas 
  22. No fuerces nada 
  23. Lee una página del diccionario 
  24. Crea tu propio esquema de trabajo 
  25. Deja de intentar ser alguien perfecto 
  26. ¿Tienes una idea? Anótala 
  27. Mantén ordenado tu espacio de trabajo 
  28. Diviértete 
  29. Acaba algo 
visto en Soy Gik

jueves, 2 de febrero de 2012

Tiempo de un vídeo con HTML5

Podemos consultar el tiempo total de un vídeo utilizando el atributo duration del HTMLMediaElement.
var fvideo = document.getElementById("miVideo");
document.write(fvideo.duration);

En este caso el atributo duration, no nos devolverá ningún valor. Esto es debido a que la información del tiempo total de un vídeo no es cargada hasta que tenemos la información de los metadatos del vídeo.

Para ello tenemos el evento loadeddata. Así que tendremos que poner un listener sobre dicho evento en el elemento video. En este caso utilizaremos el método.addEventListener() para llevar a cabo dicha tarea.
var fvideo = document.getElementById("miVideo");
fvideo.addEventListener("loadeddata",function(ev){
       ...
},true);

Será dentro del listener dónde codifiquemos el acceso al campo duration del HTMLMediaElement para obtener el tiempo total de un vídeo HTML5.

var fvideo = document.getElementById("miVideo");
fvideo.addEventListener("loadeddata",function(ev){
       document.getElementById("tiempoTotal").innerHTML = fvideo.duration;
},true);

un saludo

sábado, 21 de enero de 2012

Usar la SDK de AmazonS3 para subir ficheros con PHP

Muy simple y en sencillos pasos os explicaré como podemos subir nuestros ficheros a nuestro almacen de amazon S3.

Para empezar nos descargamos la SDK de la web oficial Descargar SDK para PHP.
Descomprimimos y configuramos el fichero config-sample.php y realizamos lo siguiente:
  • introducimos nuestra key donde pone 'key' => 'PegamosNuestraKey', 
  • y la clave secreta donde pone 'secret' => 'PegamosNuestraClave',
  • por último guardamos el fichero en el mismo sitio con el nombre config.php

Una vez echo esto solo nos queda crear el fichero php con la siguiente información.
authenticate($bucket, AmazonS3::ACL_PUBLIC);

//indicamos la ruta donde almacenarlo del bucket y la ruta del fichero a copiar.
   $s3->batch()->create_object($bucket, 'carpeta_bucket/nombreNewFichero.txt', array(
    'fileUpload' => 'FICHEROaCOPIAR.txt',
    'acl' => AmazonS3::ACL_PUBLIC
   ));

//para acabar subimos el fichero
   $file_upload_response = $s3->batch()->send();

//si queremos comprobar que todo está correcto
   if ($file_upload_response->areOK()) echo "Fichero subido correctamente";
   else echo "Error, no se ha subido el fichero";
?>
Suficiente ya esta listo, solo tengo dos pegas hay que controlar que el fichero se ha subido bien, antes de eliminar el original o desecharlo por que puede que si se da el caso de que hay muchas peticiones de subida alguna no termine correctamente. La otra pega que no se si es un problema de mi framework que he usado pero los ficheros que quieres subir tienen que estar en el mismo directorio que el php que los va ha subir, tiene fácil solución con usar copy(); 

Espero que os sea útil. Se que últimamente no hago mas que hablar de PHP me encantaría probar la SDK para JAVA o los otros lenguajes para la que esta disponible, prometo que en mis futuros post intentare dejar de hablar tanto de PHP.

un saludo a todos

viernes, 20 de enero de 2012

Crear tu sistema de caché con PHP

Os presento el último grito de moda. Un sencillo fragmento de código que te permite cachear nuestras páginas web.

¿Que ventajas tiene esto?
En páginas muy visitadas que necesitan mucho tiempo de carga, páginas lentas y para evitar la larga espera. O para evitar tráfico innecesario de una web o la sobrecarga de peticiones en el servidor... Podemos cargar la web ya almacenada en el cliente.

¿Cómo?
Aplicamos el siguiente código
< ? p h p
       // Definimos la ruta y el nombre del archivo en caché
       $cachefile = 'cached-files/'.date('M-d-Y').'.php';
       
       //Definimos el tiempo de vida del fichero en segundos. Por ejemplo 5 horas.
       $cachetime = 18000;

       //Comprobamos si el fichero caché está fresco y aun sirve. Si es así, Lo mostramos y salimos.
       if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
              include($cachefile);
              exit;
       }

       // Si no hay ningún archivo o el archivo de demasiado viejo, mostramos la página y la capturamos.
       ob_start();
? >
< h t m l >
       Código html
< / h t m l >
< ? p h p
       // Una vez terminado guardamos el contenido en el fichero
       $fp = fopen($cachefile, 'w');
       fwrite($fp, ob_get_contents());
       fclose($fp);

       // Finalmente enviamos la salida al navegador
       ob_end_flush();
? >

jueves, 19 de enero de 2012

La mierda del WhatsApp

Como podéis ver, me parece una aplicación que está echa de pena. Por suerte en esta vida las cosas mas tontas son las que triunfan. La información que voy a compartir está sacada del estudio realizado Alberto Ortega en su post 'WhatsApp y su seguridad, ¿pwn3d?'. Es decir que nada de lo que ponga aquí es mentira esta comprobado.

Bien y ¿porque ODIO esta aplicación? muy simple, como desarrollador pienso que una aplicación que usa el puerto 443(HTTPS) y el protocolo XMPP para enviar los mensajes por el puerto 5222 a bin-short.whatsapp.net Como narices se les ocurre enviarlo en ¡¡TEXTO PLANO!! cagada de primer curso.

¿Como nos podemos aprovechar de ese error?
Os paso unos links del mismo autor que ha desarrollado la aplicación WhatsAppSniffer en fase Beta. Solo hay que arrancar el programa, seleccionar un adaptador que se pueda poner en modo promiscuo introduciendo su número y pulsar enter. WhatsAppSniffer esperará a que los paquetes comiencen a pasar y los irá mostrando en pantalla con sus respectivos datos.

No se si opinareis lo mismo pero suponiendo que esto se solucione en alguna futura actualización ¿que nos queda?
Grupos de usuarios de solo un máximo de diez personas.
Solo un año gratis y después hay que pagar.
...
No soy partidario de apoyar a Apple pero actuaron bien en quitar WhatsApp del AppStore. Y como siempre la cagaron al permitir que vuelva al AppStore.

Predicar esta aplicación WhatsAppSniffer para que todos hagan uso de ella y terminen por mejorar el programa o retirarlo por sus agujeros de seguridad.

Buscar en el Market que hay un sin fin de aplicaciones mejores que WhatsApp.

un saludo

domingo, 15 de enero de 2012

Smushit plugin en PHP

No hace mucho hable de la novedosa API que nos presentaba Smushit. Bien pues hoy voy a publicar como aprovechar eso para aplicarlo de forma automática en nuestro sitio web.

Para empezar creamos un class.smushit.php con el siguiente código

<?PHP
    // smushit-php - a PHP client for Yahoo!'s Smush.it web service
    //
    // Janu 15, 2012
    // Endika Iglesias <endika2@gmail.com>
    // June 24, 2010
    // Tyler Hall <tylerhall@gmail.com>
class SmushIt{
const SMUSH_URL = 'http://www.smushit.com/ysmush.it/ws.php?';
public $filename;
public $url;
public $compressedUrl;
public $size;
public $compressedSize;
public $savings;
public $error;
public function __construct($data = null){
if(!is_null($data)){
if(preg_match('/https?:\/\//', $data) == 1)
$this->smushURL($data);
else
$this->smushFile($data);
}
}
public function smushURL($url){
$this->url = $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::SMUSH_URL . 'img=' . $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$json_str = curl_exec($ch);
curl_close($ch);
return $this->parseResponse($json_str);}
public function smushFile($filename){
$this->filename = $filename;
if(!is_readable($filename)){
$this->error = 'Could not read file';
return false;}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::SMUSH_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('files' => '@' . $filename));
$json_str = curl_exec($ch);
curl_close($ch);
return $this->parseResponse($json_str);}
private function parseResponse($json_str){
            $this->error = null;
            $json = json_decode($json_str);
            if(is_null($json)){
                $this->error = 'Bad response from Smush.it web service';
                return false;
            }
            if(isset($json->error)){
                $this->error = $json->error;
                return false;
            }
            $this->filename       = substr (strrchr ($json->src, '/'), 1 );
            $this->size           = $json->src_size;
            $this->compressedUrl  = $json->dest;
            $this->compressedSize = $json->dest_size;
            $this->savings        = $json->percent;
return true;}
function saveImage($path) {
$url=$this->compressedUrl;
$c = curl_init();
          curl_setopt($c,CURLOPT_URL,$url);
          curl_setopt($c,CURLOPT_HEADER,0);
         curl_setopt($c,CURLOPT_RETURNTRANSFER,true);
         $s = curl_exec($c);
         curl_close($c);
         $f = fopen($path, 'wb');
         $z = fwrite($f,$s);
         if ($z != false) return true;
return false;}
}

Esta clase inicialmente fue creada por Tyler Hall el 24 de Junio del 2010 pero la versión que os paso hoy aquí, tiene ciertas modificaciones que creo que nos vendrían muy bien.

Una vez creada la clase comenzamos a usarla. Os paso un ejemplo de como crear un script que optimice nuestra imagen.

<?php
//incluimos nuestra clase
include('class.smushit.php');
//instanciamos la clase con la URL de la foto original
$img = new SmushIt('http://urlImagenOriginal.com/img/fotos/foto1.jpg');
//optenemos la URL de la imagen optimizada
$urlOptiImg=$img->compressedUrl;
/*por último comprobaremos que nos da un resultado, puede darse el caso de que la imagen no se pueda optimizar más, por tanto la variable $urlOptiImg no devolverá nada*/

 if (isset($urlOptiImg)){
//en caso contrarío almacenaremos la imagen optimizada en la ruta con el nombre que le indiquemos.
     $guardar = $img->saveImage('../../directorio/fotos/imagenOptimizada.jpg');
     var_dump($guardar);
}

?>

Eso es todo :)

jueves, 5 de enero de 2012

JavaScript: Cómo escribir código eficaz


Las aplicaciones web de la actualidad contienen grandes cantidades de código JavasScript. Así pues, el rendimiento no es solamente una cuestión del tiempo que la página tarde en cargar, sino también de cómo responde a medida que se utiliza. La mejor manera de garantizarlo es escribiendo código JavaScript lo más eficiente posible para todos los navegadores.

utilice variables locales
Las variables locales son los identificadores de lectura y escritura más rápida en JavaScript.
un ejemplo:

          function createChildFor(elementId){
                    var element = document.getElementById(elementId),
                    new Element = document.createElement ("div");
                    element.appendChild(newElement);
          }

Esta función contiene dos referencias a la variable global document. Dado que document se utiliza en
más de una ocasión, debería almacenarse en una variable local para que la referencia sea más rápida

          function createChildFor(elementId){
                    var doc = document,
                    element = doc.getElementById(elementId),
                    new Element = doc.createElement ("div");
                    element.appendChild(newElement);
          }

La versión reescrita de la función almacena document en una variable local llamada doc. Dado que doc existe en la primera parte de la cadena, puede resolverse con mayor rapidez que document.

Debemos almacenar los valores a los que se accede con frecuencia en una variable local.

          function process(data){
                    if(data.count > 0){
                              for (var i=0; i< data.count; i++){
                                        processData(data.item[i]);
                              }
                    }
          }

de la siguiente forma:

          function process(data){
                    var count = data.count;
                    if(count > 0){
                              for (var i=0; i< count; i++){
                                        processData(data.item[i]);
                              }
                    }
          }


Los condicionales más rápidos
utilice IF:
-Cuando no existan más de dos valores diferenciados que comprobar.
-Cuando exista un gran número de valores de puedan separarse fácilmente en rangos.

utilice SWICHT:
-Cuando haya más de dos pero menos de diez valores diferenciados que comprobar.
-Cuando no haya rangos para las condiciones porque los valores sean no lineales.

utilice ARRAYS:
-Cuando existen más de 10 valores que comprobar.
-Cuando los resultados de las condiciones sean valores únicos, en lugar de un número de acciones que deban emprenderse.


Bucles rápidos
Existen cuatro tipos de bucle diferentes en JavaScript. FOR, DO-WHILE, WHILE y el cuarto FOR-IN. Este ultimo cuyo propósito es el de iterar por las propiedades enumerables de un objeto de JavaScript.
Naturalmente solo funciona cuando conocemos las propiedades del objeto.

SIN OPTIMIZAR:
          var values=[1,2,3,4,5];
//FOR
          for (var i=0; i<values.length;i++){
                    process(values[i]);
          }
//DO-WHILE
          var j=0;
          do {
                    process(values[j++]);
          }while (j < values.length);
//WHILE
          var k=0;
          while (k < values.length){
                    process (values[k++]);
          }



OPTIMIZADO 1/2;
          var values=[1,2,3,4,5];
          var length = values.length;
//FOR
          for (var i=0; i<length;i++){
                    process(values[i]);
          }
//DO-WHILE
          var j=0;
          do {
                    process(values[j++]);
          }while (j < length);
//WHILE
          var k=0;
          while (k < length){
                    process (values[k++]);
          }

Otra vía sencilla para mejorar el rendimiento de un bucle consiste en reducir el iterador hacia un valor 0 en lugar de incrementarlo hacia la longitud total. Este sencillo cambio puede dar como resultado un ahorro del 50 por 100 sobre el tiempo de ejecución original, dependiendo de la complejidad de cada iteración.

OPTIMIZADO 2/2:
          var values=[1,2,3,4,5];
          var length = values.length;
//FOR
          for (var i=length;i--;){
                    process(values[i]);
          }
//DO-WHILE
          var j=length;
          do {
                    process(values[--j]);
          }while (j);
//WHILE
          var k=length;
          while (k--){
                    process (values[k]);
          }

Un saludo a todos los lectores ;)

domingo, 1 de enero de 2012

SSH conexiones sin password

Si nos encontramos obligados a conectarnos vía SSH continuamente, podemos saltarnos el paso de introducir la contraseña. Mediante una clave algo más privada que nos identifique en el proceso. No se trata de ningún truco simplemente lo que aremos es digitalizar nuestra identidad y que el servidor nos identifique cada vez que necesitemos entrar.

Para empezar abrimos nuestra consola e introducimos:

nombre@ordenador:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): <– Enter
Enter passphrase (empty for no passphrase): <– se deja en blanco
Enter same passphrase again: <– se deja en blanco
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
66:66:66:66:66:66:66:66:66:66:66:66:66:66:66:66 nombre@ordenador
The key’s randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|     . .         |
|    . + 5 . 7 o  |
|     o 5 . = 7   |
|      + 7 . = +  |
|         =7 . o E.|
|          7   o7o|
+-----------------+


Una vez terminado introducimos lo siguiente en nuestra consola

nombre@ordenador:~$ ssh-copy-id -i .ssh/id_rsa.pub usuario@ipServidor
usuario@ipServidor′s password:
Now try logging into the machine, with “ssh ‘usuario@ipServidor′”, and check in:
.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting.
nombre@ordenador:~$

Ya está todo listo. La próxima vez que intentemos conectarnos haciendo un

ssh usuario@ipServidor

No nos pedirá la clave de acceso. En caso de no ser así mejor será que revisemos el fichero /etc/ssh/sshd_config y descomentemos lo siguiente:

RSAAuthentication yes
PubkeyAuthentication yes

Reiniciamos y TaCHAN!!!