Instalación de servidor Gitlab detrás de un proxy inverso, ERROR fatal: Could not read from remote repository.

Información del escenario de implementación.
Servidor Proxy reverso
Operating System: Ubuntu 24.04.4 LTS
Nginx version: nginx/1.24.0 (Ubuntu)

Servidor Gitlab
Operating System: Debian GNU/Linux 12 (bookworm)
GitLab information version: 18.8.4-ee

$ git clone git@gitlab.mirepositorio.com:sis/sistem.git
Cloning into 'sistem'...
git@gitlab.mirepositorio.com's password:
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

El problema para el caso esta en la configuración del proxy inverso que no permite gestionar los repositorios por ssh.

Verificamos si nuestro servidor de proxy reverso con NGinx cuenta con soporte para stream.

admin@miserver:~$ nginx -V 2>&1 | grep --color stream
configure arguments: --with-cc-opt='-g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/build/nginx-gpkOWo/nginx-1.24.0=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fdebug-prefix-map=/build/nginx-gpkOWo/nginx-1.24.0=/usr/src/nginx-1.24.0-2ubuntu7.6 -fPIC -Wdate-time -D_FORTIFY_SOURCE=3' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=stderr --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_secure_link_module --with-http_sub_module --with-mail_ssl_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-http_geoip_module=dynamic --with-http_image_filter_module=dynamic --with-http_perl_module=dynamic --with-http_xslt_module=dynamic --with-mail=dynamic --with-stream=dynamic --with-stream_geoip_module=dynamic

Tome en cuenta que el resultado de la consulta anterior es para la versión nginx/1.24.0 (Ubuntu), si su instalación no cuenta con stream, actualice su NGinx a la última versión completa.

#Respaldo su servidor antes de ejecutar esta línea.
sudo apt install nginx-full -y

Si su servicio de NGinx cuenta con el módulo stream habilitado queda configurar en el archivo nginx.conf agregando las siguiente líneas al final del archivo.

stream {
    upstream gitlab_ssh {
        server 10.0.0.18:22; # IP backend GitLab
    }

    server {
        listen 22;
        proxy_pass gitlab_ssh;
        proxy_timeout 1h;
        proxy_connect_timeout 30s;
    }
}

Verifique que el archivo de configuración es correcto.

admin@miserver:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Un último paso es cambiar el puerto 22 del servicio de ssh del servidor de proxy inverso, dado que las configuraciones realizadas en NGinx harán uso de este puerto. Realice los cambios en el archivo sshd_config.

admin@miserver:~$ nano /etc/ssh/sshd_config

#Comente y cambie el puerto
#Port 22
Port 1929

#Reinicie el servicio ssh
admin@miserver:~$ sudo systemctl restart ssh

Una vez cambie el puerto 22, reinicie NGinx

admin@miserver:~$ sudo systemctl restart nginx.service

Verifique la conexión desde su equipo cliente.

$ ssh -T git@gitlab.mirepositorio.com
Welcome to GitLab, @adminedu!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *