domingo, 28 de agosto de 2016

Crear una conexión sin passwords entre servidores utilizando ssh/sftp

Saludos y bueno y que es sftp (secure file transfer protocol)
es un protocolo para envio de archivos basado en ssh (secure shell), y bueno y para que demonios sirve?, es en realidad para transferir archivos entre servidores o bien computadoras usando un método seguro donde la información va encriptada por ssh.

Hasta aquí todo bien y así debe ser, que pasa cuando tenemos uno o más servidores y queremos transferir un archivo usando ssh ?

Bueno aquí va la receta de la casa para utilizar ssh (lo que yo uso para realizar conexiones entre servidores)

  1. server origen y/o usuario origen (si, puede ser un windows aunque no entraré mucho en el tema y además está samba ne vez de usar ssh para transferir)
  2. server destino y/o path destino
  3. el usuario origen y el usuario destino
  4. se puede usar un gestor de transferencias como filezilla o winscp o bien en este caso usaremos la poderosa terminal :-)
Ahora bien sftp tiene varios procesos que puede hacer, 2 de los más sencillos de entender y usuales es PUT y GET.
  • Put se encarga de "empujar" o subir una archivo o path que le indiquemos 
  • Get se encarga de "traer"o bajar del servidor un determinado archivo o bien path.
Requisitos de linux a linux o linux a unix like
Requisitos como ya mencione algunos:
1.- tener el usuario origen (el que va a conectarse hacia el otro servidor)
2.- tener el usuario destino
3.- contar con el password del usuario destino * este es opcional  nos facilita mucho las cosas

Ejecución:
1.- con el usuario origen el que queremos que envíe el archivo) ejecutamos el siguiente comando ( esto va a generar la llave de tipo rsa, recuerda que hay varios tipos de algoritmos; rsa suele ser el más común no por eso menos seguro)

ssh-keygen o ssh-keygen -t rsa

El comando anterior creará las llaves de autenticación en su home directory del usuario en:


~/.ssh/  (donde el tilde significa /home/miusuario)

NOTA:en este paso puede que te solicite crear un passphrase
para que sea una conexión totalmente sin password solo tecleamos enter sin poner nada en este campo, a menos que quieras especificar uno en cuyo caso recomiendo guardes bien esta contraseña ya que te será solicitada cada vez que te quieras conectar.

2.-el siguiente paso es copiar la llave publica al usuario destino en el servidor destino para eso tenemos un par de formas para realizarlo podemos utilizar el comando ssh-copy-id o enviamos/copiamos la llave pública del usuario origen al usuario receptor o destino en el server destino con: 

ssh-copy-id -i ~/.ssh/id_rsa.pub server_destino


o bien hay que entrar al servidor destino/remoto siendo el usuario origen (el que compartió la llave)

ssh usuariodestino@serverdestino o sftp usuariodestino@serverdestino

4.- Colocar la llave pública en el otro server/usuario en el archivo authorized_keys con el siguiente formato:
ssh-rsa llave user@(ip|hostname)
yo te recomiendo realizarlo con: 
cat llave_origen.pub >> authorized_keys
el archivo authorized_keys se ubicara en ~/.ssh/


Los errores más comunes :
-Revisar que el usuario destino y origen no estén bloqueados
-Si este procedimiento de arriba no funciona, lo mejor es buscar el sshd_config del servidor
de SSH y añadir las siguientes líneas, o descomentar las:

RSAAuthentication yes       (usado para checar el knownhost)
PubkeyAuthentication yes

- Revisar que el usuario origen y destino no estén bloqueados con passwd -s (solaris) passwd -S (linux)

-Revisar el tamaño de las llaves que correspondan con las proporcionadas ya que al copiar y pegar puede ser 
que se haya omitido algún caracter, vigilar el mismo numero de lineas la llave solo mide el equivalente a una sola línea de ahí que recomiendo que se utilice el "cat" para concatenar correctamente la llave al final del archivo authorized_keys en una sola línea.

Revisar
------------------------Permisos en los directorios y archivos //muy importante el home
example
user: juanito
HOME:
drwxr------  4 juanito staff 512 jun 5 09:58 /home/501924789

drwx------ 2 juanito staff 512 jun 5 09:58 /home/juanito/.ssh

-rw-r--r-- 2 juanito staff 512 jun 5 09:58 /home/juanito/.ssh/authorized_keys


En algunas ocasiones en linux pueden interferir los contextos de SElinux para esos casos hay que revisar dichos permisos

para revisar los contextos se utiliza:
ls -laZ
el siguiente ejemplo es ERRONEO por tener en el contexto de SELinux como home_ROOT_T cuando deberia tener ssh_home_t
rw-------. juanito staff unconfined_u:object_r:home_root_t:s0 authorized_keys

para cambiar o restaurar los permisos se ejecuta el siguiente comando
restorecon -r -vv ~juanito/.ssh/ donde juanito... es el home del usuario

los permisos deberían de mostrar una forma como la enlistada más abajo  para todos los archivos

[root@server.chipocludo.ssh]# ls -laZ ~juanito/.ssh/
drwx------. juanito staff unconfined_u:object_r:ssh_home_t:s0 .
drwx------. juanito staff system_u:object_r:home_root_t:s0 ..
-rw-------. juanito staff unconfined_u:object_r:ssh_home_t:s0 authorized_keys
-rw-r--r--. juanito staff unconfined_u:object_r:ssh_home_t:s0 known_hosts


Configurar 2 o más llaves simultáneas con un mismo usuario 

Aquí podremos configurar 2 llaves distintas para el mismo usuario es decir nuestro usuario origen va a poder utilizar llaves distintas para autenticarse según el destino que sea necesario o el usuario destino al crear un archivo llamado config en la carpeta ~/.ssh/
también nos da la posibilidad de utilizar llaves con diferentes cifrados es decir tener una con 1024 y otra cifrada con 2048 u otra más pero con cifrado DSA.

1.-configura que una llave este funcional es decir los pasos de arriba para RSA
2.- ya con la llave funcionando puedes moverla a una carpeta, hay que vigilar muy bien los permisos
3.- se crea la segunda llave con los mismos pasos y a esta le vamos a poner otro nombre de archivo ejemplo: id_rsa2_t
   -- nota es posible que sea necesario ejecutar :

      ssh-add id_rsa e ingresar el passphrase que utilizaste si es que tenias alguno.
4.- de igual forma se mueve a otra carpeta la segunda llave para mantener ordenado/separadas las llaves generadas

5.- creamos  el archivo config, de igual manera revisar los permisos ver el ejemplo más abajo:
touch config
6.- y agregamos la siguientes líneas dentro de config con nuestro editor de texto preferido
-bash-4.1$ vim config
Host server.chipocludo // esta linea indica el nombre del host
        User  test_ssh // el usuario al que nos vamos a conectar
        Hostname server.chipocludo // el hostname destino
        PreferredAuthentications publickey // el tipo de autenticación
        IdentityFile ~juanito/.ssh/primerallave/id_rsa //la linea mas importante aquí se indica la ruta del archivo con el que nos vamos a identificar. 

Host server.chipocludo
        User  test_ssh2
        Hostname server.chipocludo
        PreferredAuthentications publickey
        IdentityFile ~juanito/.ssh/segundallave/id_rsa2_t //la linea mas importante aquí se indica la ruta del archivo con el que nos vamos a identificar pero para el servidor 2 o el usuario dos

vamos a ver como quedo la primera llave  en la carpeta 1
-bash-4.1$ cd primerallave
-bash-4.1$ ls -ltr   -------------> en esta parte ojo con los permisos y el selinux en linux
total 8
-rw-------. 1 juanito staff  407 Feb 26 14:19 id_rsa.pub
-rw-------. 1 juanito staff  679 Feb 26 14:19 id_rsa
-bash-4.1$ cd ..
-bash-4.1$ pwd // mas o menos asi queda tu carpeta
/home/juanito/.ssh
-bash-4.1$ ls -ltr
total 20
drwxr-xr-x. 2 juanito staff 4096 Feb 26 14:27 segundallave
drwxr-xr-x. 2 juanito staff 4096 Feb 26 14:27 primerallave
-rwxr-xr-x. 1 juanito staff  432 Feb 26 14:46 known_hosts
-rw-r--r--. 1 juanito staff  406 Feb 26 15:12 authorized_keys
-rwxr-xr-x. 1 juanito staff  392 Feb 26 15:28 config ----> este es el archivo


otro ejemplo utilizando el config file
Host github.com
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/git/id_rsa
Host fedoraproject.org
Hostname fedoraproject.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/fedoraproject/id_rsa
Host fedorapeople.org
Hostname fedorapeople.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/fedoraproject/id_rsa

ejemplo: 3 
Host *.dominio.chipocludo.com
        PreferredAuthentications publickey
        IdentityFile ~juanito/.ssh/basekey/id_rsa
Host sufruta.mm.com
        User aldo
        Hostname sufruta.mm.com

        PreferredAuthentications publickey

referencia: http://www.robotgoblin.co.uk/blog/2012/07/24/managing-multiple-ssh-keys/








No hay comentarios.:

Publicar un comentario