Bases del sistema operativo

1

Aviso de renovación del curso

2

Lo que aprenderás sobre la administración de servidores linux

3

Distribuciones más utilizadas de Linux

4

Instalación de Ubuntu Server

5

Instrucciones para instalar CentOS

6

Gestión del árbol de directorios

7

Diferencias entre LESS, CAT, HEAD y TAIL para lectura de archivos

8

Interacción con archivos y permisos

9

Conociendo las terminales en linux

10

Manejo y monitoreo de procesos y recursos del sistema

11

Monitoreo de recursos del sistema

Instalación y manejo de software en Linux

12

Análisis de los parámetros de red

13

Administración de paquetes acorde a la distribución

14

Manejo de paquetes en sistemas basados en Debian

15

Administración de software con YUM y RPM para CentOS

16

Nagios: Desempaquetado, descompresión, compilación e instalación de paquetes

Administración de usuarios

17

Los usuarios, una tarea vital en el proceso de administración del sistema operativo

18

Creando y manejando cuentas de usuario en el sistema operativo

19

Entendiendo la membresía de los grupos

20

Usando PAM para el control de acceso de usuarios

Servicios en el sistema operativo

21

Autenticación de clientes y servidores sobre SSH

22

Configurando DNS con bind

23

Arranque, detención y recarga de servicios

24

NGINX y Apache en Ubuntu server

25

Instalación y configuración de NGINX

26

¿Qué es NGINX Amplify?

27

NGINX Amplify: Instalación y configuración de un servidor para producción

28

Monitoreo de MySQL con Nagios

29

Configuración de Nagios

30

Los logs, nuestros mejores amigos

31

Otros servicios de logs

Bash scripting

32

Las bases de bash

33

Las variables y su entorno de ejecución

34

Automatizando tareas desde la terminal

35

Automatizando la copia de seguridad

36

Crontab

Asegurando tu servidor

37

Entendiendo la gestión de vulnerabilidades

38

¿Qué es una superficie de ataque? Principio del menor privilegio

39

El firewall y sus reglas

40

Escaneo de puertos con NMAP y NIKTO desde Kali Linux

41

Lynis: Herramientas de auditoria de seguridad en Linux

Proyecto

42

Configuración de Node.js en un ambiente productivo

43

Configuración de NGINX para la aplicación de Node.js

Bonus: Linux en Azure

44

Aprende sobre Linux en Azure

45

Despliegue de una aplicación web MEAN

46

Crea una máquina virtual en la nube de Azure

Conclusiones

47

Lo que aprendiste sobre servidores linux

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

2D
3H
26M
11S

Autenticación de clientes y servidores sobre SSH

21/47
Recursos

SSH es un protocolo que nos ayuda a conectarnos a nuestros servidores desde nuestras máquinas para administrarlos de forma remota. No es muy recomendado usar otros protocolos como Telnet, ya que son inseguros y están deprecados.

Con el comando ssh-keygen podemos generar llaves públicas y privadas en nuestros sistemas, de esta forma podremos conectarnos a servidores remotos o, si es el caso, permitir que otras personas se conecten a nuestra máquina.

Para conectarnos desde nuestra máquina a un servidor remoto debemos:

  1. Ejecutar el comando ssh-copy-id -i ubicación-llave-pública [email protected]ón-IP-servidor-remoto y escribir nuestra contraseña para enviar nuestra llave pública al servidor.
  2. Usar el comando ssh [email protected]ón-IP-servidor-remoto para conectarnos al servidor sin necesidad de escribir contraseñas.

También podemos usar el comando ssh -v ... para ver la información o los errores de nuestra conexión con el servidor. Puedes usar la letra v hasta 4 veces (-vvvv) para leer más información.

Las configuraciones de SSH se encuentran en el archivo /etc/ssh/sshd_config.

Aportes 123

Preguntas 51

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

RESUMEN DE LA CLASE
|
Autenticación de clientes y servidores sobre SSH
|
|
SSH: Secure Shell, es un protocolo que permite conectar dos computadoras de forma remota sin necesidad de un password, únicamente con la interacción de una llave pública y una llave privada (aunque podemos colocar una contraseña sobre las llaves)
|
|
Configuración
|

  1. En el servidor, abrir el archivo /etc/ssh/sshd_config con algún editor. Leer el archivo y configurar a gusto.
  2. En la consola de la máquina cliente abrir ssh-keygen para generar las llaves
  3. Elegir ubicación para guardar la llave privada
  4. Ejecutar ssh-copy-id -i directorio_de_llave/id_rsa.pub [email protected]_ip_del_servidor para copiar la llave pública al servidor
  5. Ejecutar ssh [email protected]_ip_del_servidor en la máquina cliente para conectarnos exitosamente de forma remota

|
|
Tips
|

  • En lugar de descargar Putty en Windows podemos utilizar el emulador de consola Unix llamado Cmder para ejecutar los comandos vistos en clase. Incluso si esto falla, lo que personalmente recomiendo es instalar un subsistema de linux si tenemos Windows 10. Platzi tiene incluso un artículo sobre como hacer eso: https://platzi.com/clases/1378-python-practico/19200-importante-instalando-ubuntu-bash-en-windows-para-/
  • Si la conexión falla, podemos usar el modificador -v (verbose) en el comando ssh para poder ver la información que envían las máquinas que intentan conectarse. La “v” puede repetirse hasta cuatro veces, quedando el comando, por ejemplo, como: ssh -vvvv [email protected]_ip_del_servidor. A mas “v” pongamos, más información se mostrará
    |
    |
    BONUS
    |
    Reto: Restringir el acceso al usuario root por ssh, y permitir solo un usuario determinado conectado
    |
    Solución:
    |
  1. Colocar en el archivo /etc/ssh/sshd_config del servidor las siguientes líneas:
PermitRootLogin no
AllowUsers nombre_usuario
  1. Ejecutar el siguiente comando para reiniciar el servicio de ssh:
sudo service sshd restart

Con Windows Solucionado
Sino te funciona porque estas usando Windows aquí la solución:

*Descargamos git para windows, que es una terminal de donde podemos usar comandos de linux https://git-scm.com/download/win
*Abrimos Git Bash lo instalamos en el paso anterior
*Ejecutamos lo siguiente para generar la llave ssh-keygen -b 4096 -t rsa
*Tendremos que presionar 3 veces “Enter” para dejarlo predeterminado.
*Listo ya generamos la llave, ahora enviamos la llave publica a nuestro servidor
*Ejecutamos en la misma terminal ssh-copy-id [email protected] La IP de tu servidor puede ser distinta Puedes verla dando ifconfig del lado del servidor.
*Ingresamos la contraseña de platzi
*Listo ya tendríamos que poder conectarnos por SSH sin contraseña
*Damos exit para salir de la terminal
*Ahora nos conectamos de nuevo al servidor
*ssh [email protected]
*Listo, no tendría que pedirte la contraseña

Bueno… es verdad que nos deben dar una orientación de como hacer algo… **pero que nos digan que ya lo tengo hecho no lo voy hacer… creo que esta mal… **… Aquí en este tema falto muchos otros aspectos por abordar…

hay que agregar en /etc/ssh/sshd_config
PermitRootLogin no
AllowUsers <nombre de usuario>
o si se quiere agregar un grupo
AllowGroups <nombre del grupo>
// Tambien se puede denegar el acceso con DenyUsers o DenyGroups

En el caso que hayan guardado la llave en ~/.ssh/ con un nombre diferente al por default, digamos llave_curso, el comando a utilizar para conectarse sería el siguiente:

ssh -i ~/.ssh/llave_platzi platzi@192.168.10.186

IMPORTANTE: cuando no trabajan con el nombre por default, señalar el nombre de la llave, de otra forma buscará archivo de nombre id_rsa y dar con esto les tomará tiempo y un par de dolores de cabeza 😉

Todo expuesto de una forma muy genérica y dando por supuesto muchos conocimientos.

https://www.youtube.com/watch?v=2TLqfsPOYCc&t=185s
Banda que usa Windows, sigan este tutorial al pie de la letra, tal y como lo marcan, para poder hacer la conexión remota usando Putty

reto completado 🤠
en el archivo sshd_config del servidor añadí la siguiente línea
PermitRootLogin no
despues reincicie el servidor con
sudo service sshd restart
trate de ingresar por consola en mi cliente pero no me permitió el acceso.

🦄Bro… es normal que me haya sentido tan bien cuando logré conectar mi WSL con el servidor? jajsjjs✨

Lo que son los sesgos, Ya leo Keygen y esto me recuerda a Software Pirata.

me resulta muy confuso alternar entre Centos y Ubuntu en tre clase y clase Hubiese sido mejor que se enfocaran en uno solo.

que tema mas complejo para pretender explicarlo en una clase. quedense con la idea de que SSH es un protocolo de red que encripta informacion entre un usuario y su servidor con una doble llave donde el ususario asegura la informacion, la envia al servidor, este la aseura tambien y la retorna al ususario, el cual al verla ya asegurada por el servido la libera de su seguridad y queda la informacion bajo responsabilidad del servidor. no se maten la cabeza tratando de hacer los ejercicios del profesor porque se requieren otros recursos, como maquina virtual u otro pc o algo. ahi se quedo corto el profesor en no especificar esas cosas

sudo vi /etc/ssh/sshd_config
No permitir logueo con root
PermitRootLogin no
habilitar solo usuario
AllowUsers NOMBRE_USUARIO
Habilitar usuarios de grupo específico
AllowGroups NOMBRE_GRUPO
Denegar acceso a usuario
DenyUsers NOMBRE_USUARIO
Denegar acceso a todos los usuarios de un grupoi
DenyGroups NOMBRE_GRUPO

Vengo del curso de introducción a la terminal y línea de comandos, me parece que esta clase y también el curso ayudan mucho y por supuesto nutren el conocimiento aprendido con esta parte del otro curso, ¡recomendado!

el link de Marino es de otro curso y está genial!
https://platzi.com/clases/1650-prework/21958-crea-llaves-ssh/

Si se tiene que hacer a mano, se tiene que realizar de la siguiente manera

  1. crear llave publica ssh-keygen -t rsa -b 4096 -C "comentario" el comentario es importante si manejas muchas ssh keys.
  2. copiar la llave publica. En windows usando git bash clip < ~/.ssh/nombre-llave.pub pone el nombre de la llave que generaste.
  3. Ir al servidor ssh [email protected]
  4. Generar la carpeta ssh con mkdir ~/.ssh
  5. Asignarle permisos chmod 700 ~/.ssh
  6. crear en ~/.ssh el archivo authorized_keys con touch ~/.ssh/authorized_keys
  7. Asignarle permisos chmod 600 ~/.ssh/authorized_keys
  8. abrir con vim ~/.ssh/authorized_keys y pegar nuestra llave. En vim se guarda con apretando escape y luego tipear !wq
  9. salimos con exit
  10. probamos conexion ssh [email protected]

En windows a veces no toma el agente ssh las llaves que generamos, por eso es conveniente realizarlo a mano. Vamos a nuestro usuario C:\users\nuestro-usuario y generamos un archivo .bashrc aqui pegamos lo siguiente:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/llave-privada

Cuando abras git bash te va a aparecer el mensaje de que se agrega la llave al agente.

[Reto-01] Deshabilitar el acceso de la cuenta “root”:
a) Editar el archivo “sshd_config”:
sudo nano /etc/ssh/sshd_config
b) Asignar el valor “no” al parametro “PermitRootLogin”:
PermitRootLogin no
c) Reiniciar el servicio “ssh” :
sudo systemctl restart sshd

[Reto-02] Restringir el acceso remoto ssh a la cuenta “platzi”:
a) Editar el archivo “sshd_config”:
sudo nano /etc/ssh/sshd_config
b) Asignar el valor “platzi” al parametro “AllowUsers”:
AllowUsers platzi
c) Reiniciar el servicio “ssh” :
sudo systemctl restart sshd

Otro tip, para el caso de que manejen numerosas conexiones a servidores linux por ssh, manejar un archivo config les hará la vida un poco más sencilla, acá les dejo la clase (del curso anterior) donde tratan el tema!

#ques SSH#
SSH es el acrónimo de Secure Shell, y es un protocolo que se utiliza en el manejo de servidores de forma remota, permitiendo a un usuario realizar toda clase de tareas sobre el mismo. En las conexiones realizadas por medio de SSH, toda la información viaja de forma encriptada , lo cual lo convierte en uno de los medios más seguros a la hora de trabajar en un servidor…

me sirvió este de youtube :
https://www.youtube.com/watch?v=FpGulmL0Lq4

Como estaba haciendo los ejercicios en una instancia de ubuntu en AWS no sirve el comando para copiar la llave publica, sin embargo use el siguiente comando para enviar la llave publica creada en mi maquina huésped a la maquina de AWS
cat ~/.ssh/id_rsa.pub | ssh -i aws.pem [email protected]_address "cat - >> ~/.ssh/authorized_keys"

en maquinas windows ejecutando los comandos en la power shell ssh-keygen funciona igual que en el video.

Me gustaría comentar que pueden encontrar dos archivos muy parecidos pero diferentes dentro del directorio /etc/ssh, los cuales son:

  • ssh_config. Define la configuración del cliente SSH, es decir, lo que SSH consulta cuando realiza conexiones desde la máquina anfitriona hacia el exterior.
  • sshd_config. Define la configuración del demonio SSH, es decir, aquel servicio que constantemente está escuchando conexiones SSH entrantes y que recoge la configuración de este archivo cuando suceden conexiones desde el exterior hacia la máquina anfitriona. Los clientes deben tener un archivo de configuración de cliente (ssh_config) que sea compatible con este.

Yo en windows lo hice en desde la consola de powershell 7 y alli los comandos para crear la clave de ssh y conexion funcionan bien, el unico que me dio problema fue el envio de la clave publica pero ese envio lo pueden hacer con este comando

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh [email protected]192.168.0.1 "cat >> .ssh/authorized_keys"

y asi no instalan muchas cosas externas

SSH tiene muchas aplicaciones diferentes:

  • Gestión de servidores a los que no se puede acceder localmente
    Transferencia segura de archivos

  • Creación de copias de seguridad

  • Conexión entre dos ordenadores con encriptación de extremo a extremo

  • Mantenimiento remoto desde otros ordenadores

SSH es un protocolo que nos ayuda a conectarnos a nuestros servidores desde nuestras máquinas para administrarlos de forma remota. No es muy recomendado usar otros protocolos como Telnet, ya que son inseguros y están deprecados.

Hola. Estuve intentando hacer el reto desde ubuntu server. Mi lógica es la siguiente: En ubuntu no esta habilitado el usuario root como tal. Es decir, cuando quieres actualizar puedes poner la contraseña de root para que se ejecute. Normalmente yo al instalar un servidor siempre creo el primer usuario con el nombre de administrador. Este usuario tiene el privilegio de root desde inicio y cuando yo ejecuto una actualizacion, ubuntu siempre me pide poner la contraseña. Usualmente yo administro los servidores de linux que monto, así que no he tenido necesidad de crear diversos usuarios para conectarse más que cuando habilito samba pero solo para compartir carpetas. En este caso no fue la excepción. Sin embargo, ante tal escenario, cuando me conecto por ssh con mi usuario, aunque yo habilite la opción PermitRootLogin no, las actualizaciones si me las permite hacer o cualquier cosa que implique privilegios de root. Esto se debe a que mi usuario ya pertenece de inicio al grupo sudo y como ya lo comente, ubuntu no tiene habilitado el usuario root por defecto así que en teoría esa opción no funciona pues no me conecto como root.

Lo que aplique en este caso fue crear un usuario nuevo y este a su vez queda disponible para darle acceso a los grupos que se requieren. Como en este caso se requería que no tuviera acceso como root, simplemente no lo añadi al grupo de sudo. Con la opción AllowUsers se pueden agregar los usuarios capaces de conectarse vía ssh. Esto es bueno si quieres tener esa restricción, pero no para evitar que el usuarios no pueda actuar como root en tanto siga dentro del grupo sudo

otra maravilla de ssh es que podemos correr comandos en servidores remotos
ssh [email protected] COMANDO
y también podemos encadenar conexiones, por ejemplo si el servidor de producción solo acepta conexiones SSH desde los servidores en su misma RED podemos entrar por ssh a uno de estos y desde este hacer ssh o bien podemos establecer un tunel para conectarnos directamente

  1. abrir tunel y dejamos corriendo un comando para que se mantenga la conexión abierta

ssh -R 22:++DIRECCION_LAN_PRODUCTIVO++:2222 [email protected]++DIRECCION_SERVIDOR_DESARROLLO++ ping -i 30 localhost
2. ya podemos conectarnos al remoto en el puerto local 2222 que fue el que especificamos como puerto local para el puerto remoto 22

ssh -p 2222 [email protected]

También podemos usar el comando ssh -v … para ver la información o los errores de nuestra conexión con el servidor. Puedes usar la letra v hasta 4 veces (-vvvv) para leer más información.

Las configuraciones de SSH se encuentran en el archivo /etc/ssh/sshd_config.

SSH es geniaaaal!

Gracias a esta clase pude conectar mi servidor linux virtualizado a la terminal de mi Mac. Ahora solo utilizo mi terminal de Mac mientras el servidor virtualizado corra.

aaaver
entonces los que somos usuarios Windows tenemos que tener el putty y el puttygen?
y luego primero generamos las llaves con el gen y luego nos logeamos con el putty si?

Me pasé medio día intentando configurarlo en PoweShell desde Windows 10, sin tener que estar escribiendo la contraseña de la llave… pero me rendí…
Probé con Git Bash y quedó en 10 minutos…

Telnet es un protocolo que ocupa el puerto TCP 23. Es inseguro dado que la información es transmitida en texto plano sin encriptar, lo que la hace susceptible a ataques “Man in the Middle”.
SSH es mucho más seguro, ya que incorpora encriptación y llaves públicas y privadas.
Opera en el puerto TCP 22, aunque esto puede ser cambiado.

hola compañeros haca les dejo un enlace para linode con credito de 100 dolares para crear nuestro propio servidor.
es de parte del canal cibersegurida para todos tiene proyectos muy buenos y les dejo el video relacionado con este tema de las keys ssh
video
https://www.youtube.com/watch?v=-r0jyCeqLvs

linode
https://www.linode.com/lp/grin/?utm_source=youtube_Cybersecurity+for+Everyone+-+David+Pereira&utm_medium=influencer&utm_campaign=utm_source-utm-medium&platform=grin&link_id=788259&token=jl6aCBMubv8B9nwEXdIOXArKFA6iZogQ&contact_id=61f3c8be-6380-477d-b07b-45d3e68c54eb&attribution_window=90

Bueno, lamentablemente después de 4 horas de trabajo y de intentar 500 cosas, no fue posible realizar la conexión ssh: yo utilizo WSL y hasta ahora me había permitido realizar todas las actividades. Según investigué hay que activar el “adaptador puente”, pero misión imposible. Tampoco inicia el servicio ssh. No puedo quedarme pegado en esta clase, pasaré a la siguiente con mal sabor de boca.

como no pude utilizar el ssh-copy-id porque tengo maquina windows, utilice cat

cat id_rsa.pub | ssh [email protected]192.168.8.105 "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

A quien le pueda ser útil. Para salir de la sesión SSH debes escribir logout o exit en la consola y listo. Aunque no lo crean estuve diez minutos intentando salir de SSH.

En Windows es sencillo, no se enrollen, solo descargan PUTTY, lo ejecutan y colocan la ip del servidor Ubuntu, les pedirá credenciales y listo.

RETO

En el archivo sshd_config
hice los siguientes cambios:

PermitRootLogin no

y agregué la línea

AllowUsers allowed_user_1

En esta clase el instructor asume que se cuenta con muchos conocimientos previos.
Considero que los supuestos no se deben presentar en material instructivo, ejemplo “como yo ya tengo mis claves no las voy a generar”

Windows 10 desde la versión 1803 viene con un cliente ssh habilitado por defecto el cual usa Open SSH por lo tanto ya no es necesario instalar putty. Esto lo puedes usar desde cmd.exe o powershell.exe

Como así que el ya tiene la llave creada entonces no la realizara, el curso me ha dejado muchas dudas de parte del instructor.

Para usuario de Windows, pueden usar:

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh [email protected]_address "cat >> .ssh/authorized_keys"

Para hacer el copia de su llave pública a su servidor en Linux.

el proceso de ssh-copy-id es una forma automática de añadir nuestra llave pública al archivo authorized_keys del directorio .ssh en el $HOME del usuario al que nos estamos conectando, también se puede hacer de forma manual

Recordemos que la IP del servidor puede ser distinta. Esta la ven en la configuración de red con el comando

ifconfig

Para acceder a este comando hay que tener instalado el paquete “net-tools”

sudo apt install net-tools

Tenemos entre las actuales alternativas de «Administradores de sistemas y servicios para Sistemas» (init systems) para Linux a:

  • openrc
  • runit
  • s6
  • shepherd
  • sinit
  • systemd
  • systemd-shim
  • sysvinit

Porque una de las cualidades de los sistemas linux, es brindar diversas formas de hacer las cosas y diferentes alternativas para diversos gustos o necesidades.

sytemctl es el comando moderno para arrancar o detener servicios, es la opción moderna vs correr directamente los scripts que se encuentran en /etc/init.d/

como sysadmins se tiene que conocer sobre la arquitectura e implementación del arranque en un sistema linux o unix

les recomiendo estas lecturas:

Systemd vs SystemVInit
Linux Init process

A pesar de que systemd esta siendo adoptado como la norma en los entornos linux modernos existe controversia al respecto nada más y nada menos que del mismo creador de Linux

Linus Torvalds, Chief architect of Linux kernel, feels attitude of key developer of systemd towards users and bug reports do not seems ok. It was also reported that systemd philosophy is weird and a foreign way to control system processes. The same has been recorded from Patric Volkerding and other notable Linux Users and Developers as well as over online forum, time-to-time.

en windows la suite con la que instalan git incluye cliente ssh
también si quieren algo más completo para tener los comandos de windows en linux, pueden instalar cygwin, que es una capa de emulación de POSIX en windows y contiene un sistema de paquetes incluyendo bash, php, python, command line tools, postgresql, mysql, cron, apache e incluso algunas aplicaciones gráficas que corren sobre un X server, un X server es el componente que aporta el entorno gráfico en linux (esto no quiere decir ventanas, sino que son primitivas gráficas sobre las que se construyen las toolkits como QT o GNOME y los manejadores de ventanas como los más conocidos que son KDE, GNOME o XFCE, pero también hay algunos que consumen nada de recursos y solo aportan ventanas como fluxbox)

Con el comando ssh-keygen podemos generar llaves públicas y privadas en nuestros sistemas, de esta forma podremos conectarnos a servidores remotos o, si es el caso, permitir que otras personas se conecten a nuestra máquina.

Para conectarnos desde nuestra máquina a un servidor remoto debemos:

Ejecutar el comando ssh-copy-id -i ubicación-llave-pública [email protected]ón-IP-servidor-remoto y escribir nuestra contraseña para enviar nuestra llave pública al servidor.
Usar el comando ssh [email protected]ón-IP-servidor-remoto para conectarnos al servidor sin necesidad de escribir contraseñas.

Tipos de protocolos de red
Los protocolos de red más comunes son:

#Ethernet
#Charla local
#Token Ring
#FDDI
#ATM

herramientas a tener a disposición en caso de trabajar con máq. Windows para conexiones por SSH

alt 126 para el simbolo: ~

ssh-keygen -t rsa -b 4096 -C "this is a key"

Entren a este link para saber como podemos acceder al servidor por SSH, por medio de Windows Powershell : https://www.profesionalreview.com/2018/11/30/ssh-windows-10/

Reto completado, para los que lo estan haciendo desde Ubuntu a CentOs lo que tienen que hacer es escribir el siguiente comando

sudo vi /etc/ssh/sshd_config

oprimen i

buscan la palabra Authentication abajo de ella estara
PermitrootLogin no

en caso de que este si escriben no

y para añadir a un usuario buscan la palabra AllowUsers en el archivo, SI NO LO TIENEN NO SE PREOCUPEN.
al final del archivo pongan AllowUsers nombre de tu usuario

y listo es todo muchachos espero haberles sido de ayuda

Esta clase si que me gusto, mucho que aprendi aqui

Si te encuentras en el 2023 y tienes problemas para enviar las llaves y te encuentras en una maquina virtual (al igual que yo), intentatalo desde Git Bash, instalalo y utiliza el siguiente comando en la terminal (nota: debes de crear las llaves en Git, en el curso de Git & GitHub. aqui mismo en platzi, lo explican y este es el link (https://platzi.com/clases/1557-git-github/19950-configurar-llaves-ssh-en-github/
https://platzi.com/clases/1557-git-github/19949-como-funcionan-las-llaves-publicas-y-privadas/):

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]+ip

Tu ip la obtines con el comando ifconfig desde tu servidor, pero si te sale el siguiente error:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

  /usr/bin/ssh-copy-id: ERROR: ssh: connect to host my.ip.x.x port 22: Connection timed out

no te desesperes solo en tu servidor tienes que abrir el puerto 22 de la siguiente manera:

Sudo ufw allow 22

luego reinicia ssh con este comando:

Sudo service ssh restart 

Si algo no te quedo claro te dejo el siguiente link donde se explica de mejor forma:

https://askubuntu.com/questions/787763/error-when-copying-public-key

Espero sea de tu ayuda y Gracias por leer la posible solucion!

Hola, para los que deseen utilizar un sistema parecido al PowerShell para la administración de sistemas Linux y Windows pueden usar MobaXterm es un sistema ideal si te gusta navegar entre pestañas, pueden descargarlo aquí: https://mobaxterm.mobatek.net

Si al momento de crear la llave con ssh-keygen la guardaron en otro archivo diferente a ~/.ssh/id_rsa, tienen que pasar la ubicación de la llave con el parámetro -i tanto al momento de copiarla al server como cuando se conectan.

# Copiar la llave al servidor
ssh-copy-id -i <path/to/key> <user>@<host>
# Conectarse con la llave
ssh -i <path/to/key> <user>@<host>

Ejemplo si mi llave es ~/.ssh/id_rsa_platzi:

# Copiar la llave al servidor
ssh-copy-id -i ~/.ssh/id_rsa_platzi [email protected]
# Conectarse con la llave
ssh -i ~/.ssh/id_rsa_platzi [email protected]

Las llaves son para autenticarse. La llave publica desencripta todo lo que la llave privada encripte y viceserva, entonces, si el servidor tiene la llave publica, podra verificar si yo soy el que está mandando ciertos mensajes porque solo yo puedo encriptar esos mensajes con mi privada y el servidor los puede descifrar con la publica

Ademas de Putty, un buen software para conexion por SSH es el SecureCRT. Yo lo uso en mi trabajo.

reto bloquear el estado root y que un solo usuario tenga acceso especiales

Si estas en wsl
Instala

sudo apt-get install openssh-server

Posteriormente utiliza el comando

sudo systemctl enable ssh

Verifica que tu servicio ssh este corriendo

 sudo service ssh status    

Activalo con

 sudo service ssh start

[En windows]
Apóyate de las herramientas que has utilizado en los cursos anteriores. O en su defecto instala git para obtener gitbash

Genera la llave con git bash, por favor no olvides que esto es con git bash no con CMD de windows

ssh-keygen

deja la ruta por defecto, por comodidad luego de generarlo yo utilizo cd .ssh para ingresar a la carpeta

ssh-copy-id -i ./id_rsa.pub [email protected]

Nota: tienes que obtener la ip con ifconfig en tu linea de comandos de linux

Logueate!!!

ssh [email protected]ip

Si tienes problemas para conectarte
ssh -vvv puedes ver logs para verificar el track de los errores

ssh -vvvv [email protected]ip

muy buen curso

exelente expplicacion gracias

Llaves Publicas y Llaves Privadas

lo logre con wsl y multipass generando un usuario adicional en la maquina virtual de multipass ya que por alguna razon no podia conectarme con el usuario principal me daba un error al momento de introducir contraseña ya que ese usuario lo genera el multipass por defecto sin contraseña, tambien intente generarle una contraseña pero tampoco funciono, luego hise un adduser en esa maquina y con ese usuario logre conectarme desde WSL se me fue toda la tarde en esta clase jaja

Recomiendo que le den una probada a cygwin, es un poderosisimo POSIX-compatible ambiente que permite correr comandos unix-like muy facil.

Solo busquen cygwin en google y ya.

Pueden instalar basicamente cualquier comando que corre en linux, por ejemplo, ssh, python, hasta software como terminator, imagemagick, bash, zsh, etc. no se necesita de compljo software para inicial/usarlo.

nunca he usado putty, siempre uso ssh con el update mas reciente.

Cygwin, muy recomendado (llevo usandolo mas de 10 años ya).

Para los que estén haciendo la configuración desde ubuntu wsl para windows y les aparezca que el host está caído:

sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig

sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target

exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME

snap version

Se puede usar la misma llave publica para CentOS tambien.
ssh-copy-id -i <direccion_key_publica> [email protected]

Excelent

En mi caso intenté ingresar como usuario root y obtenía un permiso denegado, asi que lo que hice fue lo contrario, permitir el acceso, añadiendo en el mismo archivo sshd_config las siguientes lineas

PermitRootLogin yes
PubkeyAuthentication yes

luego para denegar el acceso nuevamente basta con poner ‘no’ en cualquiera de las dos

con el siguiente comando pueden instalar el cliente y servidor ssh en distros, basadas en debian > sudo apt-get install openssh-server openssh-client

Yo tuve un problema con el ssh-copy-id, mi sistema no reconocia el comando, en lugar de usar ese comando use el siguiente:
scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys y me funciono correctamente.

En las ultimas versiones de Windows ya viene instalado el cliente openssh por defecto y lo pueden usar en cmd.exe o powershell.exe.

En caso que no activo es habilitarlo en las “Caracteristicas opcionales” y luego “Agregar una caracteristica.”

Si usan ubuntu server el ip lo encontraran usando el comando
ip a
copiar inet…

Para los que usen una Virtual Box en Windows y quieran conectarse por SSH por Putty y no saben como enviar la Clave pública aquí les dejo tuto:

Para conectarse por NAT deben ir a:
*Configuración=>Red=> Conectado a: NAT =>Avanzadas=>Reenvio de puertos=>Agregar
Name Protocol Ip anfit port anf ip inv por inv
SSH TCP 127.0.0.2 2222 10.0.2.15 22

La palabra en ingles “deprecated”, traduce obsoleto. recuerden que hay sistemas como el nombrado en el video el Telnet que ya es obsoleto. Lo recomendado es usar SSH.

CONECTARSE DESDE WINDOWS A UN SERVIDOR “UBUNTU SERVER”

Crear una llave privada y publica en Windows | Conectarse al servidor de Ubuntu Server

1ro: Verificar que estas en esta direccion: C:\Users\user

$ pwd

2do: Crear la llave privada y publica (por defecto se creara la llave) sin contrasena

$ ssh-keygen

3ro: Verificamos si se creo las llaves en el directorio ~/.ssh de Windows

$ cd ~/.ssh

4to: Copiamos la llave publica de Windows al servidor de Ubuntu Server

$ scp C:\Users\user\.ssh\id_rsa.pub [email protected]<direcion IP servidor>:/home/user/.ssh/authorized_keys

5to: Nos conectamos por SSH desde Windows a Ubuntu Server

$ ssh [email protected]<direcion IP servidor>

Para copiar la llave ssh desde un mac al servidor, deben aplicar el comando

cat ~/.ssh/id_rsa.pub | ssh username@server.dreamhost.com "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

Pueden leer más acerca de este comando en la url: https://help.dreamhost.com/hc/es/articles/216499537-Como-configurar-inicio-de-sesión-sin-contraseña-en-Mac-OS-y-Linux

Para los que intenten configurar las llaves en el cliente de SSH desde WSL, van a tener que echar mano de trucos para poder echar a andar la utilidad systemctl, ya que como dice este post, WSL no arracanca el PID 1 con systemd, sino con su propio procedimiento /init.

Tuve problemas para copiar la llave al server desde un mac.

[email protected] ~ % ssh-copy-id -i ~/.ssh/id_rsa [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/Users/felipe/.ssh/id_rsa.pub”
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keys
[email protected]: Permission denied (publickey).

Para solucionar esto hay un paso intermedio que no se mencionó. Despues de modificar el archivo
/etc/ssh/ssh_config
en el server, es necesario reiniciar el servicio para que acepte la nueva configuración:

service sshd restart

Y definitivamente para no acceder a root mediante:

sudo su -

desde un usuario con privilegios de sudo, editamos el archivo:

sudo vim /etc/passwd

editamos la linea:

root:x:0:0:root:/root:/bin/bash

o donde se encuentre el usuario root y solo modificamos la shell a utilizar (/bin/bash), quedando como:

root:x:0:0:root:/root:/usr/sbin/nologin

aqui un tutoria cortito para hacerlo con PUTTYgen y logearse con putty desde windows: https://devops.ionos.com/tutorials/use-ssh-keys-with-putty-on-windows/

Momento de subida de clave publica a servidor remoto para conexión SSH

Hoy es innecesario usar clientes como putty en Windows

Windows suele incluir un cliente ssh, y el server es facil de instalar.

Con solo usar ssh en Powershell o CMD como en linux o mac debería funcionar.

para mayor seguridad la clave ssh se puede crear con 4096 bits y ponerle una contraseña a la llave privada, tambien podemos modificar en la configuracion ssh del servidor para que soporte 2fa con google authenticator y asi cada vez q nos vayamos a loguear en un servidor en internet nos pida ademas de la llave un codigo 2fa.

Esa tipografía me recordó un computador de los 70

SSH:
Protocolo seguro para conectarte en el server (Secure shell)
configurar el servicio ssh:

/etc/ssh/sshd_config ---> archivo de config

en la consola de usuario.
si no has generado las claves ssh, debes generarlas con

ssh-keygen

Luego de generarlas, estas se almacenan en ~/.ssh
Quedan dos llaves, la privada y la publica, la privada no tiene extension y la publica tiene extension .pub
Posteriormente hay que pasarla al server, que en mi caso seria asi:

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]192.168.0.19

y a partir de ese momento no hace falta colocar las claves mas.
Para quitar estra propiedad, en el archivo de configuracion debemos cambiar.

PasswordAuthentication no 

siempre hay que reiniciar el servicio para

sudo systemctl restart ssh

sudo systemctl status ssh --> verificar status

en ssh cuando vamos a logearnos , podemos controlar el verbose de el proceso, colocando -v
(podemos colocar de 1 a 4 v , cuando coloquemos el -v, mientras mas v haya, mas datos da, sirve para ver los logs.)

ssh  -vvvv  [email protected]192.168.0.19

para prohibir el acceso de otros usuarios, y solo permitir uno seria, en el archivo /etc/ssh/sshd_config:
(Asumiendo que solo quiero permitir al usuario anthony)

AllowUsers anthony

y me creo un usuario de prueba para intentar entrar:

sudo adduser anthony_prueba

y hacer pruebas con ese .
y no permitir el Root login, en el archivo de configuracion, seria:

PermitRootLogin no

En mi caso yo generaro las llaves ssh con un opción que me da una capa extra de encriptación y es de la siguiente manera:

$ ssh-keygen -t rsa -b 4096

Sabemos que -t rsa es por defecto la capa extra de encriptación se generaría con -b 4096 .

Saludos y feliz aprendizaje.

Para restringir el acceso al usuario root, descomentamos
la siguiente linea.

PermitRootLogin no

para definir un maximo de conexiones

MaxSessions 3

Permitir el acceso a ciertos usarios

AllowUsers mobileuser1 mobileuser2 *@10.0.0.0/8

Reto: A la máquina virtual no se puede conectar ni root, ni braulio, solo nodejs sin necesidad de contraseña.

En windows seria:

Abrir powershell

ssh-keygen.exe

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh {IP-ADDRESS-OR-FQDN} "cat >> .ssh/authorized_keys"

Y listo 😄

instalación y copia de la llave publica al servidor desde terminal de otra maquina en la red

Dejo por aquí un pequeño apunte:

En el caso del video la comunicación es únicamente en esa dirección, es decir, puedes acceder a través de ssh sin contraseña a tu target que en este caso será la máquina virtual que tengas. Pero para esto debes generar tú las claves en tu ordenador anfitrión.

Key_generator_host --ssh–> target host

Sin embargo, se puede realizar de otra forma ya que yo tengo un Windows y mi máquina virtual de Ubuntu está en un VirtualBox y no me apetecía ejecutar el comando ssh-keygen desde Windows ya que no me gusta windows 😃 . Yo utilizo MobaXterm para conectarme a la máquina de Ubuntu, pero vale cualquier otro programa (p.e.:Putty)

Lo que hago es relativamente simple salvo por un matiz:

  1. Ejecuto en el target (al que me quiero conectar) el siguiente comando: ssh-keygen y genero las claves pública y privada

  2. MobaXterm me permite crear una sesión sftp para descargarme la clave privada generada que vendrá en .ssh/id_rsa . Esa clave la guardo en una carpeta de mi windows y la añado en la configuración avanzada de moba al configurar una sesión

  3. Por último en el target debo de ejecutar los siguientes comandos:
    cat ./ssh/id_rsa.pub >> ./ssh/authorized_keys
    chmod 600 ./ssh/authorized_keys

    En este último paso estariamos creando un fichero con todas las claves públicas en el target que permitan la conexión a través de ssh sin contraseña sabiendo, claramente, que el que realiza la conexión ssh tiene la clave privada

Espero que sirva
😄

Muy muy buen video curso

ssh-copy-id [email protected]_host