conexión segura ssh para la RaspberryPi(FreeBSD,Linux)
Tags: security, freebsd, linux, ssh
Published: 2021-11-14 03:46:12

**OpenSSH SSH client**(SSH) es un protocolo de administración remota que le permite a los usuarios controlar y modificar sus servidores remotos a través de Internet a través de un mecanismo de autenticación.

La conexión SSH está cifrada de extremo a extremo además de necesitar una autenticación para poder conectar al servidor. SSH funciona de manera similar a Telnet, pero al contrario que este, con SSH todos los datos que se envían desde el cliente al servidor, y los que se reciban desde el servidor al cliente viajan cifrados para que nadie pueda interceptar la información dotando de una capa extra de seguridad con respecto a Telnet.

Este tutorial de SSH cubrirá los conceptos básicos de cómo funciona, junto con las tecnologías subyacentes utilizadas por el protocolo SSH para ofrecer un método seguro de acceso remoto.

## ¿Cómo ingresamos mediante SSH?
abrimos el emulador de terminal del DE(Desktop Environment) o WM(Window Manager) que usemos:

aplicamos el siguiente comando:
```bash
ssh $USER@$HOST
```
`$USER -> username el cual nos vamos a conectar`
`$HOST -> ip el cual nos vamos a conectar`.

*Aquí vamos a destacar que no podremos ingresar con root y solo se podra entrar con un username el cual vamos a permitir tener acceso a ssh*.

### Paso 1: Configurar el archivo sshd_config
El archivo **sshd_config** se encuentra en la ruta `/etc/ssh/sshd_config`, con nuestro editor de texto favorito lo abrimos:

```
Editores:
nano
vim
emacs
vi ☑
```
En este caso vamos a usar **vi** como editor de texto para configurar pero puedes usar el que más les guste.

escribimos lo siguiente en la terminal:
```
# -> root
$ -> user
```
`# vi /etc/ssh/sshd_config`

una vez dentro desmarcamos (#) a **Port** y agregamos **allowuser** para permitirle a ssh solo entrar por ese usuario, también desmarcamos **AuthorizedKeysFile**, **PasswordAuthentication**, **PermitEmptyPasswords** y **ChallengeResponseAuthentication**
```
# quitamos (#) de port
Port 22
#add allowuser
allowuser usuario1
# quitamos (#) y le cambiamos yes por no a los que lo tengan.
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
```
*usuario1 será el username que vamos a permitir conectar por ssh*

####Crear usuario1
**FreeBSD**
En la terminal escribimos el comando:
![Create User](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3ndacovw9ew4wka6owt.png)

**Linux**
`useradd -m -G wheel -s /bin/{bash o zsh} usuario1`
`passwd usuario1`

### Paso 2: Configurar authorized_keys
creamos un archivo con nombre **authorized_key** en la ruta `~/.ssh/`

`vi ~/.ssh/authorized_keys`

*dentro debe ir la key que creaste a la máquina que quieres conectar a la raspberry pi, de lo contrario no podras conectarte a SSH.

####Creando clave pública para ssh de la máquina que queremos conectar a la raspberry pi.
Con **ED25519**:
`ssh-keygen -t ed25519 -C "correo electronico"`
con **RSA** a 4096:
`ssh-keygen -o -t rsa -b 4096 -C "correo electronico"`.

Abrimos la terminal en la máquina que quermos conectar a la raspberry pi y escribimos:
**ED25519**
`cat ~/.ssh/id_ed25519.pub`
**RSA**
`cat ~/.ssh/id_rsa.pub`
La salida de ese archivo debemos agregarla en la raspberry pi en la ruta:
`vi ~/.ssh/authorized_keys`
una vez todo configurado basta con reiniciar el servicio o reiniciar el sistema.

###Paso 3: Reiniciar servicios de la raspberry pi.
En **FreeBSD**:
`# service sshd restart`
En **Linux**:
con **SysVinit**:
`# service sshd restart`
con **SystemD**
`# systemctl restart sshd.service`
con **OpenRC**
`# rc-service sshd restart`

con esta configuración tendremos una sessión de ssh mejor controlada y limitando a usuario específico.

por último hacemos un reboot(no obligatorio) y desde la máquina que agregamos al **authorized_key** ingresamo el siguiente comando para entrar a la raspberry pi:
```bash
ssh usuario1@ip_usuario1 -p 22
```
si todo funcionó correctamente, al momento de ejecutar este comando no tendras que agregar la contraseña de usuario1. Por que esta configurado con **authorized_keys**.
![SSH](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x15brl3rywy2vjpnzzwx.png)