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.
from="pattern-list"
El servidor sshd
puede limitar que máquinas pueden conectarse a la máquina usando wrappers TCP, pero
no a nivel de usuario. Utilizando esta opción es posible limitar las conexiones para una identidad a un conjunto especifico
de máquinas. Los hosts se separan por comas y pueden contener comodines como *
y ?
. Se pueden
rechazar hosts específicos prefijándolos con !
. Por ejemplo:
from="!enemy.my_isp.net,*.my_isp.net,home.example.com"
command="command"
environment="NAME=value"
Se usa si se quiere tener un entorno específico cuando se usa esta clave. Por ejemplo
podemos poner un $PATH
restrictivo para que no pueda ejecutar ciertos comandos,
cambiar $HOME
, etc.
Si se tiene varias personas accediendo via diferentes identidades a la misma cuenta -
usando tal vez un comando forzado - puede
ser útil establecer la variable $LOGNAME
de manera que identifique quién se conecta.
nopty
user@machine.domain.es
en el ejemplo que sigue)
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 milloAhora 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 INFOCuando 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
.