Permitir al usuario configurar un túnel SSH, pero nada más


Me gustaría permitir que un usuario configure un túnel SSH a una máquina en particular en un puerto en particular (digamos, 5000), pero quiero restringir este usuario tanto como sea posible. (La autenticación será con par de claves público/privado).

Sé que necesito editar el ~/relevante.archivo ssh / authorized_keys, pero no estoy seguro exactamente qué contenido poner allí (aparte de la clave pública).

 91
Author: Lorin Hochstein, 2008-08-11

10 answers

En Ubuntu 11.10, encontré que podía bloquear comandos ssh, enviados con y sin-T, y bloquear la copia scp, mientras permitía el reenvío de puertos.

Específicamente tengo un redis-server en "somehost" enlazado 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 se ssh en con:

$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost

Esto hará que el redis-server," localhost "puerto 6379 en "somehost" aparezca localmente en el host que ejecuta el comando ssh, reasignado al puerto" localhost " 16379.

En el remoto "somehost" Esto es lo que usé para authorized_keys:

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 activa la mayoría de los intentos ssh que quieren abrir una terminal.

El permitopen explica qué puertos se pueden reenviar, en este caso el puerto 6379 el puerto redis-server que quería reenviar.

The command = "/ bin / echo do-not-send-commands "echoes back" do-not-send-commands " si alguien o algo logra enviar comandos al host a través de ssh - T o no.

De un Ubuntu man sshd reciente, authorized_keys / command se describe de la siguiente manera:

Command = " command" Especifica que el comando se ejecuta cada vez que se utiliza esta clave para autenticación. El comando proporcionado por el usuario (si lo hay) es ignorar.

Los intentos de usar scp secure file copying también fallarán con un eco de "do-not-send-commands" He encontrado 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, estoy de acuerdo en que todo lo detallado aquí podría determinarse a partir de leer " man sshd "y buscar en él" authorized_keys "

 85
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-26 04:08:01

Probablemente quieras establecer el shell del usuario en el shell restringido. Desactive la variable PATH en ~ / del usuario.bashrc o ~/.bash_profile, y no podrán ejecutar ningún comando. Más adelante, si decide permitir que los usuarios ejecuten un conjunto limitado de comandos, como less o tail, por ejemplo, puede copiar los comandos permitidos a un directorio separado(como /home/restricted-commands) y actualizar la ruta para que apunte a ese directorio.

 18
Author: Jason Day,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-12 00:16:38

Además de la opción authorized_keys como no-X11-forwarding, en realidad hay exactamente una que está pidiendo: permitopen="host:port". Al usar esta opción, el usuario solo puede configurar un túnel al host y puerto especificados.

Para los detalles del formato de archivo AUTHORIZED_KEYS consulte man sshd.

 17
Author: marbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-17 08:52:05

Mi solución es proporcionar al usuario que solo puede estar haciendo un túnel, sin un shell interactivo, para establecer ese shell en /etc/passwd a /usr/bin/tunnel_shell.

Simplemente crea el archivo ejecutable /usr/bin/tunnel_shell con un bucle infinito .

#!/bin/bash
trap '' 2 20 24
clear
echo -e "\r\n\033[32mSSH tunnel started, shell disabled by the system administrator\r\n"
while [ true ] ; do
sleep 1000
done
exit 0

Completamente explicado aquí: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please /

 8
Author: DanFromGermany,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-30 16:47:50

Puedo configurar el archivo authorized_keys con la clave pública para registrar en. De lo que no estoy seguro es de la información adicional que necesito restringe lo que esa cuenta puede hacer. Por ejemplo, sé que puedo poner comandos como:

no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding

Usted querría una línea en su archivo authorized_keys que se vea así.

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 
 3
Author: Zoredache,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-04 22:47:17

Si desea permitir el acceso solo para un comando específico like como svn also también puede especificar ese comando en el archivo de claves autorizadas:

command="svnserve -t",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding [KEY TYPE] [KEY] [KEY COMMENT]

De http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks

 3
Author: joseph_morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-06 01:05:31

Aquí tienes un buen post que me pareció útil: http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only /

La idea es: (con el nuevo nombre de usuario restringido como "sshtunnel")

useradd sshtunnel -m -d /home/sshtunnel -s /bin/rbash
passwd sshtunnel

Tenga en cuenta que usamos rbash (restricted-bash) para restringir lo que el usuario puede hacer: el usuario no puede cd (cambiar directorio) y no puede establecer ninguna variable de entorno.

Luego editamos la variable env PATH del usuario en /home/sshtunnel/.profile a nada - un truco que hará que bash no encontrar ningún comando para ejecutar:

PATH=""

Finalmente no permitimos al usuario editar ningún archivo configurando los siguientes permisos:

chmod 555 /home/sshtunnel/
cd /home/sshtunnel/
chmod 444 .bash_logout .bashrc .profile
 3
Author: juanmf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-13 21:13:35

Ver este post sobre autenticar claves públicas.

Las dos cosas principales que debes recordar son:

  1. asegúrese de que chmod 700 ~/.ssh
  2. Anexar el bloque de clave pública a authorized-keys
 0
Author: Michael Pryor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-28 18:50:38

Hice un programa en C que se ve así:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
void sig_handler(int signo)
{
    if (signo == SIGHUP)
        exit(0);
}

int main()
{
    signal(SIGINT, &sig_handler);
    signal(SIGTSTP, &sig_handler);

    printf("OK\n");
    while(1)
        sleep(1);
    exit(0);
}

Establecí el shell del usuario restringido a este programa.

No creo que el usuario restringido pueda ejecutar nada, incluso si lo hace ssh server command, porque los comandos se ejecutan usando el shell, y este shell no ejecuta nada.

 -1
Author: fangfufu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 04:21:15

Generará una clave en la máquina del usuario a través del cliente ssh que esté utilizando. pUTTY, por ejemplo, tiene una utilidad para hacer esto exactamente. Generará tanto una clave privada como pública.

El contenido del archivo de clave pública generado se colocará en el archivo authorized_keys.

A continuación, debe asegurarse de que el cliente ssh esté configurado para usar la clave privada que generó la clave pública. Es bastante sencillo, pero ligeramente diferente dependiendo de la cliente siendo utilizado.

 -2
Author: palehorse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-11 18:04:01