SSH

De Kyngopedia
Saltar a: navegación, buscar

El protocolo Secure Shell (o SSH) sirve para crear un túnel seguro entre dos hosts, usando cifrados de clave pública y privada. Puedes cifrar casi cualquier comunicación a través de este protocolo.

Instalación

# Debian
sudo apt install openssh-server # poniendo "ssh" a secas también va
# Arch
sudo pacman -S openssh

Configuración

El servidor SSH cuenta con un archivo para su configuración, éste se halla normalmente en la ruta /etc/ssh/sshd_config. NOTA: No confundir con ssh_config, ya que es la configuración del cliente, y por norma general no hay que tocar nada, ya que todo funciona bien.

Algunos de los parámetros del fichero son:

  • Port: Especifica el puerto del servidor SSH
  • Protocol: Especifica la implementación del protocolo a usar (versión 1 o versión 2)
  • HostKey: Contiene los ficheros con las claves del servidor
  • PermitRootLogin: Indica si permites el acceso de root o no
  • PermitEmptyPasswords: Permite el uso de contraseñas en blanco (no recomendado)
  • KerberosAuthentication: Permite configurar la autenticación con Kerberos
  • X11Forwarding: Redirección de X11 para usar aplicaciones gráficas a través de SSH
  • Banner: Permite mostrar en la pantalla de login el contenido de un fichero

También podemos hacer políticas de usuarios:

  • AllowUsers
  • DenyUsers

O de grupos:

  • AllowGroups
  • DenyGroups

Especificando los usuarios o grupos en cuestión. Nota: Si especificamos un usuario en AllowUsers se denegarán todos los otros. Si añadimos uno en DenyUsers todos los otros serán válidos, y así con los grupos también.

Uso

El comando ssh funciona con una serie de parámetros bastante interesantes. A continuación una explicación de algunos de ellos:

  • -p - Especifica el puerto del servidor SSH.
  • -D [host:]puerto - Especifica un puerto en local para crear una conexión SOCKS.
    • ssh user@host -D 12345
    • Si tú ahora configuras tu navegador web para que use un proxy socks con dirección del servidor 127.0.0.1 y puerto 12345 te permitirá tener conexión cifrada a internet a través del host al que te conectes. Se suele usar para evitar proxys o conexiones censuradas.
  • -L puerto1:host:puerto2 - Sirve para crear un túnel a un host remoto usando un puerto local.
    • ssh user@host -L 12345:192.168.50.20:5900
    • Si nos conectamos por VNC a localhost:12345 estaremos conectándonos en verdad al host 192.168.50.20 de la red del servidor SSH en el puerto 5900.
  • -X - Permite crear un forwarder X11. Si ejecutamos una aplicación gráfica con este parámetro en el servidor SSH la veremos en nuestro host.
  • -6 - Fuerza la conexión por IPv6.
  • -b - Permite indicar des de qué IP te conectas (en caso de tener más de una IP en tu host).
  • -C - Comprime toda la información que se transmite.
  • -E - Puedes indicar un fichero donde mostrar los errores en lugar de mostrarlos por pantalla (errores de depuración de SSH).
  • -F - Especifica un fichero de configuración propio, diferente de /etc/ssh/ssh_config para el cliente.
  • -N - Permite que el túnel SSH no ejecute comandos. Ideal para cuando se hace un forward de puertos (-D o -L).
  • -q - Modo silencioso. Si el cliente tiene que reportar algo no lo hará, seguramente.
  • -v - Todo lo contrario a -q. Muestra TODO lo que pueda loguear.

Acceso sin contraseña

Se puede configurar OpenSSH para acceder sin contraseña, usando un par de claves privada/pública en su lugar. Para ello, haremos lo siguiente:

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@destino -p puerto
ssh-add

Nota: El parámetro -p no se necesitará si se usa el puerto por defecto.

Una vez hecho esto, si nos conectamos por SSH al host de destino no nos pedirá ninguna contraseña.