SSH (Secure Shell) SSH es un programa de login remoto que nos permite realizar una transmisión segura de cualquier tipo de datos: passwords, sesión de login, ficheros, etc, sustituyendo a las habituales formas de acceso (OTP, Telnet y FTP). pública/privada, que identificarán al servidor frente al usuario). % ssh remoto pwd permite ejecutar un comando en el servidor. Su seguridad reside en el uso de criptografía fuerte, de manera que toda la comunicación es encriptada y autentificada de forma transparente para el usuario. Existe una descripción completa de todas las opciones en la página de manual (“man ssh”). Actualmente existen dos versiones de ssh, con distintos tipos de licencia, la versión 1.2.27 (SSH1) y la 2.0.13 (SSH2). Aunque parecidos, la documentación de este tríptico se refiere a la SSH2. Esta segunda alternativa utiliza un esquema de clave pública/privada: Forma de uso de SSH. Existen dos formas de autentificarse cuando accedemos por ssh a una máquina: 2.- Autentificación por clave pública. a) La clave pública, que tiene que residir en cada uno de los servidores a los que queremos conectarnos b) La clave privada, que conoceremos sólo nosotros y que está cifrada con una frase de paso, debe residir en la máquina desde la que iniciemos la conexión. 2.2 Propagación de la clave pública Para propagar la clave pública a todos los servidores a los que queramos conectarnos, tendremos que copiar dicha clave en los mismos. La forma más sencilla es utilizar el comando sftp del propio paquete SSH: % sftp remoto Introducimos nuestro password Unix, ya que aún no hemos terminado de configurar el acceso por clave pública. Creamos el directorio .ssh2 en la máquina remota y almacenamos en él nuestra clave pública. sftp>mkdir .ssh2 sftp>put .ssh2/id_dsa_1024_a.pub sftp>bye 2.3 Selección del par de claves 1.- Autentificación por password. SSH permite autentificar a un usuario utilizando su password Unix ordinario, con la ventaja de que el password no viaja nunca en claro por la red, evitando el peligro de que sea capturado por posibles "sniffers". La forma de uso de ssh es muy similar a la de rsh, por ejemplo: % ssh remoto -l nombre_de_usuario Accepting host remoto key without checking. usuario's password: permite iniciar una sesión como usuario “nombre_de_usuario” en el nodo remoto, tras registrarse de forma automática la clave de servidor del mismo (cada servidor de SSH también tiene asociado un par de claves 2.1 Generación de las claves. Para generar el par de claves pública/privada se utiliza el programa ssh-keygen: % ssh-keygen Durante este proceso, el programa nos pide una frase de paso (“Passphrase”) que protegerá nuestra clave privada. Esta frase puede ser todo lo larga que queramos y contener espacios en blanco. Con ésto, el programa genera dos ficheros en el directorio $HOME/.ssh2: id_dsa_1024_a: contiene nuestra clave privada encriptada con nuestra frase de paso. id_dsa_1024_a.pub:contiene nuestra clave pública Como un usuario puede manejar distintos pares de claves públicas/privadas, debemos tener en la máquina cliente un fichero identification que liste las claves privadas que queremos utilizar cuando nos conectemos a un servidor de SSH: % echo "IdKey id_dsa_1024_a" $HOME/.ssh2/identification >> Igualmente, en cada una de las máquinas remotas tendremos que crear un fichero authorization que liste las claves públicas que se aceptarán para iniciar una conexión. % ssh remoto 'echo "Key id_dsa_1024_a.pub" >> $HOME/.ssh2/authorization' SSH (Secure Shell) Una vez configurado el acceso por clave pública, en lugar del password tendremos que introducir la frase de paso que protege nuestra clave privada: % ssh remoto Passphrase for key /.ssh2/id_dsa_1024_a" ....... usuario's password: arranquemos solicitarán esta clave al agente, sin que sea necesaria nuestra intervención. Cuando la conexión se realiza desde una máquina Unix, se puede utilizar un agente de autentificación y de esta forma no tener que teclear la frase de paso en cada conexión. El agente es un proceso que actúa como depositario de nuestras claves privadas, y se las suministrará al cliente SSH cada vez que éste las necesita. Esto es muy útil cuando nos conectamos a varias máquinas remotas durante una sesión de trabajo. Para utilizar el agente, primero tenemos que arrancarlo: • Si usas sh o derivados (bash, ksh, etc.): % eval `ssh-agent` • si usas csh o derivados (tcsh): % eval `ssh-agent -c` y posteriormente, añadir nuestra clave al depósito de claves (originalmente está vacío) con el comando ssh-add: % ssh-add De esta forma, el agente dispondrá en memoria de nuestra clave privada ya descifrada. Todos los clientes de SSH que Enero 2000 Para tener siempre el agente disponible, podemos arrancarlo en el momento de iniciar nuestra sesión local y pararlo al cerrarla. "/home/usuario El agente de autentificación (ssh-agent) REV. Por ejemplo, arrancamos el agente desde el .login, añadiendo al final estas dos líneas: SSH (Secure Shell) eval `ssh-agent -c` ssh-add y paramos el agente antes de salir, añadiendo esta línea al fichero .logout: kill $SSH2_AGENT_PID Transferencia de ficheros. Existen dos alternativas para la transferencia de ficheros: a) El comando scp (equivalente al rcp), para las transferencias simples, por ejemplo: % scp remoto:/path_del_fichero /path_local % scp fichero_1 fichero_2 remoto:dir % scp fichero otro_usuario@remoto: b)El comando sftp (equivalente al ftp), para transferencias más complejas, por ejemplo: % sftp remoto Existe una documentación muy detallada sobre SSH (instalación, configuración, uso, integración con plataformas windows, información sobre las dudas más frecuentes, etc) en la siguiente URL: http://www.cica.es/seguridad/SSH/ssh.es.html CICA Centro Informático Científico de Andalucía Av. Reina Mercedes s/n 41012-SEVILLA Tfno.: 95-505 66 00 FAX: 95-505 66 51 http://www.cica.es/seguridad