Post

Secure Shell (SSH).

Un pequeño tutorial para aprender a usar SSH.

Que es SSH

Hola en este post les enseñare a como utilizar el protocolo de de Secure Shell (SSH). Para ello necesitaremos saber que es SSH.

SSH es un protocolo que envía comandos de manera segura a un servidor o computadora, a través de la red. SSH cifra y autentica la comunicación punto a punto, también permite la tunelizacion o re direccionamiento de paquetes que de otro modo no podrían cruzar. El protocolo SSH es amplia mente utilizado en la gestión remota de infraestructura y servidores.

Como usar SSH

Para poder utilizar ssh es necesario tenerlo instalado dentro de nuestro sistema operativo, para ello utilizaremos OpenSSH debido a que la implementación de Secure Shell es de código privativo y OpenSSH es una alternativa libre y de código abierto:

Instalacion

  • Windows

Verificamos que no exista una instalación de powershell ya en nuestro sistema operativo:

1
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

La salida que arroja powershell nos indica el estatus del cliente y el servidor:

1
2
3
4
5
Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

Para poder realizar la instalación utilizaremos los siguientes comandos en base a nuestras necesidades, es decir si solo necesitamos conectarnos a otro servidor podemos usar únicamente el cliente, pero si requerimos conectarnos a el equipo utilizaremos también el servidor:

1
2
3
4
5
# Instalar el cliente SSH
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# Instalar el servidor SSH
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Iniciaremos los servicios para OpenSSH:

1
Start-Service sshd

Si queremos que el cliente ssh se inicie al encender el equipo utilizaremos el siguiente comando:

1
Set-Service -Name sshd -StartupType 'Automatic'

Linux La mayoría de distribuciones GNU/Linux ya tienen instalado por defecto el cliente de OpenSSH, por lo que en caso de que lo requieras solo seria necesario instalar el servidor OpenSSH.

Debian/Ubuntu

1
apt install openssh-server

Fedora

1
dnf install openssh-server

Alpine Linux

1
apk add openssh

Arch Linux

1
pacman -S openssh 

OpenSUSE

1
zypper install --no-confirm openssh

Levantar el servicio para el servidor OpenSSH para GNU/Linux

Systemd

1
2
3
4
5
6
#Iniciar el servicio
systemctl start sshd.service

#Habilitar al inicio 
systemctl enable sshd.service

OpenRC

1
2
3
4
5
#Iniciar el servicio
rc-service sshd start

#Habilitar al inicio 
rc-update add sshd

Runit

1
2
3
4
5
#Iniciar el servicio 
sv up sshd.service

#Habilitar al inicio
ln -s /etc/sv/<service> /var/service/

S6

1
2
3
4
5
6
#Iniciar el servicio
s6-rc -u change sshd

#Habilitar al inicio
s6-rc-db default + sshd
s6-rc-update

Uso

Para poder hacer una conexión SSH sera necesario contar con un servidor (IP o Hostname), la sintaxis es la siguiente:

1
2
3
4
5
#ssh la llamada al programa
#user el usuario dentro del servidor
#@ indica el redireccionamiento
#IP o Hostname es la direccion del servidor
ssh <user>@<IP or Hostname>

Ejemplo:

1
ssh operator@10.10.1.3 

Como generar llaves rsa y ed25519 para ssh

La seguridad es muy importante al momento de utilizar el protocolo SSH por lo que es una excelente practica utilizar llaves generadas por pares con algoritmos como RSA o ed25519 ambos bastante robustos.

RSA

Para crear una llave RSA utilizaremos el siguiente comando:

1
 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Donde:

ArgumentoDescripcion
-tAlgoritmo utilizado para generar la llave
-bTamaño de bits a utilizar
-cCorreo electronico asociado para la llave

ed25519

Para generar una clave ed25519 utilizaremos el siguiente comando:

1
ssh-keygen -t ed25519 -C "your_email@example.com"

Copiar en el servidor

Una vez generada nuestra clave nos genera dos archivos, una llave privada y la llave publica dentro de nuestra carpeta .ssh.

  • Para el caso de Linux se encuentra en /home/<tu usuario>/.ssh
  • Para el caso de Windows se encuentra en C:\Windows\Users\<tu usuario>\.ssh
1
2
3
.
├── id_rsa
├── id_rsa.pub

Solo debe de compartirse la llave publica con el servidor, bajo ningún concepto debe de compartirse la llave privada.

Archivo .config para ssh

Si se utilizan múltiples llaves ssh es una buena practica generar nuestro archivo .config gestionarlas de manera inteligente. Para ello generaremos un nuevo archivo llamado config dentro de nuestra carpeta .ssh el contenido es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Ejemplo para una cuenta de github
Host github.com                     # Este es el alias que le asignaremos.
    HostName github.com             # La direccion a la que apunta
    User git                        # El usuario de github en este caso
    IdentityFile ~/.ssh/id_rsa      # Ruta de la llave privada
    IdentitiesOnly yes              # Indica que solo debe usar la clave especificada en IdentityFile

# Ejemplo para una cuenta de Gitlab
Host gitlab.com
    HostName gitlab.com
    User gitlab
    IdentityFile ~/.ssh/id_gitlab_rsa
    IdentitiesOnly yes

# Ejemplo para un servidor o infraestructura
Host aws.prod1.global.mobile
    HostName 52.55.222.44
    User certops
    IdentityFile ~/.ssh/id_aws_glomo_rsa
    IdentitiesOnly yes

Copiar archivos con SCP

SCP (Secure Copy Protocol) es un comando que nos permite hacer una copia segura a través de SSH entre dos clientes o servidores. La sintaxis esta dada de la siguiente manera:

1
2
3
4
5
#File es el archivo o directorio a compartir 
#User es el usuario ssh para realizar la conexion
#Host es el cliente o servidor destino
#Path es la ruta dentro del servidor o cliente donde se almacenara el archivo
scp <file> <user>@<host>:<path>

Ejemplo

1
scp linux-zen-kernel.tar.gz operator@10.10.1.3:/home/operator/Downloads

Donde:

ArgumentoDescripcion
linux-zen-kernel.tar.gzArchivo
operatorusuario que corresponde al servidor 10.10.1.3
10.10.1.3IP del servidor o cliente
/home/operator/DownloadsRuta donde sera almacendo el archivo

Troubleshooting

Dentro de los errores mas comunes existe el equivocarse al colocar la contraseña al ingresar por SSH. Por lo que para solucionarlo el siguiente comando es de utilidad:

1
ssh-keygen -R <host>

Ejemplo:

1
ssh-keygen -R 10.10.1.3

Donde:

ArgumentoDescripcion
-RElimina el host dentro del archivo know_hosts
10.10.1.3Host a eliminar

Importante

Este post se seguirá actualizando a manera de robustecer la información proporcionada.

This post is licensed under CC BY 4.0 by the author.