SSH: Un Mundo Remoto » Blog de Notas | Soy Facus

miércoles, 4 de julio de 2012

SSH: Un Mundo Remoto

...y llegó el día en que decidí volver a escribir notas.

Buenas! Soy Facus y aunque estuve un poco perdido estos días/semanas/meses, sepan que los extrañé.. y mucho! espero que ustedes a mi.

Sin más rodeos, pasemos directamente a esta EXTENSA nota que tenía en mente hacerla hace mucho tiempo: SSH! Un Mundo Remoto.


Como bien sabrán (si es que llegaron hasta acá gracias a San Google) SSH, o mejor dicho Secure Shell, es una aplicación cliente/servidor que básicamente ofrece acceder a una máquina remota y ejecutar comandos en ella de una manera segura, ya que usa un sistema de encriptación muy potente.

Seguramente alguna vez se les pasó por la cabeza la idea de acceder a los datos de la PC de su hogar desde la PC del trabajo... porque olvidaron pasarse al pen-drive ese archivo de texto tan necesario para trabajar.

Aunque hoy en día existen muchas aplicaciones gráficas que tienen la capacidad de mostrar un escritorio remoto dentro de la pantalla que tenemos enfrente (ej. LogMeIn, VLC, TeamViewer, etc.), hay circunstancias en las que no queremos usar tantos recursos por solo un archivo de texto. O simplemente no es tan fácil controlar y administrar todo un sistema operativo desde esa ventana con grafiquitos lindos.

Para eso existe SSH, una idea simple, una interfaz tan sencilla (una terminal de comandos) hace que SSH sea LA herramienta ideal, perfecta, y MUY potente que competiría con cualquiera y ganaría.



En esta nota, voy a comentarles algunas de las maravillas que podemos hacer con esta aplicación y también les voy a dejar algunos tips para hacer de nuestras conexiones remotas mucho más seguras de lo que ya son.


Vamos entonces a plantearnos una situación hipotética que nos servirá de ejemplo para la guía.

Situación: Fulano quiere conectarse a su PC hogareña, desde la PC del trabajo.

Lo primero que necesitamos, es instalar lo necesario para que todo funcione correctamente.


>: Instalación


Desde la casa de Fulano, vamos a instalar ssh desde Synaptic, Centro de Software o desde la consola:

sudo aptitude install ssh
o sino...
sudo apt-get install ssh

Con este comando, se instalará el Servidor SSH en la casa de Fulano y se iniciará el demonio que gestionará sus próximas conexiones.

Luego, desde el trabajo, Fulano necesita un Cliente SSH.
Por lo general, en las distribuciones GNU/Linux ya se cuenta con un Cliente SSH. En Window$ existen aplicaciones como PuTTy, pero en esta guía no voy a dar soporte ni explicaciones que beneficien al monopolio (al menos no gratis).
Clientes de SSH hay por montones, incluso para teléfonos móviles, sean Smartphones o no. Para Android, Symbian e iOS hay miles... así también como Clientes SSH java, para teléfonos más viejitos, como mi Sony Ericsson W200 que tantas satisfacciones me dio en su momento.


Antes de pasar a explicar su uso, vamos a configurar algunas cositas en el servidor para agregar seguridad a nuestras conexiones, porque nada sirve si dejamos por default las configuraciones. Bueno, yo no lo haría así.


>: Configuración:


Como la mayoría de los programas de GNU/Linux, tenemos un archivo de configuración en nuestro sistema, que lo abriremos con privilegios para poder editarlo a nuestro gusto:

sudo gedit /etc/ssh/sshd_config

En él, vamos a ver los siguientes puntos:

Nota: si alguna de las opciones aquí mencionadas no figuran en tu archivo de configuración, simplemente agrégalas al final del archivo (no hace falta respetar un orden, pero ojo con repetirlas).

El puerto: SSH usa por defecto el puerto 22, por seguridad recomiendo cambiarlo a otro número, el que se te ocurra que no esté siendo ocupado por otra aplicación. Esta maniobra evitará la intrusión de algunos programas de hacking que atacan a los puertos conocidos.
Entonces, en nuestro archivo de configuración, donde dice Port 22, cambiamos por algún otro número.
Port 4321

Protocolo: SSH usa dos tipos de protocolo, el protocolo 1 y el 2 (que ocurrente doctor). El protocolo 1 ya es un tanto obsoleto, así que si en tu archivo de configuración figura este o "protocolo 2,1", vamos a cambiarlo por 2 a secas.
Protocolo 2

Autenticación: En la sección "Authentication" vamos a ver dos cosas. Primero, el tiempo que tenemos para ingresar los datos de loggin, si conocemos nuestro usuario y contraseña, no nos debería llevar más de 30 segundos introducirlas.
LoginGraceTime 30
Luego, vamos a evitar que alguien intente loggearse como root, ya que con nuestro usuario y el comando "su" o "sudo" no nos hace falta entrar como root.
PermitRootLogin no

Estos dos tips, evitarán varios programas automáticos que se aprovechan de estos descuidos para sacarnos información y a veces comprometer toda nuestra seguridad.

Usuarios Permitidos: También podemos limitar el acceso a usuarios que no conocemos, dejando solo una lista blanca donde se encontraran los nombres de usuarios que sí permitimos. Por ejemplo, queremos que Fulano pueda acceder a su PC y también su novia Fulana, pero Mengano no, entonces solo hará falta especificar.
AllowUsers fulano fulana

Intentos máximos: Otra de las limitaciones que podemos generar para impedir o perturbar los intentos de personas mal intencionadas, son los intentos que el cliente puede hacer hasta poder ingresar al servicio. En otras palabras, si ponemos un número alto, el cliente (o intruso) puede ir "probando" con varias combinaciones de usuarios y contraseñas hasta dar (o no) con la correcta (fuerza bruta). En cambio si ponemos un número bajo, el servidor rechazará al cliente que erre la contraseña muy seguido, haciendo que éste tenga que volver a pedir la solicitud.
MaxAuthTries 2

Conexiones simultaneas: En esta última opción, vamos a limitar las conexiones simultaneas. Si vamos a usar solo nosotros el servicio, con poner una conexión simultanea alcanzará, en cambio si a nuestro servidor accederá más usuarios, debemos determinar ese número y colocarlo en la X siguiente.
MaxStartups X


Con estas simples modificaciones aumentaremos en buena medida la seguridad de nuestro sistema. Solo hace falta guardar las modificaciones del archivo de configuración y reiniciar el servicio para que se efectúen los cambios.

sudo /etc/init.d/ssh restart

Algo que nunca está de más repetir, nunca está de más repetir, nunca está de más repetir, es que de nada sirve implementar todos estos puntos de seguridad si tu usuario es "admin" y tu contraseña "123". Por más que le demos un uso personal a todas estas cositas, debemos acostumbrarnos a usar contraseñas seguras y en lo posible, una diferente para cada cosa.


Listo las configuraciones, pasemos entonces al funcionamiento:

>: Usos de SSH


Bueno, como vimos antes... SSH sirve para conectar dos máquinas, la que tenés enfrente con otra que puede estar en una Máquina Virtual, en red LAN o del otro lado del mundo vía internet.

Volviendo al ejemplo de Fulano y sus dos PC, vamos a ver como Fulano va a acceder desde su trabajo a su hogar. El comando general es:
ssh cuenta@servidor
Donde para nuestro ejemplo, la cuenta de Fulano es "fulano" y su servidor está en la IP 190.60.100.60. Lo que nos queda como:
ssh fulano@190.60.100.60
De esta forma, lo normal sería que no nos deje entrar en el servicio de SSH porque anteriormente cambiamos el puerto en el archivo de configuración. Entonces necesitamos especificar el puerto nuevo de la siguiente manera:
ssh fulano@190.60.100.60 -p 4321
Ahora sí, después de preguntarnos si deseamos establecer la conexión y reconocer a la máquina remota (yes) nos pide que ingresemos la contraseña.
Luego, nos da la bienvenida al sistema y ya tenemos la conexión establecida, Ahora nuestro "prompt" es: fulano@190.60.100.60:~$ (o el nombre de host remoto) y podremos ejecutar cualquier comando como si se tratase de un típico Bash (porque lo es).

Ahora podremos administrar el sistema remoto, ver el espacio en disco, uso de memoria RAM, deslizarnos entre sus directorios, gestionar servidores que estén en ejecución, iniciar o parar algunos otros, y lo que se te ocurra!

Pero volvamos a la situación, Fulano se conectó para extraer un archivo de texto que está entre sus documentos:


>: Copiar Archivos:


Tanto en SSH, como en casi todo relacionado con la informática, hay varias maneras de obtener lo mismo. Vamos a ver un ejemplo de Copia Segura (comando scp) que es nada más ni nada menos que el conocido comando copiar (cp) pero usando la seguridad de SSH así como también su posibilidad de hacerlo remotamente.

Fulano deberá abrir una terminal de comandos (consola) en la PC de su trabajo y ejecutar lo siguiente:

scp cuenta_pc_hogar@ip_pc_hogar:ruta/archivo ruta/archivo

Pongamos un ejemplo práctico para que se entienda.
En el Escritorio de la PC del hogar de Fulano, se encuentra el archivo que necesita, llamado "factura.odt". Entonces el comando que necesita ejecutar Fulano desde su trabajo quedaría así:

scp -P 4321 fulano@190.60.100.60:/home/fulano/Escritorio/factura.odt /home/usuario/Descargas

Con esto, estamos diciendo que el archivo "facturas.odt" se copiará a la carpeta "Descargas" de la cuenta "usuario" de la PC del trabajo.
Un detalle a tener en cuenta es que en SCP para especificar un puerto, el argumento es -P (mayúscula).


Otra situación sería que Fulano quiera copiar un fichero que se encuentra en la PC del trabajo a su PC de su hogar. Por ejemplo, ahora Fulano quiere pasar el fichero "rock.ogg" que está en el Escritorio de la PC del trabajo, al directorio "Música" de la PC de su hogar. Entonces simplemente deberá ejecutar:

scp -P 4321 /home/usuario/Escritorio/rock.ogg fulano@190.60.100.60:/home/fulano/Música/


Como verán, siempre se respeta el orden clásico del comando CP, o sea.. comando ruta/archivo_original ruta_destino/archivo_copia

También podremos acceder con SSH a una PC, desde allí tomar un archivo y copiarlo a otra PC distinta de las dos primeras, siempre y cuando tengamos acceso (loggin) en cada una de ellas.


>: SSH en Nautilus


Otra opción es navegar por los directorios de la maquina remota a través de un entorno gráfico como nos permite Nautilus. Esto puede ser más usado por personas que no quieren amigarse mucho con la consola.

Para usar esta opción, vamos a abrir una ventana de nautilus y presionar CTRL+L o en el menú Ir > Lugar...
Se abrirá una caja de texto donde escribiremos lo siguiente:

ssh://cuenta@servidor:puerto

De esta manera, vamos a ver el sistema de ficheros de la maquina remota y nos podremos ir desplazando de un directorio a otro con mayor facilidad.


En Nautilus escribimos ssh://cuenta@servidor:puerto

Ingresamos contraseña de la cuenta remota

El directorio remoto montado en nuestro Nautilus

Ahora podemos copiar cualquier archivo de una manera simple.


>: Otros Usos:


Como dije antes, se pueden realizar una infinidad de cosas remotamente usando SSH. Es una herramienta muy potente e indispensable para cualquier usuario que se jacte de administrador de sistemas.

Otros usos posibles extenderían mucho más esta Nota que ya está sobrepasando los límites, pero voy a dejarlos mencionados para generar curiosidad o interés y en un futuro no muy lejano, explicarlos si hace falta en otra Nota.

  • Acceder a sistemas lejanos
  • Transferencia segura de archivos
  • "Tunelizar" conexiones con SSH para "segurizar" el tráfico
  • Ejecutar remotamente Aplicaciones gráficas
  • Gestionar y Administrar sistemas remotos y/o servidores (Web, Bases de Datos, etc)
  • ...y muchísimo muy mucho más =)


Personalmente lo uso para mis pequeños proyectos donde accedo a mis dispositivos por comodidad para no levantar el trasero de la silla, así como también para acceder a mis documentos desde cualquier PC (o incluso desde mi teléfono móvil) cuando salgo de mi casa.

Esto último es muy efectivo, pero debemos Abrir el Puerto SSH en el Router para poder acceder con IP pública de cualquier parte del mundo o con DDNS (DNS Dinámicos).

Este tema sí se merece una Nota aparte, así que me voy despidiendo para no caer en la tentación de contarles todo acá.


Para finalizar el tema, quiero confesar que esta nota fue inspirada por este post del Wordpress de TuxPepino. Compartido con una Licencia Creative Commons igual a la de este Blog.


Espero que les sirva esta guía y aprendan algo nuevo.
Usen SSH! pero háganlo seguro.



SoyFacus | y merecontraexcedíconestanota .

<---- Compartilo desde la barra social. (Facebook, Twitter y/o Google Plus)

6 comentarios:

  1. Hola facundo tengo algunas dudas, ya instale shh ahora estoy viendo eso de conectarme desde mi celular java trate con midpshh-full pero me da argumento ilegal. Tenes alguna idea para conectar mi SAMSUNG CHAT 335 que app java usar. cualquier consejo sera bienvenido.
    Ah otra, cuando pones "ssh fulano@190.60.100.60" de donde saco los datos de ip de mi "PC" corro ubuntu 12.04lts
    El resto creo que lo entendi bastante.

    ResponderEliminar
  2. Hola Elmer! que bueno verte de nuevo por acá :)
    Con el tema de la aplicación java para móviles es justamente uno de las notas que tengo ganas de hacer hace un tiempo, justo porque yo me conectaba desde mi Sony Ericsson W200 a mi PC usando Midssh. Seguramente estarás colocando alguna opción incorrecta, hay una documentación disponible en este link que te puede ayudar (está en inglés). De todas formas (y si me esperás unos días) voy a intentar hacer una guía de como hice para que me funcione en mi teléfono.
    Por otro lado, la ip depende del tipo de conexión: por un lado, para las conexiones en LAN necesitás conocer la ip privada del servidor, y si es conexión desde afuera, ya vas a tener que conocer además la ip pública y abrir el puerto ssh en tu firewall (router). Casi al final de esta nota está el link para Abrir Puertos en el Router.
    Andá leyendo esas cositas mientras preparo la nota más específica, jeje.
    Un saludo y cualquier cosa, ya sabés ;)

    ResponderEliminar
    Respuestas
    1. Me olvidé de decirte que la IP pribada (en red LAN) la obtenés con el comando ifconfig. Este comando te muestra varios datos de tus interfaces de conexión (cableada, inalambrica, bluetooth, etc). Lo que necesitás saber es la inet addr, por ejemplo: inet addr: 192.168.1.10. Siempre hablando de la máquina "servidor".

      Para la IP pública, hay varias páginas como www.cual-es-mi-ip.net que te muestran la ip brindada por tu proveedor de internet.
      Ahora si, hasta luego ;)

      Eliminar
  3. Hola facu, te cuento que ya logre instalar y hacer mis primeros comandos desde el telefono a la pc (pasar archivos y otras tonterias) la cuestion es la siguiente, solo me puedo conectar a la pc desde el telefono cuando estan compartiendo el wifi, o sea dentro de la red local con la ip de la pc que es 192.x.x.x. pero si intento desde afuera mediante edge o desde el wifi del bar de enfrente de casa es imposible. Ah tengo fibertel o sea que el router que me dan esta totalmente bloqueado solo podes acceder desconectando el coaxil pero una vez que lo volves a conectar se resetea a los valores por defecto.
    Supongo que necesito una ip fija para hacer lo que quiero, sera una solucion algun servicio tipo no-ip? saque una cuenta pero no entendi mucho y me di de baja jejeje
    sin ningun apuro y si podes darme una mano se agradece.
    Por si no entro Felices Fiestas...

    ResponderEliminar
    Respuestas
    1. Hola Elmer!
      No conozco como se manejan los de Fibertel con sus accesos (tengo Arnet) pero supongo que debería dejar abrir los puertos o quizás no estén bloqueados. Una forma que se me ocurre en este momento para saber si tus puertos quedan al descubierto, es probarlos con alguna aplicación. Lo más fácil que podés hacer, es el siguiente comando:
      python -m SimpleHTTPServer 80 con poderes de root. Lo que hace, es levantarte un servidor web del directorio donde lo hayas ejecutado. Luego, desde "afuera" de tu red (el wifi del vecino o desde el 3g del teléfono) acceder a la IP pública de tu conexión con Fibertel. Si ves un sitio que dice "Directory listing for /" y un listado de los ficheros que están en tu PC, es porque podés abrir directamente los puertos en tu PC ya que el modem/router de Fibertel no te lo filtra.
      Si esto no funciona, habrá que analizar como está compuesta tu conexión (topografía) y buscarle la vuelta :P
      El tema está en poder abrir los puertos primero.
      Los servicios de No-IP son básicamente para no tener que estar viendo tu IP pública manualmente (y cada vez que quieras conectarte), ellos te brindan una dirección que siempre mantendrá vinculada a tu IP.
      Espero que se entienda todo este choclo, porque es un tema bastante amplio como para tocarlo en los comentarios :P
      Ya sabes, cualquier cosa podemos seguirlo por acá o quizás en un chat privado/público. ;)
      Saludos y feliz fin del mund... eeh digo, Felices Fiestas para vos también.

      Eliminar
  4. bro, con esto puedo conectarme a otro servidor que se encuentre lejos de casa?

    ResponderEliminar

Gracias por la visita! Si te gustó o tenés alguna duda, podés dejarme un comentario :)

Nota: solo los miembros de este blog pueden publicar comentarios.