You are on page 1of 7

Servidor ssh - Gua Ubuntu

http://www.guia-ubuntu.org/index.php?title=Servidor_ssh&printable=yes

Servidor ssh
De Gua Ubuntu
Secure SHell, cuya traduccin sera intrprete de comandos seguro) es un protocolo de comunicacin para controlar un ordenador en remoto a travs de una CLI (Command Line Interface -Interfaz de Lnea de Comandos- tambin llamada: "shell"). Sirve para conectarnos con un ordenador ante el cual no estamos fsicamente, bien porque est en una sala de servidores refrigerada, bien porque no tiene teclado ni pantalla, por ejemplo los que estn apilados en un rack (un armario donde se guardan ordenadores como los servidores web, de correo electrnico, firewalls, etc...). Es parecido a Telnet, con la gran diferencia de que en el caso de ssh, la informacin viaja codificada con lo cual es muchsimo ms segura, en el caso de conectarnos a un ordenador que est en nuestra LAN no es tan importante, pero si nos conectamos a travs de Internet es fundamental, casi dira que imprescindible, usar un protocolo seguro como SSH.

Tabla de contenidos
1 Conexin a un servidor remoto 2 Tipo de ataque man-in-the-middle 3 Evitar que nos pida el password cada vez 4 Copia de seguridad 5 SSHFS o montar directorio remoto con SSH 6 Ejecutar comandos en un host remoto 7 Enviar u obtener archivos y carpetas con scp 8 Hacer todo esto en modo grfico 9 Instalacin del servidor SSH 10 Restringir el acceso SSH 11 Enlaces externos

Conexin a un servidor remoto


Para conectarnos con un servidor SSH remoto desde Ubuntu tenemos un cliente por defecto. En Windows no, hay que descargar un cliente (por ejemplo, el programa Putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) ). Usar el cliente es muy sencillo: basta con teclear desde una consola o terminal lo siguiente:
$ ssh host_remoto

Donde host_remoto es la IP del servidor SSH o el nombre de este. Eso har que nos conectemos con nuestro nombre de usuario. Si queremos conectar como un usuario remoto teclearemos:
$ ssh usuario_remoto@host_remoto

Luego nos pide la contrasea del usuario. La primera vez que nos conectemos a un servidor tarda un poco ms y nos pide confirmacin tecleando "yes" con todas sus letras, las

1 de 7

23/09/2011 11:13 a.m.

Servidor ssh - Gua Ubuntu

http://www.guia-ubuntu.org/index.php?title=Servidor_ssh&printable=yes

subsiguientes ya no. Sabemos que estamos conectados porque el prompt cambia y aparece en lugar del nombre de nuestro host el nombre del host remoto. Los comandos, programas y scripts que lancemos tras conectarnos se ejecutarn en la mquina a las que nos hayamos conectado, utilizando los recursos del host remoto (CPU, memoria, disco, etc.). Esta arquitectura puede utilizarse, por ejemplo, para tener un servidor ms potente y varios clientes que ejecutan aplicaciones en dicha mquina. Para ejecutar aplicaciones grficas en la mquina a la que nos conectamos tenemos dos opciones. La primera consiste en definir la variable $DISPLAY apuntando a la mquina desde la que nos conectamos.
$ export DISPLAY=host_local:0.0

Este mecanismo no se recomienda por motivos de seguridad (el protocolo X11 no se encuentra cifrado) y, adems, pueden encontrarse problemas porque cortafuegos intermedios bloqueen ese trfico (puertos 600x TCP). Una solucin mejor es utilizar un tnel SSH para encapsular el protocolo X11, lo que transmite la informacin de manera segura y, adems, no suele dar problemas con los cortafuegos intermedios. Para poder ejecutar aplicaciones grficas en el host remoto de forma segura, necesitamos dos cosas. La primera, que en la configuracin del servidor SSH del host remoto (/etc/ssh /sshd_config) se encuentre activada la siguiente opcin:
X11Forwarding yes

Para aprovechar esta caracterstica, hemos de conectarnos usando el parmetro -X, lo que exportar la configuracin de la variable $DISPLAY con lo que podremos ejecutar aplicaciones grficas de forma remota:
$ ssh -X usuario_remoto@host_remoto

Ahora si ejecutas el programa xclock vers que la ventana sale en tu escritorio:


$ xclock

Tipo de ataque man-in-the-middle


Imaginemos que la IP de nuestro servidor es 192.168.2.3. Nos conectamos via SSH desde otro equipo, la primera vez tarda un poco ms porque tiene que escribir en el archivo /home/[nuestro_usuario]/.ssh/known_host una entrada para esa IP. Las subsiguientes veces que nos conectemos compara la clave gpg de la IP con la que tiene guardada en el archivo known_host, en caso de variar supone que el ordenador es distinto -por ejemplo, porque el ordenador servidor ssh ha sido formateado o porque se ha apagado y sustituido por otro al que se le ha asignado la misma IP-. Ese es el error man-in-the-middle

2 de 7

23/09/2011 11:13 a.m.

Servidor ssh - Gua Ubuntu

http://www.guia-ubuntu.org/index.php?title=Servidor_ssh&printable=yes

y significa: "el ordenador cuya IP es esa, no es el mismo que yo conoca. Puede ser que alguien se est haciendo pasar por l" y no nos deja volvernos a conectar salvo que borremos la entrada de esa IP en el archivo known_host. Tienes ms informacin al respecto en el artculo de la Wikipedia Ataque Man-in-the-middle.

Evitar que nos pida el password cada vez


Siempre que conectemos a un ordenador remoto con SSH nos va a pedir el password de acceso para asegurarse de que tenemos permisos. Hay una forma de evitar que nos pida el password siempre haciendo que el ordenador remoto confe en nosotros. Para ello hemos de generar un par de claves DSA que se usarn en la relacin de confianza:
$ ssh-keygen -t rsa

Generating public/private dsa key pair. Enter file in which to save the key (/home/usuario/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/usuario/.ssh/id_dsa. Your public key has been saved in /home/usuario/.ssh/id_dsa.pub. The key fingerprint is: 81:a1:d3:96:fa:a2:73:4d:3a:76:c1:fd:3f:6a:6f:1e usuario@localhost

Una vez generada la copiamos al usuario del ordenador remoto con el que queremos mantener la relacin de confianza usando el comando ssh-copy-id. Este es un ejemplo del uso con la salida del programa:
$ ssh-copy-id usuario_remoto@192.168.0.1 Now try logging into the machine, with "ssh 'usuario_remoto@192.168.0.1'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.

Si te da el error No identities found prueba a indicarle la ruta de la clave pblica con -i

Para que funcione correctamente el comando ssh-copy-id el agente tiene que estar activo para la sesin. Si no lo has puesto que lo arranque al inicio como se explica un poco ms abajo, tendrs que arrancarlo desde la consola ejecutando ssh-add. Ahora solo hay que arrancar el agente SSH para que recuerde nuestra contrasea. Nos pregunta la contrasea y ahora ya podemos acceder al ordenador remoto sin tener que escribir el password cada vez.
$ ssh-add

El agente slo dura mientras est activa nuestra consola. O sea que si la cerramos y la

3 de 7

23/09/2011 11:13 a.m.

Servidor ssh - Gua Ubuntu

http://www.guia-ubuntu.org/index.php?title=Servidor_ssh&printable=yes

volvemos a abrir ya no est activo el agente y nos volver a pedir el password cada vez. Para evitar esto lo que podemos hacer es aadir el agente a la sesin para que se ejecute cada vez que se inicie GNOME. Al iniciar saldr un dilogo que nos preguntar por la contrasea.

Copia de seguridad
Si vas a migrar la configuracin de tu usuario a otra mquina tienes que conservar el directorio $HOME/.ssh. Ah es donde se guarda los ficheros de la clave pblica y privada generadas en el punto anterior:
$ tar czf ssh.tgz $HOME/.ssh

SSHFS o montar directorio remoto con SSH


Algunas veces necesitamos trabajar durante bastante tiempo con un sistema remoto, copiando y editando ficheros. Existe la posibilidad de usar Nautilus que se puede conectar remotamente al servidor usando el protocolo 'sftp://, pero suele ser lento y muchas veces es ms prctico usar la lnea de comandos. La solucin sera montar un recurso remoto al estilo de NFS y encima sin tener que se root. Pues si, se puede :) Fuse es un mdulo del kenel que permite montar distintos sistemas de ficheros con un usuario normal sin privilegios. SSHFS es un programa creado por el autor de fuse que permite montar un directorio remoto usando SSH. Accederemos localmente como si estuviera en nuestra propia mquina. Hay que instalar el programa sshfs. El usuario que puede montar el sistema de ficheros tiene que pertenecer al grupo fuse.
$ sudo usermod -G fuse -a usuario_local

Tenemos que salir y volver a entrar en el sistema para que se haga efectivo el cambio de grupo. Antes de empezar a usar fuse tienes que cargar el mdulo en memoria:
$ sudo modprobe fuse

Ahora vamos a hacer una prueba:


$ mkdir ~/directorio_remoto $ sshfs usuario_remoto@servidor_remoto:/tmp ~/directorio_remoto

Este comando monta el directorio /tmp del servidor remoto en el directorio local ~/directorio_remoto. Ahora podemos trabajar en el directorio montado como si de un directorio local se tratase. Para desmontar el directorio:
$ fusermount -u ~/directorio_remoto

Si vamos a trabajar a diario con este directorio remoto, quizs es buena idea aadirlo al fichero /etc/fstab. De esta forma se montar automticamente al iniciar nuestro ordenador o manualmente (si elegimos la opcin noauto) sin necesidad de especificar la localizacin

4 de 7

23/09/2011 11:13 a.m.

Servidor ssh - Gua Ubuntu

http://www.guia-ubuntu.org/index.php?title=Servidor_ssh&printable=yes

remota cada vez. Este es un ejemplo de configuracin:


$ sshfs#usuario_remoto@remote_server:/tmp /home/usuario_local/directorio_remoto fuse defaults,auto 0 0

Si vamos a usar fuse y sshfs regularmente, tendras que editar el fichero /etc/modules y aadir el mdulo fuse. De otra forma tendrs que cargar el mdulo manualmente cada vez que lo quieras usar:
$ sudo sh -c "echo fuse >> /etc/modules"

Ejecutar comandos en un host remoto


Ahora que ya sabemos como entrar en un ordenador remoto sin el password, por qu no ejecutar comandos remotamente? Se abre un nuevo mundo de posibilidades muy tiles como tareas que se pueden ejecutar de forma automtica.
$ ssh usuario_remoto@host_remoto "find /tmp -name *.txt"

Este comando buscar los ficheros de texto del directorio temporal que hay en el ordenador remoto. Si bien es un ejemplo poc til, en la vida de un administrador de sistema hay muchos buenos ejemplos. Y vamos a dar una nueva vuelta de rosca: si estamos administrando sistemas Unix/Linux es muy posible que necesitemos ejecutar el mismo programa en varios servidores a la vez. Este sencillo script e suna gran ayuda en esos casos:
#!/usr/bin/perl @hosts=( "usuario1\@maquina1.guay.es", "usuario2\@maquina2.guay.es" ); die "Uso: runonall \'command\'\n" unless $ARGV[0]; foreach(@hosts){ print "$_ -> $ARGV[0]:\n"; print `ssh $_ $ARGV[0]`; }

Enviar u obtener archivos y carpetas con scp


En una consola o terminal tecleamos:
$ scp -r usuario@maquina:/home/carpeta .

luego ponemos la password del usuario y nos copiar la carpeta "/home/carpeta" remota en el directorio actual "." naturalmente siempre que usuario tenga permisos sobre la carpeta y su cuenta est entre las de los que pueden hacer ssh. La opcin "-r" significa recursivo, es decir, copia la carpeta y todo su contenido, incluidas las subcarpetas y el contenido de stas. Si no lo ponemos la orden para copiar todos los archivos de una carpeta sera:

5 de 7

23/09/2011 11:13 a.m.

Servidor ssh - Gua Ubuntu

http://www.guia-ubuntu.org/index.php?title=Servidor_ssh&printable=yes

$ scp usuario@maquina:/home/carpeta/* .

Si lo que queremos es enviar una carpeta con su contenido, utilizaremos la orden:


$ scp /home/carpeta/* usuario@maquina:/carpeta/

Hacer todo esto en modo grfico


Si lo que que queremos es conectarnos a un ordenador por ssh en modo grfico tambin lo podremos hacer. Es ms simple pero tambin tienes menos posibilidades, o para hacer ciertas cosas tardas ms incluso que hacindolo por consola pero para las operaciones fciles como administrar, editar un fichero tambin es posible hacerlo de esta manera.
Entraremos en Lugares -> Conectarse al servidor...

Elegiremos en el combo de arriba en lugar de FTP pblico, SSH y pondremos la IP o el nombre (en caso de anteriormente ya hayamos editado el fichero hosts) y as despues de teclear la contrasea y aceptar estaremos ya dentro del mismo.

Instalacin del servidor SSH


El cliente ya viene instalado por defecto, de modo que para instalar el servidor de SSH en nuestro sistema lo nico que necesitas es instalar el paquete openssh-server. Puedes leer Aadir aplicaciones si no sabes como hacerlo.

Restringir el acceso SSH


Para evitar que todos los usarios de la mquina estn accesibles por SSH tendremos que editar como root el fichero /etc/ssh/sshd_conf (o /etc/ssh/sshd_config), y aadir la lnea AllowUsers y a continuacin los usuarios que deseamos que se puedan conectar remotamente via SSH:
$ sudo gedit /etc/ssh/sshd_conf

o
$ sudo gedit /etc/ssh/sshd_config

Y aadimos la lnea:
AllowUsers usuario1 usuario2 usuario3

Para que los cambios surtan efectos habr que reiniciar el servidor:
$ sudo /etc/init.d/ssh restart

6 de 7

23/09/2011 11:13 a.m.

Servidor ssh - Gua Ubuntu

http://www.guia-ubuntu.org/index.php?title=Servidor_ssh&printable=yes

* Restarting OpenBSD Secure Shell server...

Enlaces externos
Guia de configuracin de cliente y servidor (http://wiki.lapipaplena.org/index.php /Como_montar_accesos_SFTP) Artculo de SSH en la Wikipedia (en espaol) How-To: Import/Export GPG key pair (http://www.debuntu.org/how-to-import-exportgpg-key-pair) (en ingls) Obtenido de "http://www.guia-ubuntu.org/index.php?title=Servidor_ssh"

Categora: Administracin del sistema


Esta pgina fue modificada por ltima vez el 21:04 11 oct 2010. Esta pgina ha sido visitada 243.719 veces. El contenido est disponible bajo los trminos de la Attribution-NonComm ercial-ShareAlike 2.5 Poltica de proteccin de datos Acerca de Gua Ubuntu Aviso legal

7 de 7

23/09/2011 11:13 a.m.

You might also like