Introducción.
SSH (Secure Shell, en español: interprete de ordenes seguras) es un protocolo que nos sirve para acceder a una maquina remota a través de la red y estando en otra maquina, parecer que estamos en ella. Un servidor SSH escucha por defecto en el puerto 22.
SSH trabaja de forma parecida a telnet, pero lo hace de forma cifrada, por lo que si interceptan el mensaje y no tienen la contraseña no podrán leer el contenido.
Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.
Instalación del cliente:
# aptitude install openssh-client
Instalación del servidor:
# aptitude install openssh-server
Ficheros de configuración:
Los ficheros de configuración principales se encuentran en el directorio: /etc/ssh y son:
-ssh_config: fichero de configuración del cliente.
-sshd_config: fichero de configuración del servidor.
Configuración del servidor.
Tras la instalación del servidor nos podemos conectar a el. Se instala con los parámetros por defectos y los podemos encontrar en el fichero de configuración sshd_config. Algunas lineas que nos pueden interesar (Muchas lineas están comentadas, para que funcionen tienes que quitar el # y otras no se encuentran y tienes que añadirlas):
-Port: en el especificamos el puerto en el que escucha nuestro servidor, por defecto el 22. Cambiar el puerto evita los ataques automáticos a el puerto 22.
-Protocol: protocolo ssh que utilizamos, es preferible utilizar solo el 2, ya que el 1 es mas inseguro.
-PermitRootLogin: esta opción por defecto esta en yes, no es muy aconsejable conectarse directamente como root, yo aconsejaría ponerla en no.
-MaxAuthTries: en esta linea especificamos el numero de intentos fallidos de autenticación. Si fallas ese numero de veces, te desconectas.
-ListenAddress: dirección en la que escucha el servidor.
-AllowUsers: por defecto están todos los usuarios, si ponemos esta directiva, solo podrán conectarse los usuarios que pongamos separados por espacios.
Tras la modificación de algunos de las opciones anteriores tenemos que reiniciar el servidor para que funcione con ellas:
/etc/init.d/ssh restart
Otros ficheros que tenemos que tener en cuenta a la hora de la seguridad de nuestro servidor son los ficheros /etc/hosts.allow y /etc/hosts.deny.
hosts.deny: este fichero sirve para denegar el acceso, yo por defecto lo tengo todo denegado.
ALL : ALL
hosts.allow: este fichero sirve para permitir el acceso. En nuestro caso solo tenemos que darle acceso a el servidor ssh. Yo le he dado permiso a todas las redes, podríamos ser mas estrictos.
sshd : ALL
Comandos básicos del cliente.
La conexión mas sencilla, seria:
$ ssh usuario@servidor
Si el usuario con el que nos conectamos se llama igual que con el que nos conectamos, podemos omitir el nombre de usuario:
$ ssh servidor
Para conectarnos a un puerto diferente utilizamos la opción -p y el puerto, por ejemplo el 2222:
$ ssh -p 2222 usuario@servidor
Si nos va a hacer falta ejecutar programas que necesitan interfaz gráfica utilizamos la opción -X(es mayúscula):
$ ssh -X usuario@servidor
Copia remota de archivos(SCP).
Esto es muy útil para pasar archivos de una maquina a otra. Para copiar archivos de un servidor (/ruta/archivo) a nuestra maquina (/home/usuario):
$ scp -r -p usuario@servidor:/ruta/archivo /home/usuario
Las opciones -r y -p son opcionales. Su funciones son:
-r: copiado recursivo.
-p: preservar los atributos de los archivos.
También podemos hacerlo al revés y copiar archivos locales a un servidor:
$ scp /home/usuario/archivo usuario@servidor:/ruta/
Utilización de llaves de autenticación.
Lo primero es crear la llave del cliente, para esto, en la maquina del cliente y con el usuario que queremos acceder ejecutamos:
$ ssh-keygen -t rsa -b 2048
Este comando te pregunta donde desea guardar las claves y si quieres ponerle contraseña. Si no le ponemos contraseña cualquiera puede utilizar la clave. Ahora tenemos que enviar la clave a el servidor, ya sea con un USB, DVD, CD... lo que deseen, yo suelo optar por el scp:
$ scp ~/.ssh/id_rsa.pub usuario@servidor:~
Ya tenemos la clave en nuestro servidor, ahora tenemos que agregarla a nuestras claves autorizadas. Para esto ejecutamos (desde el servidor):
$ cat id_rsa.pub >> .ssh/authorized_keys || rm id_rsa.pub
Tenemos que tener la lista de claves bien protegidas:
$ chmod 600 ~/.ssh/authorized_keys
Esto puede ser utilizado cuando queremos que dos servidores automaticen cosas uno del otro, así puede acceder automáticamente.
Montar un sistema de archivos remoto (SSHFS).
Con esta herramienta podemos montar un sistema de archivos, como si estuvieran en nuestra maquina. Lo primero es la instalación:
# aptitude install sshfs
Comprobamos que tenemos cargado el modulo fuse, de no ser asi lo cagamos:
# lsmod | grep fuse
Si no aparece:
# modprobe fuse
Si queremos utilizar esta herramienta con un usuario que no sea el superusuario tendremos que agregarlo al el grupo fuse en el fichero /etc/group. Tras agregarlo cerrar e iniciar sesión de nuevo para que coja los cambios.
Bibliografía:
http://wiki.debian.org/SSH
https://wiki.archlinux.org/index.php/Secure_Shell_(Espa%C3%B1ol)
http://wiki.debianchile.org/SSH#Uso_de_SSH# aptitude install openssh-server
Ficheros de configuración:
Los ficheros de configuración principales se encuentran en el directorio: /etc/ssh y son:
-ssh_config: fichero de configuración del cliente.
-sshd_config: fichero de configuración del servidor.
Configuración del servidor.
Tras la instalación del servidor nos podemos conectar a el. Se instala con los parámetros por defectos y los podemos encontrar en el fichero de configuración sshd_config. Algunas lineas que nos pueden interesar (Muchas lineas están comentadas, para que funcionen tienes que quitar el # y otras no se encuentran y tienes que añadirlas):
-Port: en el especificamos el puerto en el que escucha nuestro servidor, por defecto el 22. Cambiar el puerto evita los ataques automáticos a el puerto 22.
-Protocol: protocolo ssh qu e utilizamos, es preferible utilizar solo el 2, ya que el 1 es mas inseguro.
-PermitRootLogin: esta opción por defecto esta en yes, no es muy aconsejable conectarse directamente como root, yo aconsejaría ponerla en no.
-MaxAuthTries: en esta linea especificamos el numero de intentos fallidos de autenticación. Si fallas ese numero de veces, te desconectas.
-ListenAddress: dirección en la que escucha el servidor.
-AllowUsers: por defecto están todos los usuarios, si ponemos esta directiva, solo podrán conectarse los usuarios que pongamos separados por espacios.
Tras la modificación de algunos de las opciones anteriores tenemos que reiniciar el servidor para que funcione con ellas:
/etc/init.d/ssh restart
Otros ficheros que tenemos que tener en cuenta a la hora de la seguridad de nuestro servidor son los ficheros /etc/hosts.allow y /etc/hosts.deny.
hosts.deny: este fichero sirve para denegar el acceso, yo por defecto lo tengo todo denegado.
ALL : ALL
hosts.allow: este fichero sirve para permitir el acceso. En nuestro caso solo tenemos que darle acceso a el servidor ssh. Yo le he dado permiso a todas las redes, podríamos ser mas estrictos.
sshd : ALL
Comandos básicos del cliente.
La conexión mas sencilla, seria:
$ ssh usuario@servidor
Si el usuario con el que nos conectamos se llama igual que con el que nos conectamos, podemos omitir el nombre de usuario:
$ ssh servidor
Para conectarnos a un puerto diferente utilizamos la opción -p y el puerto, por ejemplo el 2222:
$ ssh -p 2222 usuario@servidor
Si nos va a hacer falta ejecutar programas que necesitan interfaz gráfica utilizamos la opción -X(es mayúscula):
$ ssh -X usuario@servidor
Copia remota de archivos(SCP).
Esto es muy útil para pasar archivos de una maquina a otra. Para copiar archivos de un servidor (/ruta/archivo) a nuestra maquina (/home/usuario):
$ scp -r -p usuario@servidor:/ruta/archivo /home/usuario
Las opciones -r y -p son opcionales. Su funciones son:
-r: copiado recursivo.
-p: preservar los atributos de los archivos.
También podemos hacerlo al revés y copiar archivos locales a un servidor:
$ scp /home/usuario/archivo usuario@servidor:/ruta/
Utilización de llaves de autenticación.
Lo primero es crear la llave del cliente, para esto, en la maquina del cliente y con el usuario que queremos acceder ejecutamos:
$ ssh-keygen -t rsa -b 2048
Este comando te pregunta donde desea guardar las claves y si quieres ponerle contraseña. Si no le ponemos contraseña cualquiera puede utilizar la clave. Ahora tenemos que enviar la clave a el servidor, ya sea con un USB, DVD, CD... lo que deseen, yo suelo optar por el scp:
$ scp ~/.ssh/id_rsa.pub usuario@servidor:~
Ya tenemos la clave en nuestro servidor, ahora tenemos que agregarla a nuestras claves autorizadas. Para esto ejecutamos (desde el servidor):
$ cat id_rsa.pub >> .ssh/authorized_keys || rm id_rsa.pub
Tenemos que tener la lista de claves bien protegidas:
$ chmod 600 ~/.ssh/authorized_keys
Esto puede ser utilizado cuando queremos que dos servidores automaticen cosas uno del otro, así puede acceder automáticamente.
Montar un sistema de archivos remoto (SSHFS).
Con esta herramienta podemos montar un sistema de archivos, como si estuvieran en nuestra maquina. Lo primero es la instalación:
# aptitude install sshfs
Comprobamos que tenemos cargado el modulo fuse, de no ser asi lo cagamos:
# lsmod | grep fuse
Si no aparece:
# modprobe fuse
Si queremos utilizar esta herramienta con un usuario que no sea el superusuario tendremos que agregarlo al el grupo fuse en el fichero /etc/group. Tras agregarlo cerrar e iniciar sesión de nuevo para que coja los cambios.
Bibliografía:
http://wiki.debian.org/SSH
https://wiki.archlinux.org/index.php/Secure_Shell_(Espa%C3%B1ol)
http://wiki.debianchile.org/SSH#Uso_de_SSH