Este procedimiento detalla cómo compilar e instalar la última versión de OpenSSH en un entorno Ubuntu sin conexión a Internet. Esto es particularmente útil para servidores aislados que requieren parches de seguridad para vulnerabilidades de versiones antiguas de SSH y no pueden descargar paquetes directamente.
Se requerirán las siguientes bibliotecas como dependencias: zlib y OpenSSL. Los archivos fuente de estas bibliotecas, junto con OpenSSH, deben obtenerse previamente y estar disponibles en el sistema.
Preparación del Entorno
Todas las operaciones se realizarán en el directorio /home/ssh. Primero, es crucial respaldar la configuración actual de SSH y su script de inicio.
mkdir -p /home/ssh && cd /home/ssh
mv /etc/ssh /home/ssh/ssh_old
mv /etc/init.d/ssh /home/ssh/ssh.old
Instalación de Dependencias
1. Compilación de zlib
Descomprima y compile zlib. La opción --shared se utiliza para generar bibliotecas compartidas.
tar -zxf zlib.tar.gz && cd zlib-1.3.1/
./configure --shared
make && make install
2. Compilación de OpenSSL
Antes de compilar OpenSSL, asegúrese de tener instaladas las dependencias de desarrollo de PAM (si no están presentes, se necesitarían los paquetes .deb correspondientes, por ejemplo, libpam0g-dev y libpam0g). OpenSSL se compilará con soporte para zlib y se instalará en un directorio personalizado.
cd /home/ssh
tar -zxf openssl-3.2.2.tar.gz && cd openssl-3.2.2/
./config --shared zlib --prefix=/usr/local/openssl
make -j 32 && make install
Respaldo y Enlace de OpenSSL
Se recomienda respaldar la instalación existente de OpenSSL y luego crear enlaces simbólicos para utilizar la nueva versión instalada en /usr/local/openssl.
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl
Configuración de Bibliotecas Compartidas de OpenSSL
Se crea un enlace simbólico para la biblioteca libssl.so y se actualiza la caché de bibliotecas del sistema.
mkdir -p /usr/local/openssl/lib64
ln -s /usr/local/lib64/libssl.so /usr/local/openssl/lib64/libssl.so
echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl.conf
ldconfig -v
Verifique la versión de OpenSSL para confirmar la instalación:
openssl version
Si encuentra errores relacionados con libcrypto.so.3 o libssl.so.3, puede que necesite crear enlaces simbólicos adicionales después de buscar sus ubicaciones:
# Ejemplo de búsqueda y enlace (ajuste las rutas según sea necesario)
# find / -name libcrypto.so.3
# find / -name libssl.so.3
ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3
ln -s /usr/local/lib64/libssl.so.3 /usr/lib/libssl.so.3
Compilación e Instalación de OpenSSH
Primero, desinstale cualquier paquete de OpenSSH existente.
apt-get remove openssh-server openssh-client -y
Compile e instale la versión más reciente de OpenSSH, especificando la ubicación de la instalación, el directorio de configuración y las dependencias compiladas.
cd /home/ssh
tar -zxf openssh-9.7p1.tar.gz && cd openssh-9.7p1/
# Verifique la ruta de openssl si es necesario
# whereis openssl
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr/local/openssl
make -j32 && make install
Verifique la versión instalada de OpenSSH:
ssh -V
Restauración de Configuración y Puesta en Marcha
Restaure el archivo de configuración original de SSH y el script de inicio.
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.default1
mv /etc/init.d/ssh /etc/init.d/ssh.default1
cp /home/ssh/ssh_old/sshd_config /etc/ssh/
cp /home/ssh/ssh.old /etc/init.d/ssh
Configure el servicio SSH para que se inicie automáticamente al arrancar el sistema y reinícielo.
systemctl unmask ssh
systemctl start ssh
systemctl status ssh
systemctl daemon-reload
systemctl enable ssh
Ajuste para Clientes SFTP (Xftp)
Si utiliza herramientas como Xshell y experimenta problemas con Xftp después de actualizar OpenSSH, modifique la configuración del subsistema SFTP.
Edite el archivo /etc/ssh/sshd_conf:
vim /etc/ssh/sshd_conf
Comente la línea:
# Subsystem sftp /usr/lib/sftp-server
Y añada la siguiente línea:
Subsystem sftp internal-sftp
Guarde los cambios y reinicie el servicio SSH:
systemctl restart sshd.service