Mostrando entradas con la etiqueta SSH. Mostrar todas las entradas
Mostrando entradas con la etiqueta SSH. Mostrar todas las entradas

domingo, 27 de febrero de 2011

Conectarse por SSH utilizando llaves RSA


Partiremos de la base de que tienes tu servidor SSH configurado y que utilizas un puerto diferente al 22 (que es el puerto por defecto). Un sistema de seguridad más robusto que el de la clave común y corriente es el de las llaves RSA (Rivest-Shamir-Adleman). El sistema consiste en lo siguiente: debes generar dos llaves, una pública y una privada. La llave pública permanecerá en cada servidor al que desees conectarte, mientras que la privada permenece en el equipo desde el que te conectas. La llave pública está a la vista de todo el mundo, mientras que la privada únicamente tú la puedes ver. Obviamente, es necesario tener un par de llaves para cada computador que utilices con este sistema.

Importante: previo a correr este comando asegurate de que existe la carpeta .ssh. Si no existe debes crearla y establecer los permisos correctos:

mkdir ~/.ssh
chmod 700 ~/.ssh

El primer paso es generar tus llaves RSA con el siguiente comando:
ssh-keygen -t rsa

Se te preguntará por la ruta en donde deseas guardar tus llaves y por una clave que se te pedirá cada vez que desees utilizarlas. La razón de crear una clave es proveerte de una seguridad adicional en el caso de que tu llaves RSA sean robadas. La idea de fondo es que si te roban tus llaves cuentes con algunas horas (mientras el ladrón intenta romper tu clave mediante bruteforce) para conectarte a tu servidor por SSH y eliminar tu llave pública.

Si lo deseas, puedes presionar Enter cuando se te pida la clave, de esta forma no se te pedirá una cada vez que te conectes y la conexión se conseguirá de manera automática.

Ahora debes copiar tu llave pública en el servidor:

ssh-copy-id <username>@<host>

Si el usuario es “carlos” y se conecta al servidor “servidor.com” el comando sería:
ssh-copy-id carlos@servidor.com

En caso de que la conexión por SSH se realice utilizando un puerto diferente al 22, por ejemplo el 3333, el comando es el siguiente:

ssh-copy-id “-p3333 carlos@carlos.com”

Finalmente, para conectarte al servidor mediante tu llave RSA debes utilizar el comando:

ssh <usuario>@<host> -p<puerto>
siguiendo el ejemplo:

ssh carlos@host.com -p3333
Se te pedirá que escribas la clave asociada a tus llaves RSA, en caso de que hayas creado una.

Si eres administrador del servidor SSH y deseas que únicamente se realicen conexiones remotas utilizando el sistema de llaves RSA, tienes que deshabilitar la opción de conexión mediante el uso de password. Para ello debes editar tu archivo /etc/ssh/sshd_config y modificar la siguiente línea:
#PasswordAuthentication yes
y modificarla para que quede así:
PasswordAuthentication no

Por supuesto, una vez que deshabilites la autenticación por clave deberás copiar todas tus llaves públicas directamente, ya sea utilizando una unidad USB o algún otro método similar.

Fuentes:
  • https://help.ubuntu.com/community/SSH/OpenSSH/Keys
  • https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
  • http://jeremy.wordpress.com/2008/05/29/ssh-copy-id-port-different/

viernes, 30 de julio de 2010

Como montar carpetas remotamente con SSHFS


sshfs te permite montar una carpeta con fuse utilizando ssh. La idea es conectarte a un equipo remoto, que posea un servido ssh funcionando, y utilizar fuse para montar localmente en tu sistema una carpeta remota. Este método tiene todas las ventajas de seguridad de una conexión por ssh, mientras facilita la usabilidad propia de fuse a la hora de montar directorios.

Si ya tienes instalado un servidor ssh te puedes saltar la primera parte de esta entrada

1. Instalando un servidor ssh.

Para instalar un servidor ssh necesitas el paquete openssh-server:
sudo apt-get install openssh-server
La configuración del server ssh se encuentra en el archivo /etc/ssh/sshd_config. Antes de modificarlo es recomendable crear un respaldo:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
Tambien puedes proteger tu respaldo contra escritura:
sudo chmod a-w /etc/ssh/sshd_config.original
Personalmente suelo cambiar siempre el puerto (22) que ssh utiliza para transmitir. Para ello busco la linea que dice:
Port 22
y establezco otro puerto. Esta es una forma de evitar los ataques externos reiterados a tu equipo. No es una medida infalible, efectivamente, nada impide que el puerto que escojas aún así sea víctima de un intento de intrusión. Justamente por ello, lo más importante es no utilizar una clave que sea fácil de descubrir. Finalmente, si verdaderamente te preocupa la seguridad, lo mejor es utilizar llaves ssh (ssh keys). Puedes encontrar la manera de implementar tus llaves ssh aquí.
Una vez que hayas realizado todos los cambios en /etc/ssh/sshd_config obviamente debes guardar los cambios y cerrar el archivo. Basta reiniciar el server para que los cambios se hagan efectivos:
sudo /etc/init.d/ssh restart
Si deseas verificar que todo salió bien puedes conectarte remotamente por ssh escribiendo en el terminal:
ssh nombre_usuario@direccion_equipo_remoto
por ejemplo, si el usuario es carlos, la dirección ip del equipo remoto es 123.45.6.7 y el puerto de transferencia ha sido cambiado a 3333, el comando sería:
ssh carlos@123.45.6.7 -p3333
En caso de que el puerto no haya sido modificado no es necesario incluirlo.


 2. Conectándote por sshfs

Ubuntu trae fuse instalado por defecto, por lo que no es necesario instalarlo. Lo que sí debes hacer es verificar que formas parte del grupo fuse. Puedes agregarte a este grupo escribiendo el terminal:
sudo gpasswd -a $USER fuse
$USER será interpretado por el sistema por el nombre de usuario que utilizas. El siguiente paso es instalar sshfs:
sudo apt-get install sshfs
Y listo, ahora lo único que necesitas es montar la carpeta remota. Suponiendo que deseas montar la carpeta de tu equipo remoto llamada ~/Musica (es una buena idea utilizar sshfs para acceder remotamente a tu colección de música). Para ello creas una carpeta en tu equipo local llamada ~/Coleccion_musica. Luego en el terminal escribes:
sshfs nombre_usuario@direccion_equipo_remoto:~/Musica ~/Coleccion_musica
Si utilizamos los datos anteriormente propuestos quedaría así:
ssshfs carlos@123.45.6.7:~/Musica ~/Coleccion_musica -p3333
Nuevamente, si el puerto no ha sido modificado no es necesario incluirlo. A partir de este momento es posible, a través de tu carpeta local ~/Coleccion_musica, al contenido de tu carpeta remota ~/Musica y, lo mejor de todo, es que lo harás a través de ssh.

En caso de que desees desconectarte puedes utilizar el siguiente comando:
fusermount -u ~/Coleccion_musica
Eso es todo.

Fuentes:
https://help.ubuntu.com/community/SSHFS
https://help.ubuntu.com/community/SSH
https://help.ubuntu.com/community/SSH/OpenSSH/ConnectingTo
https://help.ubuntu.com/9.04/serverguide/C/openssh-server.html
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring
http://eldiabloenlosdetalles.net/2006/08/29/howtocomo-usar-sshfs-para-montar-directorios-con-ssh/