Túnel SSH para usuarios restringidos con PuTTY y sin shell

Túnel SSH para usuarios restringidos con PuTTY y sin shell

así que he estado usando túneles SSH para restringir el acceso a sitios internos o partes de sitios públicos desde hace un tiempo, y como solo los administradores tenían acceso SSH, he estado usando cuentas de usuario estándar no root/sudo. Bueno, ahora que me estoy expandiendo y tratando de involucrar a estudiantes de mis universidades locales para expandir sus proyectos, necesitarán comenzar a acceder a algunas de estas páginas internas.

El servidor proxy es una máquina CentOS 6.4, con SELinux habilitado y no ejecutará ningún otro servicio además del proxy. Eventualmente estoy buscando configurar una VPN completa, pero en este caso es simplemente para permitir el acceso a ciertas máquinas con una lista blanca de IP, en lugar de acceso completo a la red interna.

He analizado todos los métodos para configurar un proxy SOCKS con cuentas de usuario que tienen elementos como /bin/false, etc., pero

A) asumen que solo se está reenviando un único puerto o host (mientras que en este caso tengo un conjunto de instancias de VPS que cambiarán según demanda en las configuraciones de red), o

B) que se está utilizando un cliente SSH normal en lugar de algo como PuTTY (por mucho que me encantaría obligar a todos los estudiantes a usar una máquina virtual o instalar Linux directamente, esa no es una opción ya que la escuela usa PuTTY en su ingeniería hardware para uso de los estudiantes).

Esto es lo que he encontrado hasta ahora: si se utiliza un cliente ssh normal, puedo configurar el shell del usuario en /bin/false y el usuario puede especificar el comando -N al configurar el proxy SOCKS, pero desafortunadamente para los usuarios de PuTTY esto no parece funcionar (al menos no pude hacerlo funcionar).

Cuando PuTTY abre un túnel a través de las opciones de túnel predeterminadas, tiene que abrir un shell que se desconecta inmediatamente al iniciar sesión, ya que el usuario tiene un shell /bin/false. Si especifico el argumento "sin shell ni comando" en la configuración de SSH, Las opciones de proxy no parecen configurarse. Si intento configurar el proxy en las opciones SSH para comandos remotos, todavía no se ejecuta a menos que permita un shell u otros comandos en las opciones.

Preguntas relacionadas que encontré pero que no encajan del todo:

Crea túneles SOCKS con PuTTY y nologin (Este técnicamente funcionaría, pero el shell es simplemente un comando de suspensión que se ejecuta durante mucho tiempo, y me preocupa que se escape. Prefiero tener un verdadero noshell que un shell que simplemente se cuelgue por razones de seguridad )

https://askubuntu.com/questions/48129/how-to-create-a-restricted-ssh-user-for-port-forwarding (Esto no funciona porque requeriría que el usuario utilice una instalación real de ssh y programas como PuTTY no funcionarán). También los necesito para poder acceder a páginas web, aunque supongo que podría simplemente especificar PermitTunnel para la cuenta en lugar de permitir solo un puerto específico.

"noshell" para usuarios de proxy ssh (Este no funciona para PuTTY por las razones que mencioné anteriormente con respecto a la necesidad de que PuTTY tenga comandos habilitados para configurar el proxy SOCKS)

¿Alguna sugerencia? Es fácil que me esté perdiendo algo, pero no estoy seguro.

-Jim

Respuesta1

Encontré una solución (en una publicación aquí sin uso de etiquetas como nologin o noshell, sino más bien un truco muy simple para usuarios de Windows, pero lo hice funcionar para mí sin un shell).

Creé un script por lotes usando la respuesta de esta publicación que puede ejecutar una instalación predeterminada de PuTTY y configurar un túnel sin ejecutar comandos que provocarían que el shell se desconectara:

Túnel SSH muy simple para mis usuarios de Windows

"C:\Program Files (x86)\PuTTY\plink.exe" -v -N -D localhost:8080 proxy@remote_host

Dado que esto hace que los usuarios de Windows con PuTTY puedan acceder ahora al túnel, puedo seguir usando el shell de la cuenta como /bin/false

Publicado aquí para cualquiera que pueda estar en una situación similar y para resolver el hilo. Si hay otras soluciones, ¡me encantaría escucharlas!

Ahora sólo tengo que intentar que esto funcione con mi sistema de dos factores basado en SSH push que estoy implementando en todos mis sistemas, pero es algo en lo que trabajar después de que todo lo demás esté funcionando.

-Jim

Respuesta2

Acabo de ver que PuTTY tiene la siguiente opción y puede ser lo que estás buscando: Conexión->SSH->No iniciar un shell o comando

Si está habilitado, se establece la conexión, no se muestra más en la consola, pero se mantiene activa y el túnel funciona bien. Espero eso ayude.

información relacionada