Cómo instalar y configurar un servidor SSH en GNU Linux Ubuntu 9.10 Desktop mediante OpenSSH de OpenBSD. Explicamos qué es SSH y para qué sirve. Mostramos paso a paso las tareas que se pueden realizar con SSH: transferencia de ficheros, ejecución de comandos de forma remota, control remoto, FTP, etc.

Definición de SSH (Secure Shell)

SSH (Secure SHell ó intérprete de órdenes segura) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X (en sistemas Unix y Windows) corriendo. En resumen, permite ejecutar comandos del shell de un equipo remoto desde otro como si estuviésemos sentados en el equipo remoto. Correctamente configurado el equipo remoto también permite abrir ventanas de GNU Linux en el modo gráfico de Windows.

Además de la conexión a otras máquinas, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a las máquinas y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.

SSH funciona de forma similar a como se hace con telnet. La diferencia principal es que SSH usa técnicas de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y contraseña de la conexión ni lo que se escribe durante toda la sesión; aunque es posible atacar este tipo de sistemas por medio de ataques de REPLAY y manipular así la información entre destinos.

En resumen, SSH es un protocolo utilizado para control remoto de otros equipos de la red y para transferencia cifrada de ficheros.

Definición de OpenSSH ¿qué es? ¿para qué sirve?

OpenSSH es una versión gratuita (freeware) del paquete de herramientas de comunicación segura del protocolo SSH/SecSH para redes. OpenSSH, al contrario que otros programas para el protocolo SSH (telnet, rlogin, ftp), cifra todo el tráfico (incluidas las contraseñas). Además, OpenSSH ofrece amplias posibilidades para la creación de túneles seguros, aparte de una variedad de métodos de autenticación.

OpenSSH es un proyecto desarrollado principalmente por el Proyecto OpenBSD, y su primera integración en un sistema operativo fue en OpenBSD 2.6. Estos programas se desarrollan usando código de unos 10 países distintos. Este código es de libre utilización bajo la licencia BSD.

OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas a través de una red, usando el protocolo SSH. Fue creado como una alternativa libre y abierta al programa Secure Shell, que es software propietario. El proyecto está liderado por Theo de Raadt

OpenSSH incluye las siguientes herramientas:

  • ssh: reemplaza a rlogin y telnet para permitir el acceso remoto a otra máquina.
  • scp: reemplaza a rcp para copiar ficheros.
  • sftp: reemplaza a ftp para transferir archivos entre dos equipos.
  • sshd: servidor demonio SSH sshd.
  • ssh-keygen: herramienta para inspeccionar y generar claves RSA y DSA que son usadas para la autenticación del cliente o usuario.
  • ssh-agent y ssh-add: herramientas para autenticarse de manera mas fácil, manteniendo las claves listas para no tener que volver a introducir la frase de acceso cada vez que utilice la clave.
  • ssh-keyscan: escanea una lista de clientes y recolecta sus claves públicas.

Instalación de OpenSSH en GNU Linux Ubuntu Desktop 9.10

Instalación del sistema operativo GNU Linux Ubuntu

En primer lugar necesitaremos, lógicamente, un equipo con el sistema operativo GNU Linux Ubuntu 9.10 Desktop, para instalar este sistema operativo se pueden seguir las instrucciones de alguno de los siguientes manuales:

Descarga e instalación de OpenSSH en GNU Linux Ubuntu

Para descargar e instalar OpenSSH en GNU Linux Ubuntu abrieremos una ventana de terminal desde el menú «Aplicaciones» – «Accesorios» – «Terminal»:

Descarga e instalación de OpenSSH en GNU Linux Ubuntu

Antes de continuar hay que mencionar que para instalar OpenSSH por el método que vamos a explicar es necesaria una conexión a Internet.

Escribiremos el siguiente comando GNU Linux:

sudo apt-get install openssh-server openssh-client

Ver resultado ejecución comando.

Si la instalación de OpenSSH ha sido correcta se habrá iniciado el servicio sshd, para ver su estado podemos ejecutar el siguiente comando:

sudo /etc/init.d/ssh status

Si está iniciado mostrará: sshd us running

Si está detenido podemos iniciarlo ejecutando:

sudo /etc/init.d/ssh start

Devolverá un mensaje como este: Starting OpenBSD Secure Shell server sshd [OK]

Configuración de OpenSSH

Para dar acceso a los usuarios que deseemos mediante SSH, editaremos el fichero sshd_config, ubicado en /etc/ssh/. Para ello editaremos el fichero con vi ó con nano, ejecutaremos el comando:

sudo nano /etc/ssh/sshd_config

Añadiremos la siguiente línea para permitir el acceso mediante SSH al usuario «alonso»:

AllowUsers alonso

Si queremos permitir el acceso mediante SSH al superusuario root añadiremos la siguiente línea a este fichero:

PermitRootLogin yes

Aunque esto no es muy recomendable por cuestiones de seguridad.

Para indicar con qué interfaz de red se establecerá la conexión (en el caso de que tengamos varias interfaces de red con varias IPs en nuestro servidor de Linux Ubuntu) añadiremos la línea:

ListenAddress 192.168.1.254

También podremos cambiar el puerto por defecto para SSH (es recomendable por seguridad), que es el 22, añadiendo (o modificando si existe) la línea:

Port 2222

Donde «2222» será el número del nuevo puerto que utilizará SSH.

Ver fichero ssh_config original trans instalar OpenSSH.

Para que se apliquen los cambios reiniciaremos el servicio de SSH con el comando:

sudo /etc/init.d/ssh restart

Configuración del sistema Linux para permitir accesos externos mediante SSH

En GNU Linux Ubuntu 9.10 Desktop, tras la instalación de OpenSSH, ya habrá acceso externo al equipo, por ejemplo usando PuTTY.

En el caso en que esté activo el cortafuegos (firewall) de GNU Linux (netfilter), bien porque se haya instalado y activado desde Firestarter o bien porque se haya activado desde iptables (o cualquier otro) deberemos abrir el puerto 22 (el estándar para SSH). Si disponemos de iptables ejecutaremos el siguiente comando para abrir el puerto 22 y permitir conexiones externas mediante SSH:

iptables -A INPUT -s 0.0.0.0/0 -p tcp –dport 22 -j ACCEPT

Si disponemos de Firestarter podremos añadir la regla en el modo gráfico, para ello accederemos al menú «Sistema» – «Administración» y ejecutaremos «Firestarter», en la pestaña «Normativa» pulsaremos «Permitir servicio – Puerto – Para» y en el botón «+» para añadir una nueva regla:

  • Nombre: nombre identificativo de la regla o normativa, por ejemplo «SSH».
  • Puerto: 22.
  • Cuando el origen es:
    • Marcaremos «Cualquiera» para permitir el acceso por SSH desde cualquier equipo (incluso de fuera de nuestra red LAN).
    • Clientes LAN: permitiremos el acceso a todos los equipos de nuestra red (no a los de fuera u otras redes).
    • IP, host o red: podremos indicar una IP o rango de IPs.

Introduciremos los datos anteriores y pulsaremos «Añadir»:

Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

Pulsaremos el botón de aplicar los cambios para que la regla sea aplicada.

Tareas o acciones que se pueden realizar utilizando SSH, para qué sirve OpenSSH

Ejecución de comandos por consola desde otro equipo mediante PuTTY

Mediante PuTTY, un cliente SSH gratuito, podremos acceder remotamente al equipo con OpenSSH y GNU Linux, para ello mediante un cliente que admita SSH como PuTTY, descargando PuTTY (es gratuito) desde su propia web:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Y ejecutando el fichero descargado putty.exe, en «Host Name (or IP address)» introduciremos la IP del equipo con GNU Linux y OpenSSH, en «Port» introducimos «22» y pulsamos en «Open»:

Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

Si tenemos correctamente iniciado OpenSSH en GNU Linux, PuTTY nos mostrará un aviso como el siguiente antes de continuar, pulsaremos «Sí»:

Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

El texto del mensaje:

—————————
PuTTY Security Alert
—————————
The server’s host key is not cached in the registry. You have no guarantee that the server is the computer you
think it is. The server’s rsa2 key fingerprint is: ssh-rsa 2048 f0:30:a5:1e:12:7e:d1:67:b5:1d:ec:f6:4c:8f:f0:2e
If you trust this host, hit Yes to add the key to PuTTY’s cache and carry on connecting.
If you want to carry on connecting just once, without adding the key to the cache, hit No.
If you do not trust this host, hit Cancel to abandon the connection.

Que quiere decir algo así como: la clave del servidor no ha sido almacenada en el registro aún. Por ello no hay garantía de que el servidor es el equipo que piensa que es. La clave Rsa2 del servidor es la siguiente: ssh-RSA 2048 f0: 30: A5: 1e: 12:7 E: D1: 67: B5: 1d: ec: F6: 4c: 8f: F0: 2e Si confía en este host, pulse Sí para agregar la clave de la caché de PuTTY y llevar a cabo la conexión.
Si desea realizar la conexión una sola vez, sin agregar la clave al registro, pulse No.  Si usted no confía en este host, pulse en Cancelar para abandonar la conexión.

Nos pedirá nombre de usuario (login) y contraseña (password), introduciremos el usuario y la contraseña de GNU Linux que utilizamos para iniciar sesión y si todo es correcto PuTTY nos mostrará algo así:

Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

Con el texto:

login as: proyectoa
proyectoa@192.168.1.214’s password:
Linux facturacion 2.6.31-16-generic #53-Ubuntu SMP Tue Dec 8 04:01:29 UTC 2009 i686
To access official Ubuntu documentation, please visit:
Pueden actualizarse 0 paquetes.
0 actualizaciones son de seguridad.
The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.

De esta forma ya podremos ejecutar cualquier comando desde un equipo remoto (con cualquier sistema operativo, en nuestro caso Windows XP) en el equipo GNU Linux con OpenSSH. Por ejemplo podremos instalar nuevo software ejecutando apt-get install o ver información del equipo con uname -a:

Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

Abrir ventanas del modo gráfico de Linux en Windows con Xming

En el siguiente artículo del Proyecto AjpdSoft explicamos cómo mostrar ventanas del modo gráfico de GNU Linux (X Window) en un escritorio Microsoft Windows. Os explicamos cómo utilizar el servidor X Window para Microsoft Windows Xming. Este servidor se conecta a GNU Linux mediante el protocolo SSH, por lo que utilizaremos el cliente SSH PuTTY como puente entre Xming y GNU Linux:

También podremos hacerlo con Cygwin, como explica el siguiente artículo:

Transferencia cifrada de ficheros entre Windows y Linux mediante PSCP (PuTTY Secure Copy client)

Utilizando PSCP (PuTTY Secure Copy client) podremos transferir ficheros de Windows a Linux y de Linux a Windows de forma segura (encriptados) utilizando SSH. PSCP es gratuito y está disponible en:

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Descargaremos pscp.exe y lo copiaremos (a ser posible) a alguna de las carpetas que se encuentren en la variable de entorno PATH, de esta forma podremos ejecutarlo como un comando de Windows. Lo recomendable es copiar el fichero pscp.exe a la carpeta de Windows, si no se copia a una de estas carpetas sólo podremos ejecutarlo accediendo a la carpeta donde lo tengamos. Otra posibilidad es agregar la carpeta que contenga pscp.exe a la variabla PATH del sistema.

Una vez que tengamos este fichero en la carpeta apropiada podremos abrir una consola de MS-DOS (shell de la línea de comandos), desde «Inicio» – «Ejecutar», escribiremos «cmd» y pulsaremos «Aceptar». Por ejemplo, para transferir el fichero:

/home/proyectoa/copia_seguridad_facturacion.tar

del equipo con GNU Linux a la carpeta:

C:\Copia_Seguridad

Del equipo con Windows (desde el que estamos ejecutando pscp) ejecutaremos el siguiente comando (en Windows):

pscp root@192.168.1.112:/home/proyectoa/copia_seguridad_facturacion.tar c:\Copia_Seguridad

Donde:

  • root: usuario del equipo con GNU Linux con permisos suficientes para acceder al fichero a copiar.
  • 192.168.1.112: IP del equipo con GNU Linux.
  • /home/ajpdsoft/copia_seguridad_facturacion.tar: ubicación (carpeta) y nombre de fichero remoto que se transferirá (admite comodines).
  • C:\Copia_Seguridad: carpeta destino del fichero transferido en el equipo con Windows en el que se ejecuta el comando pscp.

Para transferir ficheros de Windows a Linux:

pscp -r «E:\Mis DocumentosAjpdSoft*» root@192.168.1.112:/home/alonso/Escritorio/CS

En este caso copiamos toda la carpeta «AjpdSoft» (incluidas las subcarpetas gracias al parámetro -r) del equipo con Windows a la carpeta /home/alonso/Escritorio/CS del equipo con Linux:

Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

Para mostrar un listado de los ficheros remotos de una carpeta de GNU Linux en Windows podemos utilizar este comando:

pscp -ls root@192.168.1.112:/home/ajpdsoft/Documentos

La sintaxis del comando pscp (PuTTY Secure Copy client):

  • Uso:
    • pscp [opciones] [usuario@]host:origen destino
    • pscp [opciones] origen [origen…] [usuario@]host:destino
    • pscp [opciones] -ls [usuario@]host:ruta
  • Opciones:
    • -V: muestra la versión de PSCP.
    • -pgpfp: muestra la clave PGP.
    • -p: conserva los atributos de los archivos transferidos.
    • -q: no muestra estadísticas informativas de la transferencia.
    • -r: copia carpetas de forma recursiva (subcarpetas).
    • -v: muestra todos los mensajes posibles.
    • -load nombre_sesion: carga la configuración de una sesión guardada.
    • -P numero_puerto: realiza la conexión mediante el puerto indicado.
    • -l nombre_usuario: realiza la conexión mediante el usuario indicado.
    • -pw contraseña: inicia sesión con la contraseña indicada.
    • -1 -2: fuerza el uso de las versiones 1 ó 2 de SSH.
    • -4 -6: fuerza el uso de IPv4 ó IPv6.
    • -C: habilita la compresión.
    • -i clave: fichero de clave privada para la autenticación, de esta forma no será necesario introducir la contraseña.
    • -noagent: desactivar uso de histórico.
    • -agent: activar uso de histórico.
    • -batch: desactiva el modo interactivo, no realizará preguntas ni confirmaciones.
    • -unsafe: permite comodines en el lado del servidor.
    • -sftp: fuerza el uso del protocolo SFTP.
    • -scp: fuerza el uso del protocolo SCP.

Como hemos explicado PSCP (PuTTY Secure Copy client) puede ser usado para hacer copias de seguridad de un equipo Windows a uno Linux o viceversa.

Transferencia de ficheros mediante FTP con FileZilla Client y SSH

Utilizando FileZilla Client, un software gratuito y open source disponible en:

https://filezilla-project.org/download.php?type=client

Podremos acceder mediante FTP de forma segura utilizando SSH a nuestro equipo con GNU Linux y OpenSSH desde cualquier otro equipo Linux, Windows o Mac OS.

Descargaremos e instalaremos FileZilla Client y pulsaremos en «Archivo» – «Gestor de sitios…», pulsaremos en «Nuevo sitio» e introduciremos los siguientes datos:

  • Servidor: IP del equipo con GNU Linux Ubuntu y OpenSSH, en nuestro caso 192.168.1.112.
  • Puerto: puerto que hayamos configurado para SSH (por defecto 22), en nuestro caso 2222.
  • Tipo de servidor: seleccionaremos «SFTP – SSH File Transfer Protocol».
  • Modo de acceso: Normal.
  • Usuario: usuario con permisos suficientes del equipo GNU Linux, en nuestro caso «root».
  • Contraseña: contraseña del usuario anterior.
Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

Pulsaremos «Conectar» en la ventana anterior para acceder mediante FTP a GNU Linux desde Windows. Si todo es correcto ya tendremos acceso a todas las carpetas del equipo con GNU Linux a las que tenga permisos el usuario con el que hayamos iniciado sesión. Podremos transferir ficheros o carpetas de equipo con GNU Linux al equipo con Windows y viceversa:

Cómo instalar y configuar SSH en GNU Linux Ubuntu con OpenSSH

Anexo

  • Resultado ejecución comando sudo apt-get install openssh-server openssh-client:

ajpdsoft@facturacion:~$ sudo apt-get install openssh-server openssh-client [sudo] password for ajpdsoft:
Leyendo lista de paquetes… Hecho
Creando árbol de dependencias
Leyendo la información de estado… Hecho openssh-client ya está en su versión más reciente.
Se instalaron de forma automática los siguientes paquetes y ya no son necesarios.
linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic Utilice «apt-get autoremove» para eliminarlos.
Paquetes sugeridos:
rssh molly-guard openssh-blacklist openssh-blacklist-extra Se instalarán los siguientes paquetes NUEVOS:
openssh-server
0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 286kB de archivos.
Se utilizarán 766kB de espacio de disco adicional después de esta operación.
Des:1 http://es.archive.ubuntu.com karmic/main openssh-server
1:5.1p1-6ubuntu2 [286kB]
Descargados 286kB en 0s (357kB/s)
Preconfigurando paquetes …
Seleccionando el paquete openssh-server previamente no seleccionado.
(Leyendo la base de datos …  00%
162787 ficheros y directorios instalados actualmente.) Desempaquetando openssh-server (de
…/openssh-server_1%3a5.1p1-6ubuntu2_i386.deb) …
Procesando disparadores para ureadahead …
ureadahead will be reprofiled on next reboot Procesando disparadores para ufw …
Procesando disparadores para man-db …
Configurando openssh-server (1:5.1p1-6ubuntu2) …
Creating SSH2 RSA key; this may take some time …
Creating SSH2 DSA key; this may take some time …
* Restarting OpenBSD Secure Shell server sshd
[ OK ]

  • Fichero /etc/ssh/sshd_config original trans instalar OpenSSH:

# Package generated configuration file
# See the sshd(8) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don’t read the user’s ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don’t trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes