viernes, 13 de marzo de 2015

HOW TO: Configurar servidor ssh en Microsoft Windows con Cygwin.


PASO 1: Instalar Cygwin.

Descargar desde el sitio oficial de cygwin https://cygwin.com/install.html el archivo .exe que corresponda a su arquitectura del sistema operativo (32 o 64 bits).

Crear en C la carpeta cygwin y colocar aquí el instalador descargado. En esta carpeta instalaremos el programa cygwin.  Al descargar, iniciamos la instalación:

Seleccionar la opción "Install from Internet". Pulsar Siguiente:

Seleccionar la ruta de instalación por defecto. Pulsar Siguiente:

Seleccionar la ruta de instalación por defecto. Pulsar Siguiente:

Seleccionar la configuración de internet que se ajuste a su infraestructura de trabajo. Para mi caso, seleccionaré "Direct Connection". Pulsar Siguiente:

Seleccionar algún sitio de la lista para descargas los paquetes necesarios para la instalación. Pulsar Siguiente:
 
En el campo "Search" ingresar openssh e instalar los paquetes que resulten de la busqueda (Presionar sobre la palabra "default" de la columna "New". Al pulsar acá pasará de "Default" a "Install" ). Pulsar Siguiente:

Pulsar Siguiente:




Inicio del proceso de instalación de Cygwin. Acá vemos la ventana de progreso de la instalación:

Fin de la instalación:


PASO 2: Configurar la ruta del Cygwin en el PATH de Windows:

Click derecho en Equipo -> Propiedades:

Configuración avanzada del sistema --> Opciones avanzadas --> Variables de entorno:

Buscamos y seleccionamos la palabra Path y click en botón Editar:

Al final del texto agregamos la ruta de la siguiente forma ;C:cygwin al final aceptamos todos los cambios:

PASO 3: Configurar Cygwin.
Ejecutar cygwin como administrador:

Se abrirá entonces, la consola de trabajo de Cygwin:

Crear los archivos /etc/passwd y /etc/group (si no existen). Para ello, ejecute los siguientes comandos:

mkpasswd -l > /etc/passwd
mkpasswd -l > /etc/group

Seguido,ejecutar los siguientes comandos (en orden). estos cambiaran los permisos de los archivos que vamos a usar y crearan el archivo sshd.log:

chmod +r /etc/passwd
chmod u+w /etc/passwd
chmod +r /etc/group
chmod u+w /etc/group
chmod 755 /var
touch /var/log/sshd.log
chmod 664 /var/log/sshd.log

Ejecutamos ahora el comando ssh-host-config enseguida nos creara las diversas llaves que vamos a utilizar e iniciara una serie de preguntas:

*** Query: Should StrictModes be used? (yes/no) yes yes
*** Query: Should privilege separation be used? (yes/no) yes yes
*** Query: new local account 'sshd'? (yes/no) yes
 Do you want to install sshd as a service? yes
*** Query: Enter the value of CYGWIN for the daemon: [] Presionar enter.
*** Query: Do you want to use a different name? (yes/no) no
 
Create new privileged user account 'XXX\cyg_server' (Cygwin name: 'cyg_server')? (yes/no) yes

Please enter the password: {INGRESAR ACÁ EL PASSWORD}
Reenter: {INGRESAR ACÁ EL PASSWORD}

Terminará la configuración. Ahora tenemos que iniciar el servicio con net start sshd:

Veremos ahora el servicio de Windows iniciado:


PASO 3: Probar Cygwin:
Prueba de conexión local.  Ejecutar el comando ssh localhost. Seguido, se nos pedirá el password, colocarlo y presionar enter:
Prueba de conexión remota.  Ejecutar el comando whoami para ver el usuario con el cual estamos conectados en el sistema operativo:

Desde una consola remota ejecutamos: ssh NOMBRE-USUARIO@IP (ejemplo: ssh MBFILESERVER+Administrador@192.168.8.246) y presionamos enter. Aceptamos la autenticidad del host e ingresar luego el password del equipo remoto cuando se nos solicite:

PASO 4: Crear y configurar un usuario para permitir conexiones ssh:

Crear un usuario el el servidor con Sistema Operativo Windows (para este ejemplo Windows Server 2008):

Inicio -> Ejecutar -> %windir%\system32\compmgmt.msc

En el Administrador de equipos seleccionar Usuarios y grupos locales -> Usuarios. Click derecho y seleccionar "Usuario nuevo":

 Ingresar los datos del usuario. Pulsar botón crear para finalizar:
Usuario creado:

Crear el usuario en cygwin. Ejecutar los siguientes comandos: 
  • cd /etc
  • cp passwd passwd_backup (hago una copia del archivo passwd).
  • mkpasswd.exe -l > passwd (genero el nuevo archivo passwd con los usuarios creados en Windows).
  • cat /etc/passwd (para ver cual es el nombre del usuario a crear, en mi caso MBFILESERVER+sshuser es el usuario a crear). 
  • net stop sshd (detengo el servicio ssh).
  • net start sshd (inicio el servicio ssh).
 
Iniciar sesión local ssh con el usuario creado.  Esto nos creará en forma automática los archivos dentro de /home/usuario:

Nuevamente, desde una consola remota y con el nuevo usuario creado ejecutamos ssh nombre-usuario@ip
(ejemplo: MBFILESERVER+Administrador@192.168.8.246) y presionamos enter. Aceptamos la autenticidad del host e ingresar luego el password del equipo remoto cuando se nos solicite:

Ya estamos entonces vía ssh, en el servidor remoto que acabamos de configurar.

jueves, 12 de marzo de 2015

HOW TO: Solución al error al intentar ejecutar smitty en AIX 6.1: "Unable to create temp file."

Si al intentar ingresar ejecutar el comando smitty en AIX (para este ejemplo, AIX 6.1), aparece el error "Unable to create temp file.", lo podemos resolver con estos sencillos pasos:

Este error se refiere a que posiblemente tenemos problemas con escribir en el directorio /tmp, bien sea porque el filesystem donde se encuentra la partición está lleno o porque tenemos un error adicional que podemos chequear y solucionar ejecutando un chequeo a la partición donde se encuentra el directorio /tmp.  En todo caso, los pasos a realizar a continuación:

1. Verificar si tenemos espacio suficiente en la partición donde se encuentra /tmp.  Ejecuntando el comando df (como root):

Si el directorio se encuentra full, podemos identificar algún programa de nuestro sistema operativo que esté utilizando el directorio /tmp tomando de acá archivos temporales, detenerlo, borrar algunos archivos del /tmp y volver a intentar ejecutar el comando smitty.  De igual manera, quedaría subir nuevamente el servicio que previamente hemos detenido.  

Nota: Si intentamos borrar de /tmp algún archivo que esté usándose en nuestro S.O, posiblemente no lo podamos borrar.

Por el contrario, si tenemos algo de espacio libre en /tmp y persiste el error, pasemos al paso 2.
 

2. Validar que podemos escribir y/o borrar en el directorio.  Intentemos entonces crear un archivo dentro de /tmp (podemos utilizar el comando touch /tmp/nombre_archivo).  En este punto, con espacio suficiente para escribir o borrar e intentando escribir en /tmp algún archivo de prueba recibimos algún mensaje de que no podemos realizar la operación (acá les muestro un ejemplo al intentar borrar un archivo llamado "sdcdbg.151" que se encontraba en /tmp), procedemos a hacer un chequeo de la partición donde se encuentra el directorio /tmp. Para realizarlo, pasemos al paso 3.

3. Chequear la partición donde está /etc.
3.1. Con el comando mount podemos ver el dispositivo y el punto de montaje que coresponde a /tmp. En mi caso, existe un filesystem exclusivo para el punto de montaje /tmp (filesystem /dev/hd3 montado sobre /tmp):

3.2. Identificado el punto de montaje que corresponde a /tmp, procedemos a desmontarlo. Podemos utilizar el comando mount -f como se muestra a continuación.
Para verificar que el filesystem /tmp se haya desmontado en forma satisfactoria ejecutamos nuevamente el comando df; no deberá aparecer el punto de montaje correspondiente a /tmp:

3.3. Con el volumen desmontado, procedemos a ejecutar el comando fsck /tmp.  En este ejemplo, mi volumen /dev/hd3 que corresponde al punto de montaje /tmp tenía un error; en la Phase 4 "File system inode map is corrupt; FIX?" y en la Phase 5 "Superblock is marked dirty; FIX?  ingresamos "y" para confirmar el chequeo del filesystem.  Al finalizar el proceso, se nos indica que el todas las inconsistencias encontradas han sido reparadas:

3.4. Para finalizar, volvemos a montar el volumen desmontado con el comando mount /filesystem /punto-montaje (ejemplo mount /dev/hd3 /tmp).  Para verificar que el filesystem /tmp se haya montado en forma satisfactoria ejecutamos nuevamente el comando df; deberá aparecer el punto de montaje correspondiente a /tmp:

Listo, ahora podemos ejecutar el comando smitty sin inconvenientes:

martes, 10 de marzo de 2015

HOW TO: Solución a error: -bash: /bin/rm: La lista de argumentos es demasiado larga


Si al intentar borrar, con el comando rm, una gran cantidad de archivos de un directorio te aparece este error -bash: /bin/rm: La Lista de argumentos es demasiado larga:
Puedes validar la cantidad de archivos que se borrarán, y que, posiblemente sea muy grande para utilizar el comando rm.  Como alternativa, utiliza el siguiente comando:

find DIRECTORIO.A.BORRAR / -name FILTRO | xargs rm

Ejemplo:
#find /var/spool/pnp4nagios/npcd/ -name 'perfdata*' | xargs rm

Como verán el la siguiente pantalla, estoy mandando a borrar 808685 archivos del directorio.
Este error se produce en sistemas que tienen el kernel de linux anterior al 2.6.23 ya que esos kernels tienen un tope en la lista de argumentos soportada.

lunes, 2 de marzo de 2015

HOW TO: CONFIGURAR ENVIO DE CORREO DESDE CITRIX XENSERVER 6.2.

En algunas ocasiones, necesitamos desarrollar scripts automáticos que, luego de realizar cierta actividad programa, nos envíe un correo electrónico con el resumen de la labor programada, etc.

Con estos sencillos pasos configuraremos nuestra instalación de Citrix XenServer para que envíe correos electrónicos a través de un servidor SMTP previamente configurado.

Prerequisitos:
1. Un servidor SMTP para el envío de los correos.  El servidor a configurar, deberá tener acceso a este servidor para poder enviar los correos a través de este servidor SMTP.
2. Deseable, configurar el servidor para que pueda acceder a la Internet y poder instalar los paquetes necesarios para realizar esta configración.

Empezemos:

1. Ubicados en el servidor base de virtualización Citrix XenServer (para este ejemplo con la versión 6.2) descargamos el programa mailx; programa que utilizaremos para el envío de los correos. Como root ejecutamos el siguiente comando:

wget http://vault.centos.org/5.4/os/i386/CentOS/mailx-8.1.1-44.2.2.i386.rpm

2. Instalamos el programa descargado:
rpm -hiv mailx-8.1.1-44.2.2.i386.rpm

3. Instalado el programa, procedemos a configurar el servidor SMTP en nuestro servidor Citrix XenServer el cual enviará los correos a través de ese SMTP.  Editamos el archivo /etc/ssmtp/ssmtp.conf con nuestro editor preferido (nano, vi, etc).  Editamos lo que a continuación sigue:

mailhub: Configuramos en esta variable nuestro servidor SMTP local por el cual enviaremos los correos. Si nuestro servidor smtp escucha por el puerto por defecto - 25, no es necesario agregar el puerto.  Si escucha por un puerto diferente, agregamos :PUERTO al final del nombre o IP del servidor smtp.  

rewriteDomain: Configuramos acá, el dominio smtp.

En mi caso, la configuración de mi archivo /etc/ssmtp/ssmtp.conf queda así:

Probamos el servicio:
Desde la consola, ejecutamos un comando para probar si los mensajes se están enviando:

echo "Esto es un email de prueba" | /bin/mail -s "TEST EMAIL" framirez.ve@gmail.com


Confirmamos la recepción del correo electrónico:

Ahora, podemos empezar a utilizar la funcionalidad de envío de correos electrónicos en cualquier script que realicemos.