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 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.