41 votos

acceso sólo por túnel ssh

¿Es posible configurar ssh (en linux) para que permita el acceso sólo por túnel? Es decir, ¿el usuario puede configurar túneles pero no puede obtener un Shell/archivos de acceso?

56voto

coobird Puntos 70356

Sí, sólo tiene que utilizar /bin/false como Shell e instruir al usuario para que inicie el proceso de túnel SSH sin ejecutar ningún comando remoto (es decir, el -N para OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host

0 votos

Si el usuario no utiliza -N , tienen acceso a Shell. Este realmente no resuelve el problema y es peligroso.

15 votos

@mlissner: No, si tienes /bin/false como Shell, no tendrá acceso a Shell, ya que cada sesión de inicio de sesión terminará inmediatamente.

0 votos

Pero, ¿impedirá esto que funcione el scp?

10voto

cjc Puntos 17092

En el archivo .ssh/authorized_keys del usuario, pon algo como lo siguiente

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

Así que, básicamente, los controles estarían delante de la clave pública ssh del usuario separados por un espacio. En el ejemplo, las conexiones que usen la clave pública específica podrán hacer reenvío de puertos SSH sólo al servidor MySQL de 192.168.1.10 y al servidor web de 10.0.0.16, y no se les asignará un Shell (no-pty). Estás preguntando específicamente por la opción "no-pty", pero las otras también pueden ser útiles si el usuario sólo debe hacer un túnel a servidores específicos.

Mira la página man de sshd para ver más opciones para el archivo authorized_keys .

Tenga en cuenta que la experiencia del usuario puede parecer un poco extraña: cuando se conecta por ssh, parecerá que la sesión se cuelga (ya que no está recibiendo un pty). No pasa nada. Si el usuario ha especificado el reenvío de puertos con, por ejemplo, "-L3306:192.168.1.10:3306", el reenvío de puertos seguirá vigente.

En cualquier caso, pruébalo.

7 votos

Este es un consejo peligroso ; no-pty no impide el acceso a Shell, simplemente no da a Shell una pty. No muestra el prompt (es decir, "parece que se cuelga"), pero se pueden seguir dando comandos sin problemas. Necesitas el command="..." opción en .ssh/authorized_keys si quieres restringir el acceso a Shell desde allí.

2 votos

@AleksiTorhamo está en lo cierto, pero esto es un comienzo; también debes establecer Shell a /usr/sbin/nologin o /bin/false en /etc/passwd para restringir completamente el Shell. He editado la entrada anterior para reflejar eso, junto con el consejo de Aleksi.

3voto

Tinkerbell Puntos 31

Dar al usuario un Shell que sólo le permita cerrar la sesión como /bin/press_to_exit.sh

#!/bin/bash
read -n 1 -p "Press any key to exit" key

De esta manera puede permanecer conectado todo el tiempo que quiera, con los túneles activos, pero sin ejecutar ningún comando. Ctrl-c cierra la conexión.

5 votos

Creo que, al menos en teoría, el usuario podrá darle a CTRL+C en el momento adecuado (entre las líneas 1 y 2) y acabar con un bash completo Shell.

2voto

IaCoder Puntos 2449

Asignar un Shell que no permita al usuario iniciar la sesión.

Por ejemplo

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

evitaría que recibieran un prompt Shell, y les daría un tiempo de espera de 60 segundos - si no hay una conexión activa durante 60 segundos entonces saldrá y por lo tanto los desconectará completamente (aumentar el número de acuerdo a los requerimientos).

Tampoco pueden ejecutar un comando remoto, porque ese Shell no se lo permite.

5 votos

La mayoría de las instalaciones de linux ya vienen con algo para eso. /sbin/nologin, o /bin/false o similar.

1 votos

¿Qué haría Ctrl-C en el ejemplo anterior?

0 votos

Arjan: Como el script se utiliza como , Ctrl-C tendría el mismo efecto que " logout " en una normal.

0voto

DanFromGermany Puntos 140

Mi solución es proporcionar al usuario que sólo puede ser el túnel, sin un Shell interactivo , para establecer que Shell en /etc/passwd a /usr/bin/tunnel_shell .

Sólo hay que crear el archivo ejecutable /usr/bin/tunnel_shell con un bucle infinito .

Además, utilice el AllowGroups y Match Group opción.

Explicado completamente aquí: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-Shell-please/

2 votos

El usuario podría salir del ejecutable de alguna manera y escapar de un Shell. ¿Está seguro de que su ejecutable no permitirá hacer esto?

2 votos

@dr01 Para ser sincero, no estoy seguro de que esto sea 100% seguro. Supongo que cuando sales del ejecutable, la sesión SSH se cierra también. Investigaré más sobre esto y puede que vuelva a comentar aquí.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: