miércoles, 24 de septiembre de 2008

Cómo Instalar y configurar servidor ssh en Ubuntu


SSH (acrónimo del inglés Secure SHell, cuya traducción sería intérprete de comandos seguro) es un protocolo de comunicación para controlar un ordenador en remoto a través de una CLI (Command Line Interface -Interfaz de Línea de Comandos- también llamada: "shell"). Sirve para conectarnos con un ordenador ante el cual no estamos físicamente, bien porque está en una sala de servidores refrigerada, bien porque no tiene teclado ni pantalla, por ejemplo los que están apilados en un rack (un armario donde se guardan ordenadores como los servidores web, de correo electrónico, firewalls, etc...).

Es parecido a Telnet, con la gran diferencia de que en el caso de ssh, la información viaja codificada con lo cual es muchísimo más segura, en el caso de conectarnos a un ordenador que esté en nuestra LAN no es tan importante, pero si nos conectamos a través de Internet es fundamental, casi diría que imprescindible, usar un protocolo seguro como SSH.

Otro de los usos que se le pueden dar y que trataré los próximos post, es el copiado de archivos mediante este protocolo y otros programas como scp, incluso existen algunos paquetes que nos permiten montar una unidad de modo similar a las carpetas compartidas de windows o NFS en un equipo.

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.

apt-get install openssh-server


Los archivos de configuración del servidor ssh son:

/etc/ssh/ssh_config: Archivo de configuración del cliente ssh

/etc/ssh/sshd_config: Archivo de configuración del servidor ssh



Restringir el acceso SSH

Para evitar que todos los usarios de la máquina estén accesibles por SSH tendremos que editar como root el fichero /etc/ssh/sshd_conf, y añadir la línea AllowUsers y a continuación los usuarios que deseamos que se puedan conectar remotamente via SSH:

$ sudo gedit /etc/ssh/sshd_config

Y añadimos la línea:

AllowUsers usuario1 usuario2 usuario3

También podemos restringir el acceso dependiendo de la ip de los equipos que intenten acceder a nuestro servidor. Para ello tendremos que editar los ficheros /etc/hosts.allow y /etc/hosts.deny.

En /etc/hosts.deny añadimos la siguiente línea:

#denegamos el acceso a todos los equipos que no demos de alta en hosts.allow

sshd: ALL

en /etc/hosts.allow ponemos, por ejemplo:
#permitir el acceso a la red 192.168.1.0/24 y al equipo 10.10.1.1
sshd: 192.168.1.0/24 10.10.1.1


Para que los cambios surtan efectos habrá que reiniciar el servidor:

$ sudo /etc/init.d/ssh restart

* Restarting OpenBSD Secure Shell server...


Arranque y parada manual del servidor ssh

El servidor ssh, al igual que todos los servicios en Debian, dispone de un script de arranque y parada en la carpeta /etc/init.d.

// Iniciar o Reiniciar el servidor ssh
root@cnice-desktop:# /etc/init.d/ssh restart
// Parar el servidor ssh
root@cnice-desktop:# /etc/init.d/ssh stop

Arranque automático del servidor ssh al iniciar el sistema.

# update-rc.d ssh defaults
Si queréis montar alguna de las particiones de este servidor en un equipo cliente empleando el servidor ssh recién montado, consultad este enlace.
Para probar que realmente funciona, lo único que tenemos que hacer es teclear en el equipo en el que hemos instalado el servidor:

ssh nombre_de_usuario@localhost

Conexión al servidor mediante ssh

Para conectar desde un PC cliente al servidor mediante ssh, debemos ejecutar el comando ssh seguido del nombre ó dirección IP del servidor. La conexión se realizará con el mismo nombre de usuario que estemos utilizando en el PC cliente. Ejemplo, supongamos que jessica, desde el PC llamado aula5pc3, quiere conectarse al servidor cuya IP es 192.168.1.239:

// Conexión por ssh
jessica@aula5pc3:~$ ssh 192.168.1.239
The authenticity of host '192.168.1.239 (192.168.1.239)' can't be established.
RSA key fingerprint is 51:70:3f:9c:ac:49:52:74:88:f5:45:a6:ae:f0:9c:8a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.239' (RSA) to the list of known hosts.
Password: // Introducir contraseña de jessica
jessica@cnice-desktop:~$ // Ya estámos en el servidor

La primera vez que se conecte alguien desde dicho PC cliente, se instalará el certificado de autentificación del servidor, lo cual es normal si se trata de la primera vez. A la pregunta 'Are you sure you want to continue connecting (yes/no)?' debemos responder 'yes' ya que de lo contrario la comunicación se cortará. Si ya nos hemos conectado anteriormente otras veces y vuelve a realizar ésta pregunta, significa que alguien se está haciendo pasar por el servidor (nuestro servidor ha sido hackeado) o que se ha reconfigurado el servidor (cambio de nombre, IP, etc...)

Si deseamos conectarnos al servidor utilizando un nombre de usuario diferente, debemos incluir el nombre de usuario antes del nombre o IP del servidor y separado por una arroba '@'. Ejemplo, supongamos que jessica, desde el PC llamado aula5pc3, quiere conectarse como miguel al servidor cuya IP es 192.168.1.239:

// Conexión por ssh como otro usuario
jessica@cliente:~$ ssh miguel@192.168.1.239
Password: // Introducir contraseña de miguel en el servidor
miguel@servidor:~$ // Ya estámos en el servidor como miguel

Desde PCs con Windows es posible conectarse por ssh a servidores Linux mediante el programa Putty. Se trata de un cliente ssh para Windows que permite acceder en modo texto al sistema Linux desde sistemas Windows.

Servicios adicionales

El paquete ssh no solamente nos proporciona conexión remota sino que proporciona otros servicios como:

Ejecución remota de aplicaciones gráficas

Mediante ssh existe la posibilidad de ejecutar aplicaciones gráficas en el servidor y manejarlas y visualizarlas en el cliente. El servidor ssh deberá tener activada la redirección del protocolo X, es decir, deberá tener el siguiente parámetro en el archivo de configuración /etc/ssh/ssh_config:

// Habilitar la redirección X en /etc/ssh/sshd_config
X11Forwarding yes

Ejemplo: supongamos que en nuestro terminal tenemos Damn Small Linux (que no dispone del gimp) y deseamos conectarnos a otro PC que sí que tiene instalado el editor gráfico gimp, los pasos que haremos serán:

// Ejecutar aplicaciones gráficas
jessica@cliente:~$ ssh -X cnice@192.168.1.239 // -X para redirigir Xwindows.
cnice@cnice-desktop:~$ gimp // Ejecutamos el gimp

El resultado será que desde nuestro Linux sin gimp estamos manejando el gimp que se está ejecutando en el PC remoto

Desde PCs con Windows es posible conectarse por ssh a servidores Linux de forma gráfica mediante Cygwin. Se trata de un conjunto de programas libres que simulan un 'Unix para Windows' con servidor gráfico X y cliente ssh para Windows entre otras cosas, que permite acceder en modo gráfico al sistema Linux desde sistemas Windows. Otros servidores X gratuitos para Windows son Xming y Mocha.

Servidor de ftp seguro

El paquete ssh también incorpora un servidor ftp seguro y un cliente ftp seguro. Para activar el servidor ftp seguro tan solo hay que tener arrancado el servidor ssh.

El cliente ftp seguro es el comando sftp que funciona igual que el comando ftp. También podemos utilizarlo desde un navegador como Konqueror escribiendo sftp://nombre-del-usuario@nombre-del-servidor por ejemplo en la url: sftp://miguel@www.ieslapaloma.com


Copia remota de archivos

También se dispone de el comando scp que permite copiar archivos desde y hacia el servidor remoto desde el cliente. Ejemplo, si deseamos copiar el archivo /etc/hosts del servidor cuya IP es 192.168.1.239 e identificándonos como jessica en la carpeta actual de nuestro PC, ejecutaremos el siguiente comando:
// Copiar un archivo del servidor a nuestro PC
root@cliente:~# scp jessica@192.168.1.239:/etc/hosts .
Password: // Introducimos la contraseña de jessica en el servidor
hosts 100% 443 0.4KB/s 00:00 // Archivo copiado
root@cliente:~#

// Copiar un archivo de nuestro PC al servidor

// La carpeta de destino debe existir en el servidor
root@cliente:~# scp miarchivo.txt jessica@192.168.1.239:/home/jessica/pruebas/
Password: // Introducimos la contraseña de jessica en el servidor
miarchivo.txt 100% 443 1.6KB/s 00:00 // Archivo copiado
root@cliente:~#

// Copiar una carpeta y subcarpetas de nuestro PC al servidor
root@cliente:~# scp -r /datos/*.* jessica@192.168.1.239:/pruebas/datos/
Password: // Introducimos la contraseña de jessica en el servidor
datos/*.* 100% 443 50.6KB/s 00:03 // Archivos copiados
root@cliente:~#

Desde PCs con Windows es posible utilizar el programa WinSCP que permite copiar archivos desde y hacia el servidor. Se trata de un cliente que utiliza el protocolo ssh para acceder al sistema de archivos del servidor Linux desde sistemas Windows.

Identificación por certificado

Para evitar tener que introducir continuamente la contraseña cuando deseamos conectar con un servidor remoto por ssh, existe la posibilidad de autentificarse por certificado, para ello debemos:

  1. Crear un certificado de usuario en el PC cliente
  2. Copiar el certificado en el PC servidor

Para que el servidor ssh acepte la autentificación por medio de certificado, deberá tener activada la opción PubkeyAuthentication yes, es decir, deberá tener el siguiente parámetro en el archivo de configuración /etc/ssh/sshd_config:

// Permitir autentificación por certificado
PubkeyAuthentication yes

Crear un certificado en el PC cliente

Para crear un certificado que permita autentificar al usuario, debemos ejecutar el comando ssh-keygen. Dicho comando creará dentro de nuestra carpeta home, en una carpeta llamada '.ssh', dos archivos: uno llamado id_rsa que será la clave privada de nuestro certificado y otro llamado id_rsa.pub que será la clave pública de nuestro certificado. Éste último archivo será el que hay que copiar en el servidor remoto.

// Creación de un certificado
miguel@cliente:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/miguel/.ssh/id_rsa):
// Archivo del certificado. Podemos dejar el que viene por defecto
Created directory '/home/miguel/.ssh'.
Enter passphrase (empty for no passphrase): // Opcional
Enter same passphrase again:
Your identification has been saved in /home/miguel/.ssh/id_rsa.
Your public key has been saved in /home/miguel/.ssh/id_rsa.pub.
The key fingerprint is:
c8:a4:fe:0c:19:78:8e:7d:05:5b:13:df:37:17:e8:ea miguel@dsl.ieslapaloma.com
miguel@dsl:~$

Copiar el certificado en el PC servidor

Para poder identificarse en el servidor como miguel desde el cliente, debemos copiar el archivo id_rsa.pub que hemos creado en el cliente, en la carpeta home de miguel en el servidor dentro de una carperta llamada '.ssh' en un archivo llamado authorized_keys. Para copiar dicho archivo del cliente al servidor, podemos hacerlo con scp. Supongamos que el cliente se llama 'cliente' y el servidor se llama 'servidor':


// Copia del certificado y prueba de la conexión
// Nota: el símbolo ~ en Linux es la carpeta home del usuario
miguel@cliente:~$ scp ~/.ssh/id_rsa.pub miguel@servidor:~/.ssh/authorized_keys
Password: // Va a ser la última vez que introduzcamos la contraseña
id_rsa.pub 100% 242 0.2KB/s 00:00 // Copiado
miguel@cliente:~$ ssh miguel@servidor // Probamos la conexión
miguel@servidor:~$ // Ya estamos en el servidor sin necesidad de contraseña

Fuente:
http://www.guia-ubuntu.org/index.php?title=Servidor_ssh#Instalaci.C3.B3n_del_servidor_SSH
Página del isftic : Curso Redes de Área Local. Aplicaciones y servicios en Linux. del isftic http://www.isftic.mepsyd.es/formacion/materiales/85/cd/REDES_LINUX/indice.htm

15 comentarios:

Anónimo dijo...

Muy bueno muy completa la informacion que necesitaba exactamente gracias sigue adelante

kris dijo...

La informacion esta muy buena, lastima que tu no hayas hecho nada, sino copiar y pegar de otras paginas.

Te recomiendo que tenga encuenta las otras pagina o blogs sin necesidad de copiarlas.

tecnoadmin dijo...

Verás, una de las ventajas de ser profesor es que puedes copiar sin que te suspendan.

La desventaja es que tienes que preparar apuntes y clases para tus alumnos, que de algún lado han de salir. Por esta razón suelo asistir a cursos que lógicamente siempre cito y que tienen como yo en su página la licencia creative commons (la misma que tienes tú en tus blogs) y que permiten reproducir el contenido siempre que se cite al autor.

En cualquier caso si te hubieras molestado en leer o entender las fuentes verías que hay ligeras modificaciones - y por cierto, además he pedido permiso a los autores del curso ya que es algo que yo he cursado antes de publicar.

En cualquier caso soy bastante ceporro, nada comparable a tu inteligencia y antes de montar algo necesito documentarme con el fin de explicarlo correctamente a mis alumnos. Tú en cambio supongo que has llegado a esta página buscando la dirección de un estanco, y que en todo caso escribirás un artículo interesantísimo sobre el tema, por supuesto de tu propia cosecha sin necesitar citar a nadie y que lamentablemente no me quedará más remedio que perderme.

Ya puestos a recomendar, te recomiendo le pases un corrector ortográfico a tus textos o bien busques las tildes que se han escapado de tu teclado.

un saludo

Miguel dijo...

Buenas tengo una duda, he instalado un servidor ssh en Windows, más concretamente freeSSHd, y ahora lo que pretendo es conectarme a él mediante un pc Linux, ubuntu, y poder montarme una carpeta que se encuetra en C:\Data en una carpeta de ubuntu.

Alguna idea...

Gracias...

LuisJ dijo...

Pues sea copia o no, es la informacion que necesitaba. Esta toda y facilmente comprensible.

(Y no puedo poner acentos, que tengo un teclado y SO en ingles, no me rinas a mi tb! ;-)

Un saludo y gracias!
Luis Jose

Juan dijo...

;)

Anónimo dijo...

Tecnoadmin, con un año de retraso pero .... no puedo evitar felicitarte por la respuesta a Kris.
Considero que si él, en algún momento, hubiera intentado hacer un 10% del artículo, se habría dado cuenta de lo lento y trabajoso que es darle un sentido pràctico y didáctico a toda una serie de informaciones fragmentadas. Felicidades y no permitas que ... indivíduos ... te retengan.

Juan dijo...

muchas gracias

Anónimo dijo...

Blogs como este son los que crean una mejor internet, no lo dejes.

Gracias por la info -me ha servido- y un saludo.

Juan dijo...

muchas gracias

Angelikita dijo...

Hola! me sumo a las felicitaciones ... llevo meses siguiendo el blog y no tengo más que halagos.
Supongo que es muy fácil criticar, no sé quien es esa persona, pero montar un blog, mantenerlo y que sea útil más allá de tu propia aula es algo que no creo que consiga nunca. Y ya no es una cuestión de copiar o no copiar. Lo q habías dicho, seguro que el punto filipino este Kris llegó buscando un estanco. Mucho ánimo y adelante!!

XXX Linugux XXX linugux@gmail.com dijo...

Esta re bueno todo esto mas lo de compartir las aplicaciones,lo estuve intentando desde hace una semana con ltsp pero no habia tenido exito hasta hoy que vi esta informacion !!!! jajaja
sorprendente y mas que se pueda tambien en windows , bueno yo no uno windows pero , ya ahora si me veo en una playa administrando mi sercidor ... jajajaja es bueno compartir !!! y el que no valora esto !! pues que se ponga a estudiar sin copiar !!! sss pinche menso !!! jajajaj
bye
linugux@gmail.com

rojo clonico dijo...

Joder Tecnoadmin, la verdad no se como puede haber tanta gente perroflautizada. La educación no es más que un remake ordenado del arte de "copiar" y "recopilar". Asi que no me vengas con licencias ni tonterías. Ya nos dirás en que momento te sacaste tu oposición haciendo un "copy & paste".

Anónimo dijo...

OIEEEE PRIMO QUE PEASO POST

Anónimo dijo...

Cómo Instalar y Configurar un Servidor SSH
https://www.youtube.com/watch?v=iY536vDtNdQ