Alvaro Marín
Instalación, configuración y manejo de openSSH
OpenSSH (desarrollada por openBSD) es la versión libre (licencia BSD) del protocolo SSH.
Permite entre otras cosas, la conexión remota a una máquina, para poder ejecutar comandos
sobre ella, al igual que telnet o rlogin, pero con la ventaja respecto a los anteriores programas
de que la información va cifrada. Esto es, en el caso de que alguien
de la misma red en la que nos encontramos, esté usando un sniffer
para "capturar" las contraseñas para conectarnos a un ftp o a una
sesión telnet, con ssh, estará perdiendo el tiempo ya que van cifradas.
Pero además de esto, con ssh podremos establecer sesiones seguras con sevidores X, smtp, pop3... mediante túneles SSH.
Para la autentificación, ssh puede utilizar algoritmo de cifrado como RSA o DSA. Para el envío de datos a través de la red, usa 3DES, IDEA, Blowfish...
Soporta ambas versiones del protocolo ssh, la 1 y la 2. Dependiendo de cuál usemos los métodos de autentificación, son distintos:
Dentro del paquete 'ssh' vienen bastantes programas adicionales, a parte del servidor y el cliente:
# Definimos el puerto por el que escuchamos las peticiones de conexión del los clientes Port 22 # Especificamos por qué direcciones locales escucharemos. # Use these options to restrict which interfaces/protocols sshd will bind to #ListenAddress :: #ListenAddress 0.0.0.0 # Especificamos las versiones del protocolo que aceptaremos Protocol 2,1 # Archivos que contienen las llaves privadas de host a usar (solo permisos rw- para root) # HostKeys for protocol version 1 HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key # Cada cuantos segundos el servidor regenera las claves, para así evitar el que se puedan # descifrar sesiones caputaradas y luego usarse. Nunca es guardada en disco. KeyRegenerationInterval 3600 # Espeficia el nº de bits para la clave del servidor del protocolo v1 ServerKeyBits 768 # Tipo de logeo de actividades -> AUTH=>/var/log/auth.log También disponible DAEMON, USER... # Logging SyslogFacility AUTH LogLevel INFO # Authentication: # El servidor desconecta al cliente si no se ha logueado correctamente en 600 segs. LoginGraceTime 600 # Permitimos o no el login del usuario root => poner a no! PermitRootLogin no # SSH comprobará que los archivos tienen los permisos correctos, para evitar tener archivos con todos # los permisos a todos los usuarios StrictModes yes # Permitimos la autentificación por RSA (solo para v1) RSAAuthentication yes # Permitimos la autentificación por clave pública (solo para v2) PubkeyAuthentication yes # Contiene el archivo que contiene las claves para la autentificación #AuthorizedKeysFile %h/.ssh/authorized_keys # NO usaremos el método de autentificación por rhost (.rhost) # rhosts authentication should not be used RhostsAuthentication no # Don't read the user's ~/.rhosts and ~/.shosts files IgnoreRhosts yes # For this to work you will also need host keys in /etc/ssh_known_hosts RhostsRSAAuthentication no # No usamos el protocolo de autentificación por host # similar for protocol version 2 HostbasedAuthentication no # Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication #IgnoreUserKnownHosts yes # To enable empty passwords, change to yes (NOT RECOMMENDED) PermitEmptyPasswords no # Uncomment to disable s/key passwords #ChallengeResponseAuthentication no # HAbilitamos la autentificación "normal" si todo falla # To disable tunneled clear text passwords, change to no here! PasswordAuthentication yes # Use PAM authentication via keyboard-interactive so PAM modules can # properly interface with the user PAMAuthenticationViaKbdInt yes # Opciones para servidor Kerberos # To change Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #AFSTokenPassing no #KerberosTicketCleanup no # Kerberos TGT Passing does only work with the AFS kaserver #KerberosTgtPassing yes # En un principio, no permitimos exportar las X X11Forwarding no # Espeficicamos el primer nº de pantalla disponible para exportar X11DisplayOffset 10 # Si queremos que al hacer login, al usuario le salga /etc/motd PrintMotd no # Por defecto, enseñaremos los datos del último login #PrintLastLog no # Para que el servidor pueda "enterarse" de que el cliente ha caido por ej KeepAlive yes # #UseLogin no #MaxStartups 10:30:60 # Si queremos enviar un banner cuando un cliente se conecte #Banner /etc/issue.net #ReverseMappingCheck yes # Servidor ftp por ssh Subsystem sftp /usr/lib/sftp-server
Vamos a configurar ssh para poder acceder al servidor de forma segura y sin password, es decir, mediante claves RSA/DSA.
Debemos asegurarnos que en archivo de configuración del servidor, tenemos la opción: PubkeyAuthentication yes
En el cliente, generamos las claves DSA:ssh-genkey -t dsa
Podemos poner una password, de tal forma que ésta sería la que habría que introducir
cada vez que queramos conectarnos a la máquina remota. En nuestro caso, la dejaremos
en blanco.
Vamos al directorio .ssh de nuestro home y vemos que nos ha generado dos archivos:
id_dsa (llave privada)
id_dsa.pub (llave publica)
$scp archivo_local user@host:archivo_remoto scp id_dsa.pub alvaro@intranet:.ssh/id_dsa.pub The authenticity of host 'intranet (192.168.200.70)' can't be established. RSA key fingerprint is d8:d7:0a:cf:d9:8f:fe:fa:66:f0:76:46:46:fa:b8:1a. Are you sure you want to continue connecting (yes/no)?Vemos que no puede establecer la autentificación por host, y por tanto nos pedirá la contraseña. El fingerprint, es la "firma digital" del servidor. La aceptamos, y se nos copiará en el archivo .ssh/know_host de la máquina local. De esta forma, cada vez que nos conectemos al servidor, se comprobará que ambas "firmas" coinciden.
alvaro@intranet's password: id_dsa.pub 100% |****************************************************| 605 00:00Ya tenemos nuestra clave pública copiada en el servidor, en el directorio .ssh del home del usuario Ahora conectandonos al servidor, hacemos los siguiente:
cd /home/usuario/.ssh/ cat id_dsa.pub_CLIENTE >> authorized_keys2 rm id_dsa.pub_CLIENTEA partir de este momento, ya podemos hacer desde el cliente, de la forma:
ssh usuario@servidorpara conectarnos sin necesidad de password. Debemos asegurarnos que solo nosotros tenemos acceso a leer la clave privada, para ello damos al directorio, los permisos siguientes:
chmod 700 .ssh
Por otra parte, ssh-agent, es un demonio que se encarga de "cachear" las claves privadas.
SSH se conectará con ssh-agent para pedirle la clave privada, así no tendremos que
introducir la password cada vez que nos conectemos al servidor.
Para añadir una clave privada a ssh-agent utilizamos el comando ssh-add, de la siguiente forma:
ssh-add .ssh/id_dsay a partir de ahora, ya no tendremos que poner la pass cada vez.
Si queremos habilitar esta forma de autentificación, de tal modo que solo las máquinas con su clave en el servidor puedan entrar, podemos poner a "no", la línea de PasswordAuthentication.
Mediante ssh podemos hacer túneles para poder enviar al información a través de la red, es decir, podemos por ejemplo conectarnos al puerto 110 de un servidor para ver nuestro correo, de tal forma que los datos van cifrados. Esto se consigue mediante el "port-forwarding". Lógicamente, hace falta tener ssh en ambas máquinas.
ssh -P -f -L 1234:remoteserver:110 user@remoteserver sleep 25Las opciones que hemos indicado a ssh son: