lunes, 14 de octubre de 2013

SSH: Autenticación mediante Claves (Sin Password)

SSH (Secure Shell) es un protocolo que facilita la comunicación segura entre 2 sistemas utilizando la arquitectura Cliente/Servidor y permite a los usuarios conectarse a un host remotamente.

Existen dos formas de autentificarse en SSH

  • Autentificación por Password 
  • Autentificación por Claves

Yo me centrare en la segunda opción, ya que con la primera solo basta saber la  password del usuario remoto.

Objetivo:

Usar autentificación mediante clave publica para acceder a un servidor remoto sin tener que escribir la password.

Ventajas
  • Hacer menos tedioso el acceso a servidores que con frecuencia accedemos.
  • Nos permite automatizar tareas ( Script de backup, cront etc).

Escenario



1) Generando Claves En Ambiente Local:


Entendiendo el comando ssh-keygen


  • Comando que genenera, administra y convierte las claves de autenticación SSH.
  • Las claves pueden ser de encriptación tipo RSA o DSA ( en protocolo SSH 2).
  • Normalmente se nos sugiere el nombre del archivo donde se guardará la clave privada.
  • Normalmente la clave publica tendra el mismo nombre que la privada pero con extension .pub .
  • Normalmente nos preguntará si deseamos ingresar una frase de paso (contraseña) para seguridad de nuestras claves.

Ejecutamos uno de estos 2 comandos:

user_a@host_a ]# ssh-keygen
                      ó
user_a@host_a ]# ssh-keygen -t rsa -b 2048


NOTA Estos comandos realizan lo mismo, ya que el primero tiene por defecto las opciones del segundo.

     -b  : tamaño en bytes de clave
     -t   : tipo rsa o dsa


Luego de ejecutar lo anterior, la salida en pantalla sera la siguiente:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user_a/.ssh/id_rsa):

  • La primera linea indica que se van a generar el par de claves (privada / publica).
  • En la segunda linea se nos sugiere la ubicación en donde se guardara la clave privada, si no ingresamos nada por defecto se guarda en el path home del usuario (/home/user_a/.ssh/id_rsa).

Dejamos todo tal cual y presionamos ENTER .....

 Luego por pantalla se nos indicara si deseamos ingresar una frase de paso de seguridad(contraseña)para nuestras claves.
Enter passphrase (empty for no passphrase): 
Como nosotros deseamos conectarnos al host remoto sin password no escribimos nada y presionamos ENTER ...

Luego se nos volverá a preguntar por la misma frase de paso...
 Enter same passphrase again:
No introducimos nada y volvemos a presionar ENTER...

Si todo resulta bien obtendremos en pantalla algo similar a esto:
 
Your identification has been saved in /home/user_a/.ssh/id_rsa.
Your public key has been saved in /home/user_a/.ssh/id_rsa.pub.
The key fingerprint is:
c7:8c:2d:88:b0:42:d5:2f:7a:4f:6b:bd:f4:b7:9b:23 user_a@host_a
The key's randomart image is:
+--[ RSA 2048]----+
|   ..            |
|  .  .           |
| ..   .          |
|.  o o o =       |
|. . o o S =      |
| . . . . o       |
|    . o o.       |
|       +...E o.  |
|      .  ...o++  |
+-----------------+

Hasta ahora tenemos:

  • Generadas nuestra clave privada (id_rsa) y nuestra clave pública (id_rsa.pub) bajo el directorio /home/user_a/.ssh/. 
  • Ambas claves están encriptas con el algoritmo de tipo RSA y con un tamaño de 2048 bits. 
  •  La clave privada no la compartimos con nadie y valga la redundancia "la mantenemos oculta bajo siete llaves".

2) Compartiendo Clave Publica con host remoto


Ahora vamos a compartir la clave publica que acabamos de generar con el host remoto host_b.

Ejecutamos lo siguiente en el host local (host_a):

[user_a@host_a ]# ssh-copy-id -i /home/user_a/.ssh/id_rsa.pub user-b@host_b

  • Con lo anterior le enviamos al host remoto host_b nuestra clave publica.
  • Con la opción -i indicamos donde esta nuestra clave publica.
  • La clave publica quedara en el host remoto en el archivo con nombre authorized_keys, si este archivo no existe se creará automáticamente.
Al ejecutar ssh-copy-id se nos pedirá la password del usuario en el host remoto, la cual tenemos que ingresar solo esta vez para poder copiar la clave publica.

Si todo resulta bien obtendremos la siguiente salida en pantalla:
Now try logging into the machine, with "ssh 'user_b@host_b'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

3) Probando conexión ...


Ahora solo queda probar la conexión SSH sin password al host remoto.

REFERENCIA


Desde la linea de comandos:
man ssh-keygen
man ssh-copy-id

Saludos a los que visiten este blog!!

martes, 30 de abril de 2013

Asignar IP Estática (CentOS)


Vamos a asignar una IP estática en CentOS Versión 6.3 (En otras versiones el proceso básicamente es el mismo). Para tal procedimiento ocupare una maquina virtual creada y configurada en Virtual Box, si la maquina es real o fue creada con otra herramienta, el proceso no debería diferir de lo aquí descrito.

Nota: El paso 1 se debería omitir si no se esta usando Virtual Box. En caso de estar usando otra distribución GNU/Linux, la idea es la misma solo cambia la ubicación del fichero a configurar y la sintaxis de los parámetros.



Objetivos

  • Tener la siguiente ip estática  192.168.1.208
  • Verificar que nuestra ip este en funcionamiento.


Paso 1

Cerciorarse que la configuración de Virtual Box  tenga el adaptador de red apropiado para la maquina virtual en la cual asignaremos ip estática



Paso 2

Con nuestro editor configuramos el archivo de Interfaz eth0 ifcfg-eth0, este se encuentra en la ruta /etc/sysconfig/network-scripts y debemos dejar los siguientes parámetros con sus respectivo valores.

#!/bin/bash
# NOMBRE DEL DISPOSITIVO FÍSICO DE RED, EN ESTE CASO eth0
DEVICE="eth0"
# INDICAMOS EL TIPO DE IP, EN NUESTRO CASO STATIC (ESTATICA)
BOOTPROTO=static
# INDICAMOS QUE NUESTRA CONFIGURACION NO DEPENDE DE NIGUN DHCP
DHCPPROTO=none
# ONBOOT "yes" INDICA QUE EL DISPOSITIVO DEBE ACTIVARSE AL ARRANCAR EL SISTEMA
ONBOOT="yes"
# DIRECCION IP QUE DESEAMOS ASIGNAR
IPADDR=192.168.1.208
# VALOR DE MASCARA DE RED
NETMASK=255.255.255.0
# DIRECCIÓN DEL HARDWARE DEL DISPOSITIVO (MAC)
HWADDR=54:04:A6:C0:9D:7C
# PUERTA DE ENLACE
GATEWAY=192.168.1.1

Nota: Estos parámetros son los esenciales para dejar en funcionamiento nuestra ip estática, sin embargo nos podemos encontrar con otras configuraciones que son mas completas y descriptivas que la aquí expuesta.

Paso 3

Reiniciar la red
service network restart

Paso 4

Verificar nuestra configuración
ifconfig eth0 
Deberíamos ver esto:
eth0      Link encap:Ethernet  HWaddr 54:04:A6:C0:9D:7C  
          inet addr:192.168.1.208  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fd30:3bb7:b3c0:0:5604:a6ff:fec0:9d7c/64 Scope:Global
          inet6 addr: fe80::5604:a6ff:fec0:9d7c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:106902 errors:0 dropped:0 overruns:0 frame:0
          TX packets:100223 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:84975652 (81.0 MiB)  TX bytes:19107967 (18.2 MiB)
          InterrupVirtual Boxt:34 Base address:0x2000 


Conclusión

Con esto ya tenemos nuestra ip estática arriba, si queremos que esta ip se resuelva con un nombre de dominio DNS debemos configurar el fichero resolv.conf (etc/resolv.conf).

1) En mi caso no tengo servidor DNS, y en este fichero tengo la puerta de enlace.
nameserver 192.168.1.1

2) En caso de tener un servidor DNS.

   Por ejemplo:
   Nombre Servidor DNS: servidorloc.cl
   IP Servidor DNS: 192.168.1.104

El archivo resolv.conf quedaría de la siguiente manera.
search servidorloc.cl
nameserver 192.168.1.104






miércoles, 9 de enero de 2013

MySQL desde la Terminal - PARTE 2


Siguiendo con el tutorial de“MySQL desde la terminal.” quiero aclararar un punto, en esta serie de articulos no pretendo abordar el Lenguaje de Consulta Estructurado SQL ( para interiorisarze en dicha materia pincha AQUÍ ), esto no quiere decir que ocupe algunas sentencias basicas de dicho lenguaje que son necesarias para la administracion de MySql.

2. Crear, Actualizar y Eliminar Tablas.

2.1 Crear y Visualizar Tabla.

 
Para crear una tabla, primero hay que situarse en una base de datos existente, para ello usaremos la base de datos llamada prueba creada en la Parte 1 de este tutorial.

Primero: Una vez dentro de mysql situarse en la base de datos prueba. 

mysql> use prueba;

Para visualizar las tablas ejecutar lo siguiente:

mysql> show tables;

no hemos creado ninguna tabla en prueba, por ende nos debe mostrar lo siguiente:

Empty set (0.00 sec)

Segundo: Procedemos a crear una tabla llamada personas dentro de la base de datos prueba, con la siguiente especificación.

La tabla personas tendra 2 atributos:

  • id : De tipo entero sin signo, autoincrementable, llave primaria.
  • nombre: De tipo varchar(caracter), longitud máxima de 30 caracteres y no nulo

mysql> CREATE DATABASE personas (
         -> id INT AUTO_INCREMENT PRIMARY KEY,
         -> nombre VARCHAR(30) NOT NULL
         -> );
Query OK, 0 rows affected (0.18 sec)

 
Tercero: Vizualiazar la tabla recientemente creada.

mysql> show tables;
+------------------+
| Tables_in_prueba |
+------------------+
| personas         |
+------------------+
1 row in set (0.00 sec) 

Cuarto: Ver estructura de la tabla personas.

mysql> describe personas;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| nombre | varchar(30) | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

2.2 Modificar y Eliminar Tablas


Primero: modificar la tabla personas, de modo que que el atributo de nombre id sea cambiado por identificador.
 
mysql> ALTER TABLE `personas` CHANGE `id` `iden` INT( 11 ) NOT NULL AUTO_INCREMENT;

Query OK, 0 rows affected (0.36 sec)

Luego visualizamos el cambio que acabamos de realizar.
 
mysql> describe personas;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| iden   | int(11)     | NO   | PRI | NULL    | auto_increment |
| nombre | varchar(30) | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec) 

Segundo: Agregar un atributo a la tabla personas, en este agregamos el atributo direccion.
 
mysql> ALTER TABLE personas ADD COLUMN direccion VARCHAR(40) NOT NULL;
Query OK, 0 rows affected (0.40 sec)

Ahora vemos como el atributo fono se encuentra en la estructura de la tabla personas.
 
mysql> describe personas;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| iden   | int(11)     | NO   | PRI | NULL    | auto_increment |
| nombre | varchar(30) | NO   |     | NULL    |                |
| fono   | varchar(10) | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec) 

Tercero: Para eliminar el atributo fono que acabamos de realizar.

mysql> ALTER TABLE personas DROP COLUMN fono;

Luego puedes visualizar el cambio con el comando describe.

2.3 Eliminar Tabla.

mysql> drop table personas;

Fín Segunda Parte, Me voy a dormir tranquilo.........

Nota: Cuando se trata de modificar atributos de la tabla personas, decidí colocar la sintaxis propia de MySql en mayuscula, con el fin de hacer una distinción con el nombre que nosotros  deseamos colocar a tablas o atributos.

 










domingo, 6 de enero de 2013

MySQL desde la Terminal - PARTE 1


    Según Wikipedia sobre mysql, indica lo siguiente “MySQL es un sistema de gestión de base de datos relacional multihilo y multiusuario, con más de seis millones de instalaciones”, de ahí radica la importancia de dominar MySQL en distintos entornos de trabajo. Existen herramientas graficas como PhpMyAdmin, la cual nos permite administrar base de datos en MySQL de forma sencilla, pero muchas veces nos vemos enfrentados a situaciones donde no tenemos instaladas herramientas graficas de administración de MySQL y tenemos que realizar tareas sobre una o varias base de datos de forma manual (Generalmente en maquinas remotas).

MySQL, posee un programa con el mismo nombre para la gestión de base de datos mediante la línea de comandos, es necesario tener claro algunos conceptos básicos para adaptarse y desenvolverse de forma adecuada sobre la terminal, con el objetivo de llevar a cabo la realización de tareas básicas de administración sobre MySQL.

1.1 Acceder a mysql dentro de la terminal.

Sintaxis:

> mysql -h <servidor> -u <usuario> -p<password>

Ejemplo 1:

> mysql -h localhost -u root -pmipassword

Nota: Dependiendo de la maquina en la que nos encontremos, podemos omitir -h <servidor> y de igual modo accederemos a mysql.

Una vez realizado esto con éxito, nos aparecerá un mensaje de bienvenida de mysql y el promt de mysql listo para usar.



1.2 Visualizar Base de datos

Para visualizar las base de datos ejecutar lo siguiente.

mysql> show databases;

Nota: Es importante no olvidar el “;” al final de línea, de lo contrario mysql nos arrojara un error.

Si ejecutamos lo anterior con éxito nos debería mostrar algo como esto:


1.3 Crear y Manipular Base de Datos

Para crear base de datos se utiliza la siguiente sintaxis.

Mysql > create database <nombre_basededatos>

Nota: mysql en su sintaxis no hace distinción entre mayúsculas y minúsculas, por ende si ejecutamos lo siguiente nos dará el mismo resultado.

Mysql > CREATE DATABASE <nombre_basededatos>

Ejemplo 2:



Ahora si volvemos a visualizar las base de datos en mysql nos arrojara lo siguiente:


ahora para situarnos en la base de datos recién creada usamos la siguiente sintaxis:

mysql> use <nombre_basededatos>;

Ejemplo 3:


Por último, para salir de mysql presionar Ctrl+d.
Fín de la primera parte de mysql desde la terminal.