El fichero authorized_keys

Cada línea del fichero SSH1 authorized_keys (habitualmente en ~/.ssh/authorized_keys) contiene una clave pública. Tiene el siguiente formato: Cada entrada va en una sóla línea. Los campos se separan por comas. Las líneas en blanco y las que empiezan por # se ignoran.

Sigue un ejemplo. Primero generemos una pareja especial para esto:

$ ssh-keygen -tdsa -C 'limited command to millo' -P '' -f ~/.ssh/limited_command
$ ssh-copy-id -i ~/.ssh/limited_command.pub millo
Ahora podemos entrar a la máquina usando esa pareja con:
$ ssh -i ~/.ssh/limited_command millo
Last login: Mon Apr 20 09:05:11 2009 from 192.168.100.242
millo:~$ vi ~/.ssh/authorized_keys
millo:~$
Editamos el fichero ~/.ssh/authorized_keys y añadimos la opción comando
17 # Prueba de comando limitado
18 command="ls" ssh-dss AAAAB3NzaC1kc3...= limited command to millo

La presencia de la opción command permite dar acceso a nuestra cuenta a usuarios restringiendo el uso de los comandos que pueden utilizar.

tonga:~/.ssh$ ssh -i ~/.ssh/limited_command millo
ADVENS_OF_SHERLOCK.html  cshrc       Imágenes  LSimple-Scope     
asignas                  Desktop     LEyapp    machines.sample  
autosave                 doc         Llhp      Makefile.PL     
bidirwithnamedpipes.pl   Documentos  LPLdoc    Música         
bin                      exrc        LPLsrc    myprofile     
cat                      help        LPL-Tutu  Net-ParSCP.tar.gz 
Connection to millo closed.

Es posible obtener los argumentos escritos en la línea de comandos de la llamada al cliente consultando la variable de entorno SSH_ORIGINAL_COMMAND. Existen otras variables de entorno que están definidas cuando se ejecuta una conexión (véase la sección ENVIRONMENT en la página del manual de ssh) Para ilustrar el punto usaremos el siguiente programa como comando forzado:

$ cat -n get_ssh_env
 1  #!/usr/bin/perl -w
 2  use strict;
 3
 4  my @keys = qw{
 5         SSH_ORIGINAL_COMMAND
 6         SSH_CONNECTION
 7         SSH_AUTH_SOCK
 8         SSH_TTY
 9         DISPLAY
10         HOME
11         LOGNAME
12         MAIL PATH TZ USER
13      };
14  my ($args, $con, $sock, $tty,
15      $display, $home, $logname, $mail, $path, $tz, $user
16     ) = map { $ENV{$_} || '' } @keys;
17
18  print << "INFO";
19  args=<$args>
20  con=<$con>
21  sock=<$sock>
22  tty=<$tty>
23  display=<$display>
24  home=<$home>
25  logname=<$logname>
26  mail=<$mail>
27  path=<$path>
28  tz=<$tz>
29  user=<$user>
30  INFO
Cuando se fuerza en authorized_keys y se ejecuta la conexión se obtiene:

casiano@tonga:~$ ssh -i ~/.ssh/show_arguments millo chum cham chim
args=<chum cham chim>
con=<XXX.XXX.XXX.XXX 55286 XXX.XXX.XXX.XXX 22>
sock=<>
tty=<>
display=<localhost:11.0>
home=</home/casiano>
logname=<casiano>
mail=</var/mail/casiano>
path=</usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/soft/perl5lib/bin:/home/casiano/bin>
tz=<>
user=<casiano>

Si el administrador tiene configurada la opción PermitUserEnvironment de sshd_config a yes (el valor por defecto es no), ssh leerá el fichero ~/.ssh/environment (si existe) añadiendo al entorno líneas con el formato VARNAME=value.

Véase También



Subsecciones
Casiano Rodriguez León 2015-06-18