En Ubuntu 11.10, descubrí que podía bloquear los comandos ssh, enviados con y sin -T, y bloquear la copia de scp, mientras permitía que se realizara el reenvío de puertos.
Específicamente, tengo un servidor redis en "somehost" vinculado a localhost: 6379 que deseo compartir de forma segura a través de túneles ssh a otros hosts que tienen un archivo de claves y que se enviarán mediante ssh con:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Esto hará que el servidor redis, puerto "localhost" 6379 en "somehost" aparezca localmente en el host que ejecuta el comando ssh, reasignado al puerto "localhost" 16379.
En el "somehost" remoto, esto es lo que utilicé para las claves_autorizadas:
cat .ssh/authorized_keys (portions redacted)
no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost
El no-pty dispara la mayoría de los intentos de ssh que quieren abrir una terminal.
El permitopen explica qué puertos se pueden reenviar, en este caso el puerto 6379, el puerto del servidor de redis que quería reenviar.
El comando = "/ bin / echo no-enviar-comandos" repite "no-enviar-comandos" si alguien o algo logra enviar comandos al host a través de ssh -T o de otra manera.
Desde un Ubuntu reciente man sshd
, Authorized_keys / command se describe de la siguiente manera:
command = "command" Especifica que el comando se ejecuta siempre que esta clave se usa para autenticación. Se ignora el comando proporcionado por el usuario (si lo hay).
Los intentos de usar la copia segura de archivos scp también fallarán con un eco de "do-not-send-commands". He descubierto que sftp también falla con esta configuración.
Creo que la sugerencia de shell restringido, hecha en algunas respuestas anteriores, también es una buena idea. Además, estaría de acuerdo en que todo lo que se detalla aquí podría determinarse leyendo "man sshd" y buscando en él "claves_autorizadas".
no-pty
no permite abrir una vista interactiva, no hace nada para evitar la ejecución del comando, por lo que el usuario puede editar elauthorized_keys
archivo si tiene acceso con algo comossh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.