Linux


6
mar 12

rsync sobre ssh sin utilizar claves

No Gravatar
Server backup transfer

http://www.engadget.com/2006/06/06/how-to-back-up-your-blog/

Hace algunas semanas atrás tuve la oportunidad de sincronizar 2 servidores remotos, se trataba de hacer respaldos en un servidor y enviarlos a otro de manera automática, utilizando ssh y evitando escribir la clave del servidor remoto..

Lo primero que hay que tener en cuenta es que utilizaremos rsync, ssh y necesitaremos generar una clave pública y privada.. entonces empecemos.

Describiré al servidor de donde obtendré como ORIGEN y al servidor donde lo depositaré como DESTINO..

Generar las claves en el servidor ORIGEN:

origen:# ssh-keygen -t rsa -b 2048

Lo que sigue es copiar el archivo id_rsa.pub generado y enviarlo al servidor destino..

origen:# ssh-copy-id -i /home/jack/.ssh/id_rsa.pub jack@servidor-destino.local

En este momento la salida del comando anterior les dirá que hagan una prueba y se conecten al servidor destino.. que en mi caso aparece:

Now try logging into the machine, with "ssh 'jack@servidor-destino.local'", and check in:
 
~/.ssh/authorized_keys
 
to make sure we haven't added extra keys that you weren't expecting.

Y pues vamos a probarlo.. queremos estar seguros de que funciona lo que estamos haciendo.. esto lo hacemos desde el servidor ORIGEN.

origen:# ssh jack@servidor-destino.local

Ahora sin necesidad de escribir la clave del servidor DESTINO tendrán acceso a éste.. y hasta aquí ya esta casi todo el trabajo hecho.. Luego terminan la sesion en el servidor DESTINO para regresar al servidor ORIGEN.. ya casi para terminar lo único que faltaría es tomar el archivo o carpeta que deseamos enviar del servidor ORIGEN al servidor DESTINO.. y para estoy hacemos lo siguiente:

origen# rsync -avz -e ssh /home/jack/respaldos/* jack@servidor-destino.local:/home/respaldos/

Y verán aparecer una lista de todos los archivos que estan en su carpeta de respaldo que de forma equivalente en mi caso es /home/jack/respaldos/

Cualquier error en la transferencia la verán inmediatamente.. pueda que tengan problemas pero creo que sería por cosa de permisos..

Antes de que se me olvide.. les recuerdo de que desde el servidor ORIGEN todos los comandos los deben ejecutar en modo root.

Espero les sirva el tip.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

10
ene 12

OAuth Twitter Ruby

No Gravatar
http://www.iconarchive.com/show/tweetscotty-icons-by-lboi/twitter-bot-icon.html

Twitter bot en ruby

Esta es una ligera implementación de un cliente de twitter escrito en Ruby utilizando la gema twitter, oauth, net/http y json .. esto lo hice hace algunas semanas atrás con la idea de escribir un pequeño bot que buscara usuarios de twitter que hablan sobre temas específicos para después enviarles mensajes.. Al final, el script quedó a medias .. lamentablemente no tuve más tiempo para continuarlo, pero el código esta disponible para aprender y si se puede extender mucho mejor..

La clase Helpers basicamente sirve para consultar en twitter y encontrar las palabras que necesito, esto utilizando json en la respuesta.

Aqui la búsqueda esta limitada a 1 solo tweet, porque no quiero enviar spam a nadie.. además twitter no permite el envío de el mismo mensaje a multiples usuarios porque reconoce que es un bot el que lo hace..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env ruby
 
require 'rubygems'
require 'net/http'
require 'json'
require 'oauth'
 
class Helpers  
  def self.find_tweets(default_keyword, extense_keyword = nil)
    base_url = "http://search.twitter.com/search.json?"
    query = (extense_keyword==nil ? default_keyword : default_keyword +"+"+ extense_keyword)
    url = "#{base_url}&rpp=1&page=1&q=#{URI.encode(query)}"
    resp = Net::HTTP.get_response(URI.parse(url))
    data = resp.body
 
    result = JSON.parse(data)
 
    if result.has_key? 'Error'
      raise "Oops!!"
    end
 
    return result['results']
  end
end

Este es el código principal, para que funcione les recuerdo que necesitan registrar su aplicación en https://dev.twitter.com/apps/new

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/env ruby
 
# Librerias
require 'rubygems'
require 'json'
require 'twitter'
require 'helpers'
 
username = "QbitMexhico"
 
# Datos de conexion a twitter
TWITTER_CONSUMER_KEY = 'consumerKey'
TWITTER_CONSUMER_SECRET = 'consumerSecret'
TWITTER_ACCESS_TOKEN = 'accessToken'
TWITTER_ACCESS_SECRET = 'accessSecret'
 
# Configurar el cliente
Twitter.configure do |config|
    config.consumer_key = TWITTER_CONSUMER_KEY
    config.consumer_secret = TWITTER_CONSUMER_SECRET
    config.oauth_token = TWITTER_ACCESS_TOKEN
    config.oauth_token_secret = TWITTER_ACCESS_SECRET
end
 
# Instanciar
client = Twitter::Client.new
 
# Palabra principal
mainKeyword = "lego"
 
printf("Utilizando el usuario: %s\n", username)
printf("Buscando la palabra clave: %s\n", keywordSelected)
 
# Encontrar tweets usando el REST API de twitter
tweets = Helpers.find_tweets(mainKeyword,mainKeyword)
 
tweets.each do |tweet|
  printf("\nDel usuario: %s\nTweet: %s\n",tweet['from_user'],tweet['text']) 
  client.update("@zerugiran esta estrenando su meccano y seguro no va a dormir hoy.. :D - cc @" + tweet['from_user'])
end

Una de las cosas que faltaron es la opción de poder almacenar los usuarios que encontré en una bd (sqlLite) para no repetirles en el envío de tweets.. Esto es solamente el ejemplo, muchas ideas se pueden desprender de esto.. :D

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

4
ene 12

Celestic un largo camino por seguir y muchas ganas de continuar

No Gravatar

Celestic Community

Creo que han pasado alrededor de 2 meses desde que hice público Celestic Community, una nueva aplicación open source la cual ayuda a mejorar el seguimiento de proyectos de software.. Durante ese tiempo he recibido diversos tipos de  comentarios alentandome a continuar su desarrollo.. De todos esos comentarios uno en particular llamó mi atención, uno relacionado a mejorar la usabilidad y la forma en que los usuarios interactuan con la aplicación.

Comprendo que hasta cierto punto Celestic puede ser un tanto complejo de utilizar debido a la cantidad de información que solicita, pero todo eso es necesario para lograr un nivel de detalle aceptable y tener un histórico completo de todo lo ocurrido durante la vida del proyecto..

Falta de “usabilidad”? Tienen razón, uno de los principales puntos que en este momento Celestic tiene en contra es el uso excesivo de formularios, algo que inicialmente y de forma adrede decidí dejar así porque no quería escribir un poco más de código para utilizar ajax lo cual ayudaría a resolver las quejas..

El desarrollo de Celestic continua, muchas mejoras estan en camino, estoy trabajando en eso que le falta en este momento (estadísticas, usabilidad y mucho más client side), todo pensado para enriquecer su uso. De las cosas que recuerdo estarán en las nuevas versiones son: administración de notificaciones, modificaciones a los estatus de las tareas siguiendo un orden específico, nuevos gráficos estadísticos, integración de nuevos paquetes de idiomas, correcciones a bugs encontrados por colaboradores, etc..

Para más detalles sobre Celestic Community.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

4
jul 10

VirtualBox en Ubuntu Server

No Gravatar

A veces nos hace falta un servidor extra, y ya no hay hardware para levantarlo, una solución es usar una máquina virtual, una de las mas usadas y que además es gratuita, es VirtualBox, en realidad es muy fácil de utilizar, tiene una intuitiva interface gráfica. El problema consiste en que no tenemos instaladas las X en el servidor ni intenciones de hacerlo, seria un desperdicio.  Aquí lo vamos a hacer a puro comando limpio desde la consola de comandos.

Comencemos.

  • Tenemos un servidor con Ubuntu Server 8.04 LTS (“Hardy Heron”)
  • Y necesitamos una imagen, un archivo .vdi con el sistema operativo que queremos virtualizar. ¿De donde lo sacamos? pues eso ya queda fuera del alcance de este post.

Entramos a nuestro servidor con ssh o con putty, todo mundo sabe como.

ssh miservidor.com

1.- Lo primero es instalar la versión 3.x de VirtualBox. Por default Ubuntu 8.04 tiene una mas vieja en los repositorios, por lo que no la usaremos. Hay que descargarla de:

http://www.virtualbox.org/wiki/Linux_Downloads

Mientras se descarga podemos instalar los linux-headers que no son mas que parte del código fuente del núcleo o kernel de Linux. Los necesitamos porque Virtualbox usa un drive para compartir el Hardware que debe corresponder con la versión del Kernel. Así que la mejor forma de que corresponda es compilarlo directamente en tu máquina, no te preocupes lo hará Virtualbox el solo y si no lo hace lo obligaremos con una linea de comandos, pero eso lo veremos después, ale a instalar los linux-headers por que si no nos aparecerá el error Compilation of the kernel module FAILED!

Primero hay que saber que versión del kernel tenemos con

uname -r

En nuestro caso tenemos 2.6.24-27-server y entonces instalamos

sudo apt-get install linux-headers-2.6.24-27*
hay que esperar un rato porque son muchos archivos, notese el * al final de la linea.

ahh lo olvidaba para compilar necesitamos también instalar make y gcc

sudo apt-get install gcc
sudo apt-get install make

Listo, no olvidemos que estábamos descargando VirtualBox también, una vez que tenemos el archivo vamos a instalarlo con:

sudo dpkg -i virtualbox-3.2_3.2.6-63112~Ubuntu~hardy_amd64.deb

dpkg no verifica si existen o no las dependencias necesarias, asi que probablemente algunas este rotas. Para arreglarlo usamos el comando:

sudo apt-get install -f

este comando busca todas las dependencias rotas e intenta arreglarlas.

OK ya tenemos todo lo necesario.

2.- Ahora hay que crear un nuevo usuario en nuestro servidor, ni se te ocurra crear una máquina virtual y luego ejecutarla como root.

sudo adduser vbox

Además lo agregamos al grupo de Virtualbox.

sudo usermod -a -G vboxusers vbox

Tenemos que salir del servidor y entrar de nuevo pero esta vez con nuestros nuevo usuario.

ssh vbox@miservidor.com

Copiamos nuestro archivo .vdi en algún lugar, por ejemplo en /home/vbox puedes usar scp o ftp para hacerlo o si tienes acceso físico mejor, porque los .vdi son archivos muy muy grandes.

3.- Ahora vamos a usar los comandos VBoxManage y VBoxHeadless. Es recomendable leer un poco de documentación al respecto, porque tarde o temprano lo vamos a necesitar.

Primero creamos una nueva Máquina virtual

VBoxManage createvm -name MiVentanucos2003 -register

Luego ponemos un poco mas de memoria ram porque la que pone por default es muy poca.

VBoxManage modifyvm MiVentanucos2003 --memory 512

Tenemos que crear un disco duro, pero hay que crear un dispositivo IDE aunque también puede ser SATA.

VBoxManage storagectl MiVentanucos2003 --name "IDE Controller"
--add ide

Y luego montamos nuestro archivo .vdi para que la máquina virtual lo pueda ver.

VBoxManage storageattach w2003 --storagectl "IDE Controller"
--port 0 --device 0 --type hdd
--medium /home/vbox/Windows_2003_Server.vdi

Y listo.

4.- Solo queda arrancar la máquina. Para ello usamos el comando.

VBoxHeadless -startvm MiVentanucos2003 -p 3389

Este comando no solo arranca la máquina, sino que también abre un servicio de Escritorio remoto, con el que podemos ver que esta pasando.

para ello desde nuestra máquina, podemos entrar con la “Conexión a escritorio remoto” de Windows o con

rdesktop miservidor.com:3389

desde Linux.

Si todo salio bien tenemos un nuevo servidor corriendo :) ten mucho cuidado aunque es un servidor virtual debemos cuidarlo como cualquier otro servidor, instalar parches, cerrar servicios, cambiar contraseñas etc.

Nuestro servidor aun no tiene red, para ello hay que seguir usando el comando VBoxManage para seguir agregando hardware a nuestra máquina virtual. Lo mas fácil es hacer

VBoxManage modifyvm MiVentanucos2003 -nic1 nat

Pero una red NAT no es lo mas recomendable, como este post ya se alargo demasiado, hasta aquí lo vamos a dejar.

Twitter: @ZeruGiran

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

31
mar 10

Diversos Comandos en Linux

No Gravatar

En este blog agrego algunos de los comandos que me son de gran utilidad para mi labor diaria en el mundo de Ubuntu. A la mejor para muchos de los lectores se les hara algo trivial, pero lo hago para aquellas personas que van iniciando en este fascinante mundo OpenSource (por cierto recuerden hacer donaciones).

Es importante mencionar que probablemente la descripción que se le esta dando al comando no sea la unica funcionalidad de dicho comando.

Convención

Convención Descripción
sudo Ejecuta los comandos en modo súper usuario
minúsculas + negrita Comando
minúsculas + Itálica Parámetros del comando
Mayúsculas + negrita + Itálica Parámetros del comando proporcionados por el usuario
[] Opcionales
subrayado Ruta o path
negrita + subrayado Observaciones o consideraciones que deben tomarse en cuenta.
italica + subrayado Tecla

Comandos

Comando Descripción

Ejemplo

sudo apt-get install NOMBRE_APP Obtiene e instala NOMBRE APP en la máquina.

Ej.

sudo apt-get install eclipse

sudo nautilus Abre el explorador de carpetas como súper usuario.

Ej.

sudo nautilus

sudo ln -s /RUTA_ORIGEN /RUTA_DESTINO Crea un archivo liga. Este comando me ha sido útil para referenciar los directorios web de las aplicaciones apache.

Ej.

sudo ln -s /home/mike/Proyectos/QBit/Ejemplo/ /var/www/Ejemplo

ssh USUARIO@SERVIDOR [-p NUMERO_PUERTO] Abre una linea de comandos conectada a un SERVIDOR con los permisos otorgados al USUARIO. En caso de que el servidor tenga un puerto determinado, no es necesario poner el parámetro PUERTO.

Ej.

ssh administrador@servidor -p 2285

sudo /etc/init.d/samba start Inicializa samba. Samba es un comando que permite el intercambio de archivos.

Ej.

sudo /etc/init.d/samba start

sudo /etc/init.d/samba stop Detiene samba. Samba es un comando que permite el intercambio de archivos.

Ej.

sudo /etc/init.d/samba stop

sudo /etc/init.d/samba restart Reinicializa samba. Samba es un comando que permite el intercambio de archivos.

Ej.

sudo /etc/init.d/samba restart

mysql -h SERVIDOR -u USUARIO -p Inicia la linea de comandos de MySQL en un SERVIDOR determinado de acuerdo a los permisos del USUARIO

Ej.

mysql -h localhost -u root -p

source ARCHIVO.SQL Ejecuta los comandos SQL que contenga el ARCHIVO.SQL una vez dentro de la linea de comandos MySQL.

Ej.

source respaldo.sql

svn list svn+ssh://svnuser@SERVIDOR[/ruta/] Lista los archivos y directorios que contiene el SERVIDOR[/ruta/]

Ej.

svn list svn+ssh://svnuser@myServidorSVN/Carpeta1/

Es importante mencionar que si la [/ruta/] tiene espacios en blanco, dichos espacios son necesarios escaparlos anteponiendo el carácter \

Ej.

svn list svn+ssh://svnuser@myServidorSVN/Carpeta\ 1/

svn co svn+ssh://svnuser@SERVIDOR[/ruta/] Obtiene del SERVIDOR[/ruta/] todos los directorios y archivos.

Ej.

svn co svn+ssh://svnuser@myServidorSVN/Carpeta1/

Es importante mencionar que si la [/ruta/] tiene espacios en blanco, dichos espacios son necesarios escaparlos anteponiendo el carácter \

svn co svn+ssh://svnuser@myServidorSVN/Carpeta\ 1/

svn update Actualiza los directorios y archivos contenidos en el directorio actualmente ubicado.

Ej.

svn update

Es necesario haber ejecutado el “svn co

svn commit -m “OBSERVACIONES” Sube al servidor los directorios y archivos contenidos en el directorio actualmente ubicado.

Ej.

svn commit -m actualizacion hecha por mi

En caso de que no se desee escribir alguna OBSERVACION se puede dejar unicamente las comillas

Ej.

svn commit -m “”

Es necesario haber ejecutado el “svn co

ctrl + z Suspende el proceso que se encuentra en ejecución

Ej.

java MiPrograma

ctrl + z

bg Coloca el proceso suspendido en ejecución pero sin la necesidad de tenerlo en la linea de comando.

Ej.

java MiPrograma

ctrl + z

bg

scp -P 22 ARCHIVO USUARIO@SERVIDOR:/ruta/ Copia un ARCHIVO local a una /ruta/ localizado en un SERVIDOR

Ej.

scp -P 22 ARCHIVO.TXT MIUSUARIO@QBIT.COM.MX:/home/

Twiter @QBit_Mike

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

Qbit Mexhico Blog is using WP-Gravatar