lunes, 9 de abril de 2012

Instalar un servidor SFTP en Debian GNU/Linux

Hola a todos,
Hoy quiero hablaros de instalar un servidor SFTP en nuestro sistema Debian GNU/Linux.

¿Qué es SFTP? En pocas palabras, es un protocolo de transmisión de datos que se apoya en otro protocolo de seguridad para hacer fiable la comunicación y la transferencia de los datos.

La principal diferencia a nivel práctico entre el protocolo SFTP y el conocido FTP es que este último usa una comunicación no cifrada, esto es, toda transferencia de información viaja en texto plano, haciendo posible que un atacante pueda interceptar dicha información.

Sin embargo SFTP subsana esa carencia empleando un protocolo de seguridad, que normalmente es SSH.  Así pues, cuando hablamos de un servidor SFTP, estamos hablando realmente de un servidor SSH empleado para transferir archivos de forma segura.

¿De qué puede servirnos a nosotros tener un servidor SFTP? La respuesta es sencilla y contundente. Tener un servidor SFTP nos permitirá acceder a nuestros datos desde cualquier punto del planeta en el que haya una conexión a Internet, independientemente del sistema operativo que usemos en el cliente. Además de esto, usaremos conexiones encriptadas que harán sumamente difícil que un atacante intercepte nuestras comunicaciones. Incluso diría que es imposible que esto ocurra, pero prefiero pecar de paranoico.

Y a todo esto, además de las ventajas de disponer de un servidor SFTP para la transferencia de nuestros datos, podremos disfrutar de las ventajas que nos proporciona un servidor SSH por sí solo, como por ejemplo la administración del servidor a distancia e incluso la ejecución de aplicaciones gráficas por vía remota.

Conviene que tengamos claro que este servidor SFTP nos servirá tanto para acceder a él desde nuestra red local como para acceder desde Internet. Para acceder desde nuestra red local, tendremos que hacer uso de la dirección IP privada del servidor o del nombre del equipo si disponemos de un servidor DNS privado, tal y como explico aquí. En cambio para acceder desde Internet necesitaremos la IP pública de nuestro servidor o el nombre de dominio que hayamos adquirido, ya sea pagando el servicio o usando un redireccionamiento DNS dinámico, tal y como explico aquí.

Bien, vamos a comenzar instalando el servidor OpenSSH en nuestro sistema GNU/Linux:

$ sudo aptitude install openssh-server

Con esto se habrán generado los archivos de configuración necesarios. Vamos ahora a modificar el fichero principal:

$ sudo nano /etc/ssh/sshd_config

Como podéis ver, la primera línea que podemos modificar es la relativa al puerto que usará el servidor SSH. Por defecto usa el puerto 22, pero yo siempre prefiero cambiárselo a uno que sea poco conocido. No obstante esta es una decisión personal, así que ahí queda ;-)

Ahora vamos a añadir los permisos necesarios en el servidor SSH. Nos situamos justo debajo de la línea 14 que dice UsePrivilegeSeparation yes, y escribimos la siguiente línea:

AllowUsers usuario

Cambiando el usuario por el que nos interese a nosotros. También es posible añadir más de uno separándolos por espacios en blanco. Por supuesto estos usuarios deben tener cuenta de usuario en el sistema.

Bien, pues estas son todas las modificaciones que debemos hacer en este fichero. Lo guardamos debidamente y reiniciamos el servidor SSH:

$ sudo /etc/init.d/ssh restart

Ahora ya podemos probar que funciona. Desde el propio servidor hacemos lo siguiente en un terminal:

$ ssh -p puerto usuario@localhost

Cambiando puerto por el puerto que hemos establecido en la configuración y usuario por el nombre de usuario al que le hemos dado permiso de acceso. Si no le pasamos el parámetro -p utilizará el puerto por defecto, el 22. El resultado será algo así:

$ ssh -p 1234 tony@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 31:a7:fb:3a:4e:76:7d:6d:9c:4f:71:5c:a5:1d:c8:d9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
tony@localhost's password:

Una vez hemos confirmado que deseamos conectar con el servidor e ingresado la contraseña, ya estaremos dentro de una sesión SSH en nuestro servidor. A partir de este momento podremos administrarlo como si estuviéramos físicamente sentados frente a él.

Así pues, también podremos conectarnos a nuestro servidor desde otra máquina a través de su IP privada o su nombre de red (para esto último hará falta un servidor DNS):

$ ssh -p 1234 tony@ekipotonety.casita.com

Y conectarnos además desde Internet usando para ello el nombre de host que nos creamos para nuestro redireccionamiento DNS dinámico (eso sí, habiendo redirigido adecuadamente en nuestro router el tráfico del puerto SSH a nuestro servidor):

$ ssh -p 1234 tony@debianisfreedom.sytes.net

Una vez queramos salir de la sesión remota, no tenemos más que cerrarla:

$ exit
logout
Connection to debianisfreedom.sytes.net closed.

Bien, con esto ya tenemos listo nuestro servidor SSH. A partir de este momento podemos proceder de dos maneras, una de ellas es utilizar scp para transferir archivos entre las máquinas, pero todo esto, claro está, a través de la línea de comandos.

La otra opción es la que nos ocupa aquí, que es utilizar un cliente SFTP gráfico para acceder a nuestro servidor, y con ello poder hacer transferencias de ficheros en modo gráfico.

De entre todas las posibilidades para acceder en modo gráfico a nuestro servidor SFTP, nosotros nos vamos a centrar en dos. La primera se trata de Filezilla, un fantástico cliente FTP licenciado bajo la GNU/GPL y multiplataforma, por tanto podremos usarlo desde cualquier sistema operativo. La segunda opción es crearnos una unidad de red en nuestro navegador de archivos, de tal forma que podamos acceder a nuestro servidor como si de una carpeta más del sistema se tratase.

Y por último, a modo de epílogo, veremos cómo acceder a nuestro servidor SFTP desde nuestro dispositivo Android.

Por tanto, para instalar Filezilla, usaremos el método que nuestro sistema operativo nos permita. En el caso de Debian GNU/Linux:

$ sudo aptitude install filezilla

Cuando lo ejecutemos, veremos una ventana como la siguiente:


Haremos clic en el icono superior izquierda llamado Gestor de sitios. A continuación veremos esto:

Y haremos clic en el botón Nuevo sitio. A continuación rellenaremos los siguientes campos con la información adecuada:
  • Servidor: dirección IP o nombre de red mediante el cual accederemos al servidor SFTP.
  • Puerto: el puerto que hayamos establecido en la configuración del servidor SSH. Por defecto es el 22.
  • Server Type: lo cambiaremos a SFTP - SSH File Transfer Protocol.
  • Logon Type: lo cambiaremos a Normal.
  • Usuario: el nombre de usuario al que le hemos dado permisos de acceso en el servidor SSH.
  • Contraseña: la contraseña del usuario al que le hemos permitido el acceso.

La cosa quedaría más o menos como en la siguiente imagen:


A continuación vamos a la pestaña Avanzado dentro de la misma ventana. Aquí vamos a modificar los directorios a los que se conectará Filezilla por defecto al establecer una conexión remota. Esto es a gusto del consumidor, pero lo normal es querer conectarse a nuestra carpeta personal, tanto en el cliente como en el servidor:


Una vez rellenados los dos campos, pulsaremos el botón de Conectar. Veremos un mensaje como el siguiente, en el que se nos advierte que el servidor al que nos conectamos podría no ser fiable. En este caso, sabemos seguro que lo es puesto que lo hemos creado nosotros:


Y una vez confirmado, veremos la interfaz de Filezilla dividida en dos partes, la de la izquierda correspondiente al cliente, y la de la derecha perteneciente al servidor. De esta forma podremos efectuar transferencias de archivos de una forma sencilla y cómoda arrastrando y soltando:



Bien, ahora vamos con la segunda opción para conectarnos a nuestro servidor SFTP. Se trata de emplear nuestro navegador de archivos, en mi caso Dolphin, para crear una unidad de red de forma que podamos acceder a nuestro servidor cómodamente mediante el navegador.

Para ello, nos dirigimos a la sección de Red de nuestro navegador de archivos, y hacemos clic sobre el acceso de Añadir carpeta de red:



De entre todas las opciones, seleccionaremos la de Shell Segura (ssh):


Y rellenamos los campos tal como sigue:
  • Nombre: nombre que tendrá la conexión a nuestro servidor desde Dolphin, puede ser cualquier nombre que nosotros consideremos descriptivo.
  • Usuario: el nombre de usuario autorizado para acceder al servidor SFTP.
  • Servidor: nombre de red o dirección IP del servidor SFTP.
  • Puerto: el puerto que hemos establecido en la configuración del servidor SSH, por defecto el 22.
  • Carpeta: directorio al que se conectará por defecto el cliente SSH, lo normal es que sea nuestra carpeta personal.

Quedaría más o menos como sigue:


Y una vez completados los campos, haremos clic en Guardar y conectar. Nos encontraremos con que se nos pide la contraseña del usuario con el que nos hemos conectado:



Y una vez conectados, se nos mostrará el navegador conectado a nuestro servidor. Para hacer el acceso a nuestro servidor más cómodo, podemos añadirlo a la barra de lugares de tal forma que el acceso al mismo sea instantáneo:



Por último, y como ya hemos comentado, vamos a ver cómo podemos acceder a nuestro servidor SFTP desde nuestro dispositivo Android.

Tal y como hicimos en el tutorial sobre  la instalación de un servidor de archivos multimedia para Android, vamos a usar una aplicación descargable desde la Play Store llamada ES Explorador de Archivos. Esta magnífica aplicación nos permitirá acceder a sitios remotos, entre otras cosas.

En este caso vamos a utilizar un Samsung Galaxy Tab 10.1 con Android 3.2, pero como ya supondréis, es válido cualquier dispositivo, ya sea tablet o smartphone, en el que pueda instalarse esta aplicación. 

Para descargarlo accedemos a la Play Store y lo buscamos:


Una vez instalado, lo ejecutaremos desde el acceso directo recién creado y veremos su interfaz:


Si nos fijamos, la interfaz consta de cuatro pestañas. A nosotros nos interesa la tercera pestaña llamada FTP. Cuando entremos a la misma, veremos lo siguiente:


Pulsamos sobre el botón Nuevo y nos encontraremos con la siguiente pantalla, donde tendremos que escoger la opción SFTP:


Así pues nos aparecerá un formulario que tendremos que completar con los datos de nuestro servidor, tal y como os muestro aquí:


Una vez completado el formulario, pulsaremos sobre el botón OK y volveremos a ver la pantalla principal de conexiones FTP, pero esta vez ya dispondremos de la conexión a nuestro servidor recién creada:


Y cuando accedamos a nuestro servidor SFTP mediante el acceso recién creado, veremos por fin el contenido de nuestro servidor SFTP:



La única pega que le pondría a esta aplicación, por ponerle alguna, es que no permite la configuración de un directorio al que conectarse por defecto, tal y como hemos hecho mediante Filezilla y Dolphin. Pero bueno, siempre podemos acceder a nuestra carpeta personal a través de la ruta pertinente.

Así que eso es todo amigos, espero que lo disfrutéis, que de eso se trata.

Un saludo a todos, y para cualquier duda o consulta, no dudéis en comentar.

10 comentarios:

  1. Claro y util, buen post muchas gracias!

    ResponderEliminar
  2. Muchas gracias a ti taoshi, por pasarte y comentar. ¡Un saludo!

    ResponderEliminar
  3. Sobre la aplicación ES Explorador de Archivos, si se puede poner un directorio por default al iniciar, tan solo al indicarlo en la configuración en la parte de servidor por ejemplo:

    debianisfreedom.sytes.net/home/tony

    Muy buen tutorial por cierto, saludos.

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. hola queria saber como puedo borrar los datos q no sirven, tengo un dedicado solo para stream de radios con centova el cual se actualiza a cero todos los meses y en el servidor se quedan datos q no sirven. Como puedo borrarlos? grcias y un saludo

    ResponderEliminar
    Respuestas
    1. @Aldo,

      Puedes borrar los archivos como lo harías de cualquier otra forma, si te conectas mediante un cliente gráfico puedes hacerlo desde ahí, y si lo haces por consola mediante SSH también puedes borrarlos usando el comando rm.

      Un saludo.

      Eliminar
  6. Hola, Tony... Es interesante tener un servidor propio de sftp, por eso decidi a hacerlos, pero...

    sale este error

    ssh_exchange_identification: Connection closed by remote host

    hice muchas configuraciones pero no puedo lorgar hacerlo funcionar, tengo IP publica fija, de todas formas use el no-ip.com--- pero tampoco logro hacerlo funcionar...

    Sabrias a que se debe este problema???

    Gracias y muy buenas las explicaciones en tu blog.

    Uso Linux Mint Debian Edition 201303 (LMDE)

    Estare revisando la entrada, por posibles respuestas.

    Muchas Gracias!

    ResponderEliminar
  7. Que tal buen dia,
    Realize la instalacion y una vez que ahgo los cambios en el puerto me logueo desde otra terminal del mismo server y me conecta y despues de un segundo me cierra.
    Y desde fuera hace lo mismo.
    Saludos cordiales.

    ResponderEliminar