Este artículo explica cómo compilar e instalar la última versión de OpenSSH en un servidor Red Hat. Ya sea para corregir errores de seguridad o incorporar nuevas funcionalidades.
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. Sus desarrolladores aseguran que OpenSSH es más seguro que el original, lo cual es debido a la conocida reputación de los desarrolladores de OpenBSD por crear código limpio y perfectamente auditado, lo que contribuye a que sea más seguro. Su seguridad también es atribuible al hecho de que su código fuente se distribuya libremente con una licencia BSD.
La suite OpenSSH incluye las siguientes herramientas:
- ssh: reemplaza a rlogin y telnet para permitir el acceso remoto a otro sistema.
- scp: reemplaza a rcp para copiar archivos de un sistema remoto a otro.
- sftp: implementa el servicio ftp sobre un túnel SSH.
- sshd: implementa el servicio SSH
- ssh-keygen: una herramienta para inspeccionar y generar claves RSA y DSA que son utilizadas para la autenticación del cliente o usuario.
- ssh-agent y ssh-add: herramientas para simplificar la autenticación, manteniendo las claves listas para no tener que volver a introducir la frase de acceso cada vez que se utiliza la clave.
- ssh-keyscan: herramienta para escanear una lista de clientes y recolectar sus claves públicas.
El servidor en cuestión es un Red Hat Enterprise Linux 5.5:
[root@pepeserver37 /]# cat /etc/issue Red Hat Enterprise Linux Server release 5.5 (Tikanga) Kernel \r on an \m
La versión de OpenSSH instalada actualmente, proveniente de los repositorios, es la 4.3
:
[root@pepeserver37 ~]# rpm -qa openssh openssh-4.3p2-41.el5
Antes de instalar la última versión, es necesario desinstalar el paquete proveniente de los repositorios. Para ello ejecutar:
rpm -e openssh-clients rpm -e openssh-server rpm -e openssh-askpas rpm -e openssh
Utilizaremos el directorio base /usr/local/src/
:
cd /usr/local/src/
Debemos descargar la última versión disposnible de OpenSSH desde http://www.openssh.org/portable.html, en el momento de escribir este artículo es la 6.2
. Seleccionar un mirror (el que consideremos más cercano, en mi caso Buenos Aires) y descargar con wget
:
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-6.2p1.tar.gz
Extraer el contenido del paquete:
tar -xzvf openssh-6.2p1.tar.gz
Cambiar al directorio de fuentes, compilar e instalar:
cd openssh-6.2p1 ./configure make make install
Luego de instalar es necesario copiar el script de inicio del servicio al directorio /etc/init.d
para poder iniciar y detener el servicio utilizando el comando service
:
cp /usr/local/src/openssh-6.2p1/opensshd.init /etc/init.d/opensshd chmod +x /etc/init.d/opensshd
Editar el script de inicio (/etc/init.d/opensshd
) y agregar las líneas de comentario para chkconfig
:
# chkconfig: 2345 80 20 # description: OpenSSH weon!
Esta información indica que el script debe ser iniciado en los niveles 2, 3, 4, y 5, que su prioridad de start debe ser 80 (números grandes indican menor prioridad), y que su prioridad de stop debe ser 20. chkconfig
también soporta los encabezados de comentario en formato LSB, por ejemplo:
### BEGIN INIT INFO # Provides: foo # Required-Start: bar # Defalt-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: Foo init script ### END INIT INFO
Luego de haber agregado la información de inicio para chkconfig
, agregar el servicio "opensshd":
chkconfig --add opensshd
De esta forma, chkconfig
actualiza la jerarquía de directorios /etc/rc[0-6].d, que se utiliza para mantener los links simbólicos a los scripts de inicio de servicios de acuerdo a cada runlevel.
Antes de iniciar el servicio es necesario copiar las viejas claves del servidor ssh para que los clientes no reciban la advertencia de autenticidad del servidor:
The authenticity of host 'pepeserver37 (192.168.1.37)' can't be established. RSA key fingerprint is c7:35:90:32:8d:b9:87:62:0a:7d:eb:26:3f:08:6b:08. Are you sure you want to continue connecting (yes/no)?
El comando rmp -e
no elimina los archivos de claves ssh_host_dsa_key
, ssh_host_dsa_key.pub
, ssh_host_key
, ssh_host_key.pub
, ssh_host_rsa_key
, ssh_host_rsa_key.pub
. Copiarlos al directorio /usr/local/etc/
:
cp /etc/ssh/ssh_host_* /usr/local/etc/
Finalmente es posible iniciar el servicio:
service opensshd start
Para verificar la conexión SSH, acceder desde un host remoto mediante:
[pepe@pepebox ~]$ ssh root@pepeserver37.pepe.org root@pepeserver37.pepe.org's password: Last login: Thu Feb 31 17:07:46 1954 from pepebox.pepe.org [root@pepeserver37 ~]#
Exito!