domingo, 26 de agosto de 2012

¿Cómo administro remotamente Ubuntu con OpenSSH?

En un comunicado radiofónico, el recientemente electo Juan Perón anuncia a través de la Red de Radioemisoras que componían la Cadena Nacional de Radiodifusión un mensaje que aclaraba cómo conectarnos remotamente a otro equipo con Ubuntu y dirigirlo mediante OpenSSH.

¡Trabajadores!

Una acción de gobierno como la que hemos de emprender no puede hacerse sin afectar sectores interesados. Ello a veces eleva resquemores de las clases dominantes, pero a ellos sabemos bien como tratarlos, cómo dominarlos, y cómo someterlos. Al fin y al cabo, nadie que pueda hacer una tortilla sin romper varios huevos.

Un Conductor - por mas que quiera - no puede estar en todos lados a la vez, y en ciertos casos ha de delegar su tarea. El puesto de Presidente de la Nación es indelegable, pero el Poder Ejecutivo cuenta con herramientas para poder moverse en varios ámbitos específicos, con delegados que mantengan amplio control en nombre del presidente. Estos son sus Ministros.

En el caso de la informática podemos ejercer una conducción así delegada. El pueblo conoce que Ubuntu, por ser un sistema parecido a Unix, viene dotado desde su creación con amplias capacidades para conectarnos en red: es un sistema operativo multiusuario, que si bien suele utilizarse localmente, contempla su gestión y administración de manera remota. La idea es acceder descentralizadamente a otros equipos en red, y controlarlos remotamente desde la  consola misma.

Para ello, podremos utilizar SSH (Secure Shell). Este es un protocolo que nos permite acceder de manera remota, similar al antiguo protocolo Telnet, pero con ventajas de seguridad (es encriptado por clave pública). Si bien podremos usar Secure Shell en Ubuntu, particularmente prefiero usar OpenSSH, que una versión similar pero peronista, pues es completamente libre bajo licencia LGPL

Ubuntu ya trae instalado de fábrica el cliente para conectarnos, llamado openssh-client. Sin embargo, para poder crear un servidor, debemos instalar el paquete específico para ello. Con este fin hemos de abrir una consola con Ctrl+Alt+T. Para el equipo que sea servidor debemos instalar el paquete openssh-server.

sudo apt-get install openssh-server

Para ejecutar el servidor deberemos llamar a la IP de nuestro propio equipo (localhost). Normalmente, esto lo haremos con:

ssh localhost

o bien explicitando el nombre de usuario y la IP del equipo que nos encontramos. Por ejemplo:

ssh usuario_local@127.0.0.1

La primera vez que nos conectemos, el servicio ssh intentará establecer la autenticidad del servidor o del cliente, y no podrá hacerlo pues - naturalmente - nunca nos hemos conectado antes. Devolverá algo como:

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
TaAre you sure you want to continue connecting (yes/no)? 

Nos informará la clave RSA y nos preguntará si estamos seguros de continuar conectándonos. Indicaremos que si escribiendo en la consola "yes" ("si").

Luego nos solicitará la contraseña del usuario. Conforme la ingresemos, podremos entrar, aunque lo haremos a nuestro propio equipo y no es muy interesante (es igual a darnos de alta con la consola), sabremos que está funcionando.

Los comandos que podremos utilizar en un servidor remoto son los mismos que en la terminal de nuestro equipo. Podremos Conducir al movimiento entrando a directorios, ejecutar programas de consola, configurar, editar textos, copiar archivos, y todos las acciones que el usuario tiene permitido en el equipo remoto. Si el usuario al que nos logueamos cumple funciones de administrador (root), naturalmente podremos hacer de todo. Si es un "invitado", solamente podremos ver determinadas carpetas, y seremos incapaces de modificar nada.

Debemos tener en cuenta que los comandos desde el equipo cliente se ejecutarán en el servidor. Esto puede tener ciertas ventajas: por ejemplo, podemos armar con relativa facilidad una red donde un equipo central servidor se encargue de ejecutar los programas complejos en modo texto (por ejemplo, compilar un kernel), y varias equipos menos potentes (thin clients, netbooks, tabletas) funcionen como terminales del mismo.

Una vez que hayamos terminado de cumplir nuestra función, podremos desconectarnos del servidor OpenSSH utilizando el comando:

exit

Si deseamos conectarnos a otro equipo remoto de la red, debemos usar la siguiente sintaxis:

ssh usuario_remoto@ip_o_nombredeequipo_remoto

Correr aplicaciones remotamente y salir de sesión remota sin detenerlas
Supongamos que queremos conectarnos remotamente a un equipo y ejecutar una aplicación a través de la terminal de comandos, pero dicha aplicación llevará demasiado tiempo y queremos desconectarnos y que la tarea se siga realizando en el equipo remoto. En tal caso, podremos hacerlo con el comando nohup (que significaría algo así como "sin colgar").

Por ejemplo, si quisiéramos descargar un fichero grande empleando el comando wget desde un equipo remoto, deberíamos permanecer conectados (logueados) a él antes de terminar la descarga para luego desconectarnos, con el inconveniente y el consumo que ello implica. Pero si emplamos el comando nohup, podríamos indicar el comando:

nohup wget URL_del_archivo_grande &

Retransmisión de Ventana X a través de OpenSSH:
Ahora bien, OpenSSH tiene una serie de aplicaciones interesantes. Una de ella es la de poder "retransmitir" la salida del servidor de video X11 del equipo servidor al equipo cliente. Esto nos permite hacer lo mismo que antes, pero en lugar de ejecutar programas en modo gráfico que son "reenviados" al cliente. Podríamos hacer lo mismo que antes, pero ahora en modo gráfico. Por ejemplo, podremos hacer uso de un navegador de internet, Libreoffice, etc, y que la ventana se vea en el cliente, a través de un enlace codificado. También podríamos usar usar una netbook o notebook para trabajar como cliente local conectada por red a un servidor remoto dotado de GPU, el cual lleve a cabo un complejo renderizado 3D en Blender.

Para ello usaremos:

ssh -X -C usuario_remoto@ip_o_nombredeequipo_remoto

Con el modificador -X reenvíaremos los resultados de la gráfica del servidor al que nos hemos conectado, al cliente, y con -C comprimiremos la información enviada a través de la red, para que ésta ocupe menos ancho de banda. Ahora cualquier aplicación gráfica que ejecutemos, se verá en el escritorio del equipo cliente. Para probarlo, podrán usar cualquier aplicación gráfica simple, como el reloj xclock.

Naturalmente, si usamos Ubuntu podremos conectarnos al servidor desde el Escritorio del cliente si lo preferimos (y si tenemos acceso al escritorio gráfico). Para ello vamos a Lugares / Conectar con el Servidor.
En esta ventana debemos indicar el Tipo de Servicio en "SSH", y en el campo Servidor, usar la misma sintaxis anterior: usuario@ip_o_nombredelservidor. Luego presionamos el botón Conectar, e ingresar la contraseña del usuario remoto cuando se le solicite.

Nota:  Si al intentar conectarnos, recibimos un mensaje del tipo "Your CPU is lacking expected security protection..." ("Su CPU aparenta carecer de protecciones de seguridad esperadas"), suele tratarse de una determinada configuración a nivel de BIOS del equipo, la cual reduce la protección de la CPU, en particular su bit NX. Esta configuración suele dejarse así por retrocompatibilidad con sistemas operativos oligárquicos, como el ya desfasado Window$ XP. Si no usamos este tipo de sistemas operativos de la degeneración consumista, podremos darle mas seguridad a nuestra PC desde la BIOS, mediante la opción "Execute Disable/XD Bit". 

Para ello entramos a la BIOS del equipo (normalmente presionando la tecla Supr durante el arranque del mismo). Esto normalmente dispara el menú de configuración de la memoria BIOS. No tiene nada que ver con Ubuntu, simplemente es la configuración interna del equipo antes de que se inicie el sistema operativo. 
Debemos desplazarnos al menú Advanced Seup/CPU Options. Establecemos la opción XD Bit, Execute Disable Bit o Intel XD Bit en ENABLED. Luego volvemos al menú principal y escogemos Save Changes and EXIT Setup y se guardará la configuración y reinciará el equipo.

7 comentarios:

  1. General,

    Deseo conectarme por ssh a una computadora remota que se encuentra detras de un router y un switch. El problema es que aun conociendo la direccion IP de la computadora remota (obtenida de whatsmyip.org), no puedo conectarme mediante el comando

    ssh usuario@direcionIP

    Siendo la conectividad de las masas un claro pilar de la justicia social, cuento con usted, General, para resolver este problema, y de esta manera servir mejor a mi patria y a la masa justicialista.

    Atentamente

    Diego

    ResponderEliminar
  2. General,

    Deseo conectarme por ssh a una computadora remota que se encuentra detras de un router y un switch. El problema es que aun conociendo la direccion IP de la computadora remota (obtenida de whatsmyip.org), no puedo conectarme mediante el comando

    ssh usuario@direcionIP

    Siendo la conectividad de las masas un claro pilar de la justicia social, cuento con usted, General, para resolver este problema, y de esta manera servir mejor a mi patria y a la masa justicialista.

    Atentamente

    Diego

    ResponderEliminar
  3. General,

    Con el fin de servir a la patria y a la justicia social, necesito conectarme remotamente mediante ssh a una computadora remota que no posee IP fija y se encuentra detras de un router y un switch. La red remota no posee servidor y las computadoras se conectan directamente al modem-router a traves de un switch.
    Poseo medios para conocer la direccion IP remota (mediante whatsmyip.org) pero aun asi no me ha sido posible aun conectarme.

    Conoce algun truco peronista para estos casos?

    Atentamente

    Diego

    ResponderEliminar
    Respuestas
    1. Estimado Diego:

      En este caso se complica un poco y se requieren más conocimientos de configuración y enrutado, que superan la óptica del artículo.

      Sin embargo, podremos darte algunas indicaciones:

      * Primero deberías sacarte una cuenta en DynDNS, que es un servicio gratuito de DNS dynámico. En DynDNS tienes que escoger un nombre de servidor (por ejemplo "homelinux.com". Toma nota de tu usuario y contraseña en DynDNS, pues serán necesarios para completar el proceso de enrutado.

      * Deberías configurar tu router-modem para que reenvíe el puerto 22 (el usado de manera estanadar por el servicio SSH) a la computadora Servidora. Para ello debes revisar la documentación del mismo.

      Deberías también instalarte en tu servidor Ubuntu el DNS "ddclient" (el cual es libre y funciona en cualquier Linux). Con la aplicación debconf suministrada con ddclient podrás hacer que el DNS dinámico se que redireccione el servicio SSH a través de una red externa. Simplemente selecciona "DynDNS" como proveedor de servicio DNS y hazle saber tu usuario y contraseña de DynDNS. Con esto cada vez que te conectes externamente e ingreses la contraseña, DynDNS actualizará tu IP dinámica para que coincida con el servicio y pueda funcionar de manera confiable.

      Para configurar debconf, en la consola debes usar

      sudo gedit /etc/ddclient.conf

      Aquí te indicamos algunas pautas del archivo de configuración a fin de enlazarse a DynDNS, para más info has de usar la wiki de ddclient.

      # Archivo de configuración peronista para
      # Debconf
      # /etc/ddclient.conf
      daemon=3600
      cache=/tmp/ddclient.cache
      pid=/var/run/ddclient.pid
      use=web, web=checkip.dyndns.com/, web-skip=’IP Address’
      protocol=dyndns2
      server=members.dyndns.org
      login=nombredeusuario
      password=’contraseñadedns’
      dominio.homelinux.org
      wildcard=YES
      syslog=yes


      Atte.

      Juan Perón

      Eliminar
  4. Te tengo una consulta, yo tengo que realizar eso pero con varios servidores detras de un router.

    como se a que router me redirecciona el router ya que la ip externa es la misma.

    Tengo todos con afraiddns que es como dyndns.

    ResponderEliminar
    Respuestas
    1. Estimado ginobvhc:

      Ya hemos asistido a eso en la pregunta anterior al compañero Diego (Ceci), explicando el procedimiento DynDNS

      Atte.

      Juan Perón

      Eliminar
  5. Tengo una computadora con Ubuntu en casa. Hace unos meses empecé a usar SSH. Si alguien quiere, le puedo hacer una cuenta en mi computadora para practicar teclear comandos de Ubuntu desde sus casas, incluso desde una computadora con el sistema de Bill Gates.
    Se puede acceder a una computadora casera sin el puerto 22 abierto y detrás del router. Primero hay que hacer un túnel inverso desde tu computadora casera a un servidor (por ejemplo artigue.org.es), después acceder desde cualquier computadora del mundo a ese servidor mediante SSH, y desde ahí usar el túnel inverso y acceder por SSH a tu computadora casera. Sin tocar el router, sin abrir el puerto 22. Puedo explicarles cómo se hace.
    Quiero poblar un poco mi servidor. Nunca viene nadie. Vengan a chatear o a saludarme :)

    Gabriel Artigue

    ResponderEliminar