Muestra las diferencias entre dos versiones de la página.
sad:ubuntu:p9 [2018/01/10 19:01] José Manuel Guallar |
sad:ubuntu:p9 [2019/01/04 13:18] |
||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ====== ¿Qué es SSH? ====== | ||
- | |||
- | |||
- | Secure Shell (SSH) es un protocolo de red para la comunicación de datos segura, servicios de shell remotos o ejecución de comandos y otros servicios de red seguros entre dos ordenadores conectadas a través de un canal seguro sobre una red insegura: un servidor y un cliente (ejecutando un servidor SSH y programas de cliente SSH, respectivamente) | ||
- | |||
- | ====== ¿Qué son las llaves SSH? ====== | ||
- | |||
- | |||
- | En los sistemas tipo Unix, la lista de claves autorizadas se almacena en la carpeta de inicio del usuario que puede iniciar sesión de forma remota, en el archivo ~/.ssh/authorized_keys. Este archivo solo es respetado por ssh si no se puede escribir con nada aparte del propietario y la raíz. | ||
- | |||
- | Cuando la clave pública está presente en un lado y la clave privada coincidente está presente en otro lado, ya no es necesario escribir la contraseña. | ||
- | |||
- | La clave privada también se puede buscar en lugares estándar, pero su ruta completa también se puede especificar como una configuración de línea de comandos (el modificador -i para ssh). La utilidad ssh-keygen produce las claves pública y privada, siempre en pares. | ||
- | | ||
- | En esta practica, veremos cómo hacer lo siguiente: | ||
- | |||
- | * Crearemos una infraestructura clave SSH entre Ubuntu y Fedora. | ||
- | * Usaremos ssh-keygen para crear un par de claves privadas / públicas para el usuario estudiante en Ubunut. | ||
- | * Colocaremos la clave pública en el servidor de Fedora en el directorio apropiado para el usuario estudiante. | ||
- | * Utilizaremos la clave privada de Ubuntu para autenticar e iniciar sesión en el servidor de Fedora como estudiante sin una contraseña. | ||
- | * Utilizaremos la clave privada de Ubuntu para autenticar y ejecutar el comando contra el servidor de Fedora como estudiante sin una contraseña. | ||
- | |||
- | |||
- | ====== Creamos el directorio .ssh ====== | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:~$ mkdir -p .ssh | ||
- | student@ubuntu12:~$ ls -ld .ssh | ||
- | En mi caso el permiso es 775. | ||
- | Esto es un problema porque no quiero en nadie tenga acceso en un futuro a mis llaves ssh (ssh keys) | ||
- | student@ubuntu12:~$ chmod 700 .ssh | ||
- | Ahora solo el usuario puede leer, escribir y ejecutar en el directorio .ssh | ||
- | student@ubuntu12:~$ ls -ld .ssh | ||
- | </code> | ||
- | |||
- | {{:sad:ubuntu:p9:01.png?400|}} | ||
- | |||
- | Creamos el par de claves | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:~$ cd .ssh | ||
- | student@ubuntu12:~$ ssh-keygen -t rsa -b 4096 | ||
- | </code> | ||
- | |||
- | ssh-keygen es la instruccion que genera el par de claves publica y privada. | ||
- | |||
- | "-t" Especifica el modo de encriptación | ||
- | |||
- | "-b" Especifica la longitud de la clave, por defecto 2048 | ||
- | | ||
- | pulsamos <Enter> 3 veces | ||
- | | ||
- | {{:sad:ubuntu:p9:02.png?400|}} | ||
- | |||
- | Establecemos los permisos a las claves SSH | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:~/.ssh ls -l | ||
- | student@ubuntu12:~/.ssh chmod 600 * | ||
- | </code> | ||
- | |||
- | Quermos hacer mas seguro ela acceso a las claves | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:~/.ssh ls -l | ||
- | student@ubuntu12:~/.ssh file id_rsa | ||
- | </code> | ||
- | |||
- | id_rsa, es el fichero de la clave privada | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:~/.ssh file id_rsa.pub | ||
- | </code> | ||
- | |||
- | id_rsa.pub, es la clave pública que se coloca en otros servidores para configurar SSH de forma segura. | ||
- | |||
- | |||
- | vamos al **fedora** y ejecutamos ifconfig -a | ||
- | |||
- | {{:sad:ubuntu:p9:04.png?400|}} | ||
- | |||
- | para ver que el openssh-serves está instalado | ||
- | |||
- | nos aseguramos que sshd está corriendo | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ rpm -qa | grep "openssh-server" | ||
- | </code> | ||
- | |||
- | si no esta instalado utilizamos el comando yum | ||
- | |||
- | ---- | ||
- | |||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ yum update openssh-server | ||
- | [student@fedora14 ~]$ yum install openssh-server | ||
- | </code> | ||
- | para ver si sshd esta corriendo | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ ps -eaf | grep sshd | grep -v grep | wc -l | ||
- | </code> | ||
- | si sale 0 es que no se está ejecutando | ||
- | |||
- | si sale 1 es que se está ejecutando, pincha en este enlace [[sad:ubuntu:p9#creamos_el_directorio_ssh1|Pincha aqui si sale 1]] | ||
- | |||
- | ¿Por qué sshd no se está ejecutando aunque openssh-server se instaló previamente y ahora se actualiza? | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ ls -l /etc/rc5.d/* | grep ssh | ||
- | </code> | ||
- | |||
- | Nota: | ||
- | |||
- | Estamos comprobando si hay un script de inicio en el nivel de ejecución 5 para sshd. Hay que recordar que run-level 5 es el modo gráfico multiusuario donde se montan los sistemas de archivos y la red está activa. | ||
- | |||
- | El resultado nos muestra que solo hay un script kill, pero no un script de inicio. Todos los scripts que comienzan con una "K" son scripts de eliminación, y todos los scripts que comienzan con una "S" se consideran scripts de inicio. | ||
- | |||
- | Por lo tanto, si no hay un script de inicio para sshd, eso explicaría por qué sshd no se está ejecutando. | ||
- | |||
- | Usemos chkconfig para verificar que no haya un script de inicio para sshd. | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ chkconfig --list | grep ssh | ||
- | </code> | ||
- | |||
- | chkconfig: actualizaciones y consultas de información de nivel de ejecución para los servicios del sistema. | ||
- | |||
- | chkconfig tiene cinco funciones distintas: agregar nuevos servicios para administración, eliminar servicios de administración, enumerar la información de inicio actual para los servicios, cambiar la información de inicio de los servicios y verificar | ||
- | |||
- | El estado de inicio de un servicio en particular. | ||
- | |||
- | Los niveles de ejecución 0 a 6 no tienen un script de inicio para sshd. | ||
- | |||
- | Para crear los scripts de inicio para sshd | ||
- | |||
- | chkconfig sshd --level 2345 on | ||
- | chkconfig --list | grep ssh | ||
- | |||
- | Creamos los scripts de inicio SSHD para el nivel de ejecución 2, 3, 4 y 5. | ||
- | |||
- | chkconfig ahora muestra que existe un script de inicio para los niveles de ejecución 2, 3, 4 y 5. | ||
- | |||
- | Verificar que los scripts de inicio se hayan creado usando el comando find. | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ find /etc/rc[0-9].d/* -name "S*sshd*" | ||
- | </code> | ||
- | |||
- | find /etc/rc[0-9].d/*, Buscae archivos y directorios en /etc/, que empiezan por rc y necesita un numero despues del "rc" y antes del ".d". (por ejemplo, rd2.d). | ||
- | |||
- | Los scripts de inicio SSHD comienzan con una "S". | ||
- | |||
- | -name "S*sshd*", significa búsqueda de cualquier cosa que comience con una "S" y contenga sshd después de la "S". | ||
- | |||
- | Ahora ya podemos comenzar el servicio | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ service sshd start | ||
- | </code> | ||
- | |||
- | Verificamos que está corriendo | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ ps -eaf | grep sshd | grep -v grep | ||
- | </code> | ||
- | |||
- | ---- | ||
- | |||
- | |||
- | ===== Creamos el directorio .ssh ===== | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ mkdir -p .ssh | ||
- | [student@fedora14 ~]$ ls -ld .ssh | ||
- | [student@fedora14 ~]$ chmod 700 .ssh | ||
- | [student@fedora14 ~]$ ls -ld .ssh | ||
- | </code> | ||
- | |||
- | {{:sad:ubuntu:p9:05.png?400|}} | ||
- | |||
- | ===== Creamos el fichero de autorizacion ===== | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ cd .ssh | ||
- | [student@fedora14 ~]$ touch authorized_keys | ||
- | </code> | ||
- | |||
- | El fichero de autorizacion de claves contiene todos las claves publicas de los servidores en los que estará autentificado el servidor fedorate into this Fedora server. | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ ls -l authorized_keys | ||
- | [student@fedora14 ~]$ chmod 600 authorized_keys | ||
- | </code> | ||
- | |||
- | Le damos solo permisos al usuario | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 ~]$ ls -l authorized_keys | ||
- | |||
- | {{:sad:ubuntu:p9:06.png?400|}} | ||
- | |||
- | ** Volvemos al ubuntu** | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:/$ cd /home/student/.ssh/ | ||
- | student@ubuntu12:/$ scp id_rsa.pub student@192.168.153.48: /home/student/.ssh/ | ||
- | </code> | ||
- | |||
- | Reemplazamos la ip por nuestra ip del Fedora | ||
- | |||
- | Responder "sí" | ||
- | |||
- | La huella (fingerprint) RSA se agregará al archivo known_hosts del usuario. | ||
- | |||
- | La huella de RSA se almacena en /home/student/.ssh/known_hosts | ||
- | |||
- | Al iniciar las siguientes sesiones de ssh, el cliente ssh identificará el nombre de host y lo buscará en el archivo known_hosts para encontrar la clave de host ssh previamente registrada para el servidor remoto. | ||
- | |||
- | {{:sad:ubuntu:p9:07.png?400|}} | ||
- | |||
- | volvemos al fedora y añadimos el fichero id_rsa.com en el fichero de claves autorizadas | ||
- | |||
- | <code bash> | ||
- | [student@fedora14 .ssh]$ cd /home/student/.ssh/ | ||
- | [student@fedora14 .ssh]$ ls -l | ||
- | [student@fedora14 .ssh]$ cat id_rsa.pub >> authorized_keys | ||
- | [student@fedora14 .ssh]$ cat authorized_keys | ||
- | </code> | ||
- | |||
- | {{:sad:ubuntu:p9:08.png?400|}} | ||
- | | ||
- | ===== Testeando la conexion SSH ===== | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:~.ssh$ ssh -i /home/student/.ssh/id_rsa student@192.168.153.47 | ||
- | |||
- | [student@Fedora14 ~]$ hostname | ||
- | [student@Fedora14 ~]$ uptime | ||
- | [student@Fedora14 ~]$ who | ||
- | [student@Fedora14 ~]$ w | ||
- | [student@Fedora14 ~]$ exit | ||
- | </code> | ||
- | |||
- | volvemos al ubuntu | ||
- | |||
- | {{:sad:ubuntu:p9:09.png?400|}} | ||
- | |||
- | print de pantalla | ||
- | |||
- | <code bash> | ||
- | student@ubuntu12:~.ssh$ ssh -i /home/student/.ssh/id_rsa student@192.168.1.107 "uptime" | ||
- | student@ubuntu12:~.ssh$ ssh -i /home/student/.ssh/id_rsa student@192.168.1.107 "uname -a" | ||
- | student@ubuntu12:~.ssh$ ssh -i /home/student/.ssh/id_rsa student@192.168.1.107 "echo \"tu nombre\"" | ||
- | </code> | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||