Para configurar SSH para la transferencia de archivos de un Servidor a un Cliente o en sentido contrario, debemos de seguir los siguientes pasos, también hablaremos de las diferentes formas de Login frente a un Servidor SSH y como crear un Túnel el cual es lo mismo que un reenviador de Puertos con SSH. Primero debemos de Instalar el SSH, en este documento trabajaremos con OpenSSH, y utilizaremos el siguiente comando para la instalación:
# apt-get install ssh
Después de la instalación podemos entrar a configurar el archivo del demonio con las necesidades que tengamos para nuestro Servidor, el archivo se encuentra en la ruta /etc/ssh/ y tiene el nombre de sshd_config, algunos parámetros que podemos configurar para el SSH dentro de este archivo son:
# nano /etc/ssh/sshd_config
Este es el puerto por el cual va a escuchar nuestro Servidor lo podemos cambiar.
Este será la Versión con la cual vamos a trabajar, en este caso con la Versión 2.
Este será el tiempo que tendrá el Usuario para el Login frente al Servidor, este tiempo es en segundo.
Este parámetro es para permitir que las conexiones se puedan realizar como Root.
Esta línea es para indicar cuantas conexiones vamos a permitir simultáneamente en el Servidor.
Esta será para el máximo de intentos de Login frente al Servidor.
Aquí le diremos al Servidor si queremos trabajar con Autenticación con Login.
Aquí le estamos indicando que solo escuche peticiones por la interfaz con esta IP.
Esta línea es para indicarle al Servidor si vamos a permitir aplicaciones graficas por medio de la consola SSH.
Con esta linea podemos denegar la conexión de dicho usuario a a dicho equipo de la red, en este caso el PC con la IP 192.168.1.67 y con el Usuario Root.
NOTA: Después de toda configuración en el Archivo sshd_config debemos de reiniciar el Servidor para que tome los cambios, lo haremos con el siguiente comando (# /etc/init.d/ssh restart).
Conectarnos Por SSH
Por medio de la Consola
Para conectarnos por medio de SSH a otro equipo (Recordemos que es un Modelo Cliente – Servidor), lo que debemos de hacer es lo siguiente:
# ssh Usuario@DireccionIP
Ejemplo:
# ssh bluder@192.168.1.67
NOTA: La primera vez que nos conectemos desde un Cliente al Servidor el nos preguntara si estamos seguros de continuar con la conexión (SI/NO), le diremos que SI. Después el nos pedirá la contraseña del Usuario con el cual estamos accediendo al Servidor, el cual puede ser un Usuario local o el mismo Root del Servidor SSH, así:
Smith:/# ssh bluder@192.168.1.67
The authenticity of host '192.168.1.67 (192.168.1.67)' can't be established.
RSA key fingerprint is ae:d0:a5:ff:3e:85:da:0d:b5:69:d3:21:c0:32:8d:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.67' (RSA) to the list of known hosts.
bluder@192.168.1.67's password:
Linux Debian 2.6.26-1-686 #1 SMP Sat Jan 10 18:29:31 UTC 2009 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
bluder@Debian:~$
Si hemos cambiado el Puerto del Servidor el comando para conectarnos de al Servidor será el siguiente:
# ssh –p Puerto Usuario@DireccionIP
Ejemplo:
# ssh –p 2233 bluder@192.168.1.67
Si queremos salir de una conexión SSH, solo debemos de digitar en la consola el comando Exit, así:
bluder@Debian:~$ exit
logout
Connection to 192.168.1.67 closed.
Smith:/home/pepe#
Por modo Grafico
Para esta conexión debemos de teclear con la ayuda del teclado Alt + F2 el cual nos abrirá una pequeña ventana que se llama Ejecutar una Aplicación, en la cual debemos de ingresar las siguientes líneas (En este ejemplo nos conectaremos desde el Servidor a un Usuario pepe localmente, es decir nos conectaremos a nosotros mismos con el Usuario Pepe, localmente):
ssh://Usuario@DireccionIP
Ejemplo:
ssh://pepe@192.168.1.67
NOTA: Si es la primera vez de la conexión él nos preguntara si queremos continuar, por que desconoce la computadora remota, le daremos clic en Iniciar Sesión de Todos Modos. Después el nos pedirá la contraseña de ese Usuario (Es probable que tengamos que ingresar la contraseña 2 veces), así:
Indicamos el Usuario y la Dirección IP de la Maquina Remota:
Confirmamos que quermos iniciar sesión:
Daremos la contraseña del Usuario:
Y ya podemos ver la carpetas y directorios de la Maquina Remota:
Igualmente si le cambiamos el puerto a nuestro Servidor SSH lo que debemos de hacer es agregarle el puerto de la siguiente forma:
ssh://Usuario@DireccionIP:Puerto
Ejemplo:
ssh://pepe@192.168.1.67:2233
Copiar Archivos por SSH
Ahora si lo que queremos es copiar archivos del un equipo a otro, utilizaremos el siguiente comando:
# scp RutadelArchivoaCopiar Usuario@DireccionIPdelDestinatario:RutadelDestinatario
Ejemplo:
# scp /home/pepe/Desktop/ejemplo.odt bluder@192.168.1.67:/home/bluder/
En este ejemplo lo que estamos haciendo es copiando un archivo desde el Cliente, el cual se llama ejemplo.odt que se encuentra en la maquina Cliente, copiaremos el archivo al Servidor el cual tiene la IP 192.168.1.67 y un Usuario con el nombre de Bluder, este Usuario es local del Servidor y por ultimo indicamos en que directorio quedara el archivo (Al final del directorio del destinatario podemos indicar otro nombre para el archivo que queremos copiar si queremos que quede con un nombre diferente al original).
NOTA: Si es la primera vez que copiamos archivos, nos preguntara si estamos seguros de continuar con la conexión (SI/NO), después debemos ingresar la contraseña del Usuario de la maquina local, en este caso Bluder, así:
Smith:/$ scp /home/pepe/Desktop/ejemplo.odt bluder@192.168.1.67:/home/bluder/
The authenticity of host '192.168.1.67 (192.168.1.67)' can't be established.
RSA key fingerprint is ae:d0:a5:ff:3e:85:da:0d:b5:69:d3:21:c0:32:8d:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.67' (RSA) to the list of known hosts.
bluder@192.168.1.67's password:
ejemplo.odt 100% 24 0.0KB/s 00:00
Si es el caso que cambiamos el puerto del SSH, lo que debemos de hacer para copiar archivos por medio de SSH es añadir al comando la opción –P y el puerto (La –P en Mayúscula), así:
# scp –P Puerto RutadelArchivoaCopiar Usuario@DireccionIPDestinatario:RutadelDestinatario
Es el mismo comando pero le debemos de indicar el puerto por el cual está escuchando al SSH.
Ejecutar Aplicaciones Web por medio de SSH
En este paso ejecutaremos como ejemplo la aplicación en debían Gimp, para creación y edición de imágenes, en este paso el Servidor SSH tiene la aplicación instalada pero el Cliente no, por lo cual lo vamos a ejecutar con el siguiente comando:
# ssh –X Usuario@Direccionip AplicacionGrafica
Ejemplo:
# ssh –X bluder@192.168.1.67 gimp
Después de este comando nos cargara la aplicación que necesitamos tomar del Servidor, si el puerto del Servidor SSH lo cambiamos, debemos de ejecutar el siguiente comando:
# ssh –X –p 2233 Usuario@Direccionip AplicacionGrafica
Ejemplo:
# ssh -X -p 2233 bluder@192.168.1.65 gimp
En nuestro ejecutamos el comando normal y nos debe de aparecer la aplicación, en este caso Gimp y nos cargara como lo muestra la imagen:
Esta es la bienvenida que nos da la Aplicación (Gimp):
Después nos podemos dar cuenta de que podemos utilizar la Aplicación como si estuviéramos en el Servidor:
Cambiar el Mensaje de Bienvenida de SSH
Si nos hemos dado cuenta el mensaje que nos da el SSH es el siguiente:
Linux Debian 2.6.26-1-686 #1 SMP Sat Jan 10 18:29:31 UTC 2009 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Si queremos cambiar este mensaje, debemos de entrar a editar el archivo motd en la ruta /var/run/, con la ayuda del siguiente comando:
# nano /var/run/motd
Y colocar el mensaje que más nos parezca adecuado, guardamos el archivo y listo, así:
Recordemos que debemos de reiniciar el Servidor SSH para que los cambios se apliquen (# /etc/init.d/ssh restart).
Autenticación con SSH
Autenticación con Clave Pública
Como ya sabemos la autenticación hasta este momento ha sido con un password, el cual pertenece al Usuario local del Servidor SSH, lo que haremos en este momento será autenticarnos por medio de Llaves Asimétricas, las cuales crearemos por medio de SSH. Para generar el par de llaves utilizaremos el siguiente comando, podeos generar dos tipos de llaves RSA o DSA, así:
# ssh-keygen –t rsa
ó
# ssh-keygen –t dsa
Después de este comando el nos preguntara donde queremos guardar nuestro par de llaves, el nos da un directorio por defecto, en el cual le daremos Enter para decirle que aceptamos este directorio, después nos pedirá un password para este par de llaves, se lo podemos dar y a la hora de conectarnos al Servidor SSH solo nosotros sabremos el Password de la llave, o le daremos Enter para dejarlo así sin Password, así:
SI queremos ver el Fingerprint de nuestras llaves, ejecutaremos el siguiente comando (Esta lo hacemos para verifiar que estamos agregando la llave correcta):
# ssh-keygen -l -f Rutadelallave
Ejemplo:
# ssh-keygen -l -f /home/pepe/.ssh/id_rsa.pub
La salida debe de ser como esta:
2048 56:b3:40:9a:c5:76:2d:93:05:09:ec:4f:c3:08:a4:db id_rsa.pub (RSA)
Después de esto debemos de entregarle la llave Pública al Servidor SSH, lo haremos con la ayuda de los comandos anteriores, así:
# scp RutadelallavePublica Usuario@DireccionIP:RutadellavesdelServidor
Ejemplo:
# scp /home/pepe/.ssh/id_rsa.pub bluder@192.168.1.67:/home/bluder/id_rsa_pepe.pub
En este comando el nos pedirá la contraseña que colocamos a nuestro par de llaves y después la contraseña del Usuario Bluder, después de copiar la llave pública al Servidor debemos de entrar a editar el archivo de configuración del demonio en el Servidor SSH con la ayuda del siguiente comando:
# nano /etc/ssh/sshd_config
Buscaremos la línea AuthorizedKeysFile y la des comentaremos, al final de esta línea encontramos una ruta y un archivo de configuración (%h/.ssh/authorized_keys), el cual debemos de crearlo en esa ruta (Podemos cambiar la ruta o el nombre del archivo), recordemos con que Usuario estamos trabajando, en este archivo se encontraran las llaves publicas de los Clientes que se autenticaran contra el Servidor SSH, guardaremos los cambios y saldremos del editor.
Después debemos de re direccionar la llave pública del Cliente al archivo que creamos el cual contendrá la llave, para ello ejecutaremos el siguiente comando:
# cat RutadelaLlave > /home/pepe/.ssh/authorized_keys
Ejemplo:
# cat /root/llaves/id_rsa.pub > /home/pepe/.ssh/authorized_keys
NOTA: Si tenemos más de una llave para agregar al archivo para la autenticación, lo que debemos de hacer es utilizar el mismo comando pero con doble signo >> para la redirección, de lo contrario nos borrara la llave que tengamos y nos dejara solo la ultima llave agregada.
Después de esto debemos de reiniciar el servidor SSH y nos debe de funcionar la Autenticación con Clave Publica (# /etc/init.d/ssh restart).
Para la conexión por medio de Claves Públicas debemos de utilizar el siguiente comando:
# ssh Usuario@DireccionIP
Ejemplo:
# ssh bluder@192.168.1.67
Este es el mismo comando para la conexión de SSH, pero el Servidor no nos debe de pedir la clave del Usuario pepe sino la clave que le asignamos a nuestra llave y si no le dimos ninguna debemos de entrar en limpio, porque la autenticación se hará con nuestro par de llaves (La Privada que tenemos nosotros y la Publica que tiene el Servidor).
En nuestro caso ingresamos desde el Cliente vía SSH y seguimos los pasos anteriores, después nos salimos del Servidor e ingresamos con la ayuda del par de llaves públicas, así:
Si estamos trabajando con un puerto diferente para el SSH, el comando debe de ser el siguiente:
# ssh –p Puerto Usuario@DireccionIP
Ejemplo:
# ssh –p 2233 bluder@192.168.1.67
Un problema que nos puede aparecer a la hora de la autenticación es que el Cliente no encuentra su propia llave Publica, esto se da porque de pronto el nombre de la llave cambio o tenemos varias llave en el mismo equipo, lo que debemos de hacer en este caso es decirle con que llave queremos trabajar, el comando debe de ser así:
# ssh –i RutadelaLlavePrivada Usuario@DiereccionIP
Ejemplo:
# ssh –i /home/pepe/id_rsa_pepe bluder@192.168.1.67
En este ejemplo la llave tenía otro nombre y lo debemos de especificar por que el SSH toma por defecto solo id_rsa ó id_dsa, si estamos trabajando con otra llave sería lo mismo, en este comando debemos de colocar el -i que significa identificación. Si el puerto del Servidor SSH es otro debemos de indicarlo con el siguiente comando:
# ssh –p Puerto –i RutadelaLlavePrivada Usuario@DiereccionIP
Ejemplo:
# ssh –p 2233 –i /home/pepe/id_rsa_pepe bluder@192.168.1.67
Autenticación basada en Listas de Acceso con Autenticación de Cliente
En este paso de autenticación lo que haremos es autenticación por Clientes, es decir, la autenticación solo se le permitirá a los Usuario que indiquemos dentro del archivo de configuración del demonio SSH, para ello debemos de entrar a editar el archivo de configuración con la ayuda del siguiente comando, así:
# nano /etc/ssh/sshd_config
Dentro del archivo de configuración debemos de agregar la siguiente línea, en la cual le diremos el nombre del usuario con el cual se podrán conectar los Clientes y la dirección IP del Equipo de donde se podrán conectar, debe de ser así:
AllowUsers Usuario@DireccionIP
Ejemplo:
AllowUsers bluder@192.168.1.65
Esta línea nos dice que solo se podrá Autenticar el Usuario pepe (Que es un Usuario local del Servidor SSH) desde el equipo con la dirección IP 192.168.1.80. Recordemos que también se puede autenticar el Usuario Root si no hemos cambiado el parámetro en el archivo de configuración. Debemos de reiniciar el demonio SSH para que los cambios se actualicen en el Servidor.
Conexión de un Túnel VNC
Lo que debemos de hacer para una conexión por medio de un túnel SSH con VNC (Aplicación de Escritorio Remoto), con el cual queremos que la información que viaje de extremo a extremo sea lo más seguro posible, para ello debemos de tener instalado el VNC en el Servidor SSH y en el Cliente y listo, para crear el túnel debemos de utilizar el siguiente comando:
# ssh –L PuertoLocal:MaquinaRemota:PuertoRemoto Usaurio@DireccionIP
Ejemplo:
# ssh –L 5959:127.0.0.1:5900 bluder@192.168.1.67
En este comando le estamos diciendo que cree el túnel (-L), que tome el Puerto 5959 en la maquina local (Cliente), que tome la IP 127.0.0.1 (Que será la IP del Servidor, pero como lo indicaremos más adelante le podemos decir el Loopback y no revelaremos la IP del Servidor, aunque la podemos indicar) , el numero del Puerto real del VNC en el Server que es el 5900 (Si no lo hemos cambiado) y por último el Usuario para la conexión (bluder) y la Dirección IP del Servidor (192.168.1.67).
Después de la conexión y de la Autenticación que puede ser por cualquiera de las anteriores (En este caso tenemos la autenticación por llaves publicas), desde el Cliente entraremos al VNC e iniciaremos la Conexión por medio del túnel indicando la Dirección IP del Servidor (127.0.0.1) y el Puerto que escogimos para la comunicación (5959) y listo iniciara la comunicación por medio del túnel, es un poco más lento pero está viajando por SSH.
NOTA: El Servidor VNC debe de estar configurado como lo desee el Administrador, en el caso de nosotros el Cliente no necesita verificación y no puede manejar nuestro equipo.
Recordemos que si le cambiamos el puerto al Servidor SSH, se lo debemos de indicar dentro del comando, de la siguiente forma:
# ssh –L –p Puerto PuertoLocal:MaquinaRemota:PuertoRemoto Usaurio@DireccionIP
Ejemplo:
# ssh –L –p 2233 5959:127.0.0.1:5900 bluder@192.168.1.67
Md5sum es un programa creado por los sistemas Unix que tiene versiones para otras plataformas, realiza un HASH MD5 de un archivo o documento. La función de HASH devuelve un valor que es prácticamente único para cada archivo, con la particularidad que una pequeña variación en el archivo provoca una salida totalmente distinta, es decir, si se cambia el contenido del archivo el HASH será totalmente distinto, lo que ayuda a detectar si el archivo sufrió alguna variación. Es una herramienta de seguridad que sirve para verificar la integridad de los datos.
Es muy utilizado en la actualidad y en el mundo Linux es muy habitual encontrar las sumas de control MD5 de todos los paquetes que componen una distribución. También hay algunas aplicaciones que utilizan su algoritmo para encontrar archivos duplicados.
En este documento aprenderemos a crear el Resumen HASH para varios archivos con el fin de revisar la integridad de algunos archivos de nuestro sistema, como también podemos verificar archivos de nuestro equipo, para ello seguiremos los siguientes pasos:
Para crear el Resumen HASH a un archivo o documento, utilizaremos el siguiente comando (Recordemos tener creado ya un Documento o tener un archivo al cual el crearemos el Resumen HASH, el archivo no va a cambiar con esta acción):
# md5sum NombredelDocumento > NombredelHASH.md5
Después de este comando el nos creara el archivo con el nombre que le acabamos de decir y dentro el Resumen HASH para dicho archivo, este será un ejemplo de como quedara en nuestro caso:
# md5sum /bin/su > /home/smith/Desktop/PracticaHASH.md5
Como podemos ver, le hemos creado el Resumen HASH a un binario, en este caso
su, que es el que nos permite convertirnos en súper usuario en
la Shell de Debían y otras distribuciones de Linux, le dimos la ruta absoluta para que podamos en un paso mas adelante verificar el archivo en busca de cambios y el sepa donde se encuentra el archivo, en este caso el binario
su que esta en el directorio /bin. También le especificamos la ruta donde quedara el Resumen HASH, que como podemos ver esta en el Escritorio del Usuario del equipo.
Miraremos el contenido del Resumen HASH, con un simple editor de texto, la salida debe de ser como esta, así:
3c652ed6c9f60c4f741f7f3d0c62c3dc /bin/su
Para verificar la integridad del Archivo ejecutamos el siguiente comando:
# md5sum -c NombredelHASH.md5
En este comando debemos de darle el archivo que creamos anteriormente para que el verifique la integridad de los datos. Un ejemplo de como seria en nuestro caso es así:
# md5sum -c /home/smith/Desktop/PracticaHASH.md5
El nos debe de sacar la siguiente información si el archivo no ha cambiado:
/bin/su: La suma coincide
Si el contenido del archivo si ha cambiado debe de ser la siguiente salida (Lo podemos mirar cambiando tan solo una letra del archivo), así:
md5sum: WARNING: 1 of 1 computed checksum did NOT match
El cual nos quiere decir que el archivo o documento a cambiado. En el paso anterior les hablaba de la ruta absoluta, esto quiere decir que podemos tener el Resumen HASH en cualquier ruta del equipo y el va a encontrar el archivo o documento, si lo dejamos sin la ruta el no sabrá donde esta el archivo.
El md5sum genera un ID único para el archivo o documento, con una longitud de 128 bits, no importa el tamaño del archivo o el documento, siempre tendrá la misma longitud en bits. Si el contenido del archivo cambia, el ID también lo hará, para ver el ID del documento ejecutaremos el siguiente comando:
# md5sum NombredelDocumento
El comando nos debe de arrojar una linea como esta:
ea3c40f0f83608587e90b20793963066 /home/smith/Desktop/PracticaHASH.md5
Podemos verificar esto con cualquier otro archivo de nuestro equipo, después de mirar el ID cambiamos algo del archivo y el nos dará un ID totalmente diferente al anterior.
Ahora haremos un ejemplo de varios archivos o documentos en el mismo Resumen HASH con el fin de verificar la integridad de varios documento con la ayuda del mismo comando, la sintaxis del comando es la misma pero en ves de una sola redirección (>) deben de ser dos (>>) para que no sobrescriba el Resumen HASH que tenemos sino que lo agregue en forma ordenada, para ello ejecutaremos el siguiente comando:
# md5sum NombredelDocumento >> NombredelHASH.md5
En este paso debemos de colocar el nombre del segundo documento que queremos agregar en Resumen HASH y listo, en nuestro caso al mirar el Resumen HASH con el editor de texto la salida es la siguiente:
51a5eb276074fd0b018abe75dd21f224 /bin/su
d61441a7541064e88c6c6f70de93c20d /usr/bin/passwd
70218c8843abd3cf4f226ecb2fa9e959 /usr/bin/who
cfc84ceaa2baab9baccc39f6e952bdc8 /usr/bin/last
49f1c3158478afaf2ec4ce6dbe497203 /usr/bin/finger
d7aad93c9e44160e60d58427d3d35586 /bin/cat
90458fdc21966f8b9a441e0369a1587c /bin/rm
Y al ejecutar el comando para verificar el estado de los archivos el resultado debe de ser como este:
/bin/su: La suma coincide
/usr/bin/passwd: La suma coincide
/usr/bin/who: La suma coincide
/usr/bin/last: La suma coincide
/usr/bin/finger: La suma coincide
/bin/cat: La suma coincide
/bin/rm: La suma coincide