SSH

Traducción(es): Deutsch – English – Français – Italiano – Español – Português Brasileiro

ToDo: combinar (y traducir) esta página y la del francés (más completa)

Introducción

SSH significa Shell seguro y es un protocolo para el inicio de sesión remoto seguro y otros servicios de red seguros en una red insegura1. Consulte Wikipedia-Secure Shell para obtener información más general y ssh, lsh-client o dropbear para las implementaciones de software SSH de las que OpenSSH es la más popular y la más utilizada 2. SSH reemplaza a telnet,rlogin y rsh sin cifrar y agrega muchas características.

En este documento utilizaremos el conjunto de comandos OpenSSH, también se asumirá que las siguientes dos variables están definidas:

remote_host=<the remote computer>remote_user=<your user name on $remote_host>

Por lo tanto, si desea usar las recetas a continuación, establezca primero estas variables en el nombre del equipo remoto y el nombre de usuario en ese equipo remoto. A continuación, cortar y pegar los comandos a continuación debe funcionar. remote_host también puede ser una dirección IP.

Instalación

Instalación del cliente

Normalmente el cliente se instala de forma predeterminada. Si no es suficiente correr como root:

apt install openssh-client

Instalación del servidor

El servidor permite conectarse de forma remota y se instala ejecutando como root:

apt install openssh-server

Archivos de configuración

Los archivos de configuración principales están en el directorio / etc / ssh :

  • ssh_config: archivo de configuración del cliente

  • sshd_config: archivo de configuración del servidor

Además, este directorio contiene los pares de claves privadas / públicas que identifican a su host :

  • ssh_host_dsa_key
  • ssh_host_dsa_key.pub
  • ssh_host_rsa_key
  • ssh_host_rsa_key.pub

Desde OpenSSH 5.73, está disponible un nuevo par de claves privadas / públicas:

  • ssh_host_ecdsa_key
  • ssh_host_ecdsa_key.pub

Desde OpenSSH 6.54, está disponible un nuevo par de claves privadas / públicas:

  • ssh_host_ed25519_key
  • ssh_host_ed25519_key.pub

Regenerar claves de host

rm /etc/ssh/ssh_host_*dpkg-reconfigure openssh-server

Inicio de sesión remoto

Con contraseña

Si desea iniciar sesión en remot remote_host como usuario remot remote_user, simplemente escriba

ssh $remote_user@$remote_host

y, a continuación, escriba su contraseña.

Si los nombres de usuario en el equipo local y el remoto son idénticos, puede eliminar la parte remot remote_user@y simplemente escribir

ssh $remote_host

Si es la primera vez que inicia sesión en el equipo remoto, ssh le preguntará si está seguro de que desea conectarse al equipo remoto. Responda ‘ sí ‘ después de verificar la huella digital del equipo remoto, escriba su contraseña y ssh lo conectará al host remoto.

Usar claves compartidas

Una de las funciones de ssh es usar un par de claves privadas/públicas para conectarse a un host remoto. También conocidas como claves SSH. Este método le permite iniciar sesión en un host remoto sin necesidad de escribir su contraseña cada vez. Para hacer esto, debe generar un par de claves privadas/públicas en su máquina local y depositar la clave pública en el host remoto.

Para generar la clave, utilice el programa ssh-keygen de la siguiente manera

ssh-keygen -t rsa

Este programa genera un par de claves privadas/públicas en el directorio~/.ssh. El programa primero pide los archivos de destino para las claves, que por defecto se encuentran en ~/.ssh. Después se solicita una frase de contraseña.

Nota: Recomendamos no dejar la contraseña vacía. Un atacante que se apodera de tu clave privada puede conectarse a los hosts donde depositaste tu clave pública, ya que la frase de contraseña está vacía. Elige una frase de contraseña larga y compleja.

Su clave privada es id_rsa (no se la dé a otra persona), su clave pública es id_rsa.pub.

Copia su clave pública a un host remoto con el comando ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub $remote_user@$remote_host

Ahora puede conectarse simplemente al host remoto y se solicita la fase de contraseña. Una vez hecho esto, se conecta al host remoto. En caso de una nueva conexión, la frase de contraseña no se vuelve a solicitar durante toda la sesión.

Administración de claves

Utilizando GUI

Opcionalmente, seahorse es una aplicación GNOME que administra fácilmente claves de cifrado y contraseñas a través de una Interfaz Gráfica de Usuario (GUI) intuitiva. Caballito de mar es capaz de hacer varias operaciones. Como crear claves SSH o PGP, configurarlas y almacenarlas en caché. Leer más.

Seguridad

Servidor SSH

De forma predeterminada, un servidor SSH es relativamente seguro. Con la ayuda de algunas buenas prácticas, opciones de configuración y utilidades externas, es posible hacerlo aún más difícil para ‘robots’ y crackers

Buenas prácticas con servidor SSH

  • /!\ Aplique las actualizaciones de seguridad de openssh-server lo antes posible. Lo que permite proteger contra agujeros de seguridad conocidos.

  • Active la autenticación de claves SSH solo con contraseñas/frases de contraseña. Desactive la autenticación solo con contraseña.

  • Considere el uso de fail2ban, que es un monitor de archivos de registro que prohíbe automáticamente una dirección IP después de un número predefinido de intentos de inicio de sesión fallidos. Que protege automáticamente contra ataques de fuerza bruta.

  • Más buenas prácticas para usar ssh en https://lackof.org/taggart/hacking/ssh/

Opciones de Configuración

(!) Se debe editar el archivo/etc / ssh / sshd_config para cambiar los parámetros y luego reiniciar el servidor ssh con

service ssh restart
  • Desactive el uso de contraseñas para la autenticación (no de autenticación de contraseña).

  • Desactive usando la cuenta raíz (no de registro de Permitroot).

  • Solo permitir el inicio de sesión de ciertos usuarios o grupos (AllowUsers y AllowGroups)

{i} Las opciones AllowUsers y AllowGroups no mejoran la seguridad de un servidor SSH. Pero en algunos casos su uso permite resistir un poco más de tiempo el ataque de fuerza bruta.

Utilidades externas

  • fail2ban: permite incluir automáticamente en la lista negra IPs que intentan forzar brutalmente un servidor SSH con la ayuda de iptables.

  • denyhosts : como fail2ban, denyhosts permite bloquear direcciones IP que intentan forzar una conexión a ssh. Pero a diferencia de fail2ban, no usa iptables, sino el archivo /etc/hosts.negar.

Cliente SSH

Buenas prácticas con Cliente SSH

  • /!\ Aplique las actualizaciones de seguridad de openssh-client tan pronto como sea posible. Lo que permite proteger contra agujeros de seguridad conocidos.

  • Utilice la autenticación de claves SSH. En lugar de autenticación con contraseña.

  • Agregue contraseñas/frases de contraseña seguras a sus claves SSH. Esto reduce el riesgo de ataques de fuerza bruta.

Funciones adicionales

Ver archivos en la interfaz gráfica de usuario

En administradores de archivos como Konqueror, Dolphin, Krusader y Midnight Commander puede usar FISH para ver archivos en una interfaz gráfica de usuario utilizando:

fish://username@server_name_or_ip

Comandos adicionales

scp

scp es una utilidad de línea de comandos que permite transferir archivos entre dos máquinas.

  • Enviar un archivo:
scp $source_file $remote_user@$remote_host:$destination_file
  • Copiar un archivo a la máquina local:
scp $remote_user@$remote_host:$source_file $destination_file

sftp

modo de texto

modo gráfico

clusterssh

ssh-agent y ssh-add

ssh-agent es una herramienta útil para administrar las claves privadas y sus contraseñas. La mayoría de los entornos de escritorio en Debian ya estarán configurados para ejecutar ssh-agent (a través de systemd user services o /etc/X11/Xsession), por lo que no debería necesitar iniciarlo manualmente.

# Check if ssh-agent is runningenv | grep -i ssh

Aún tendrá que decirle al agente que administre sus claves.

# List keys managed by the agentssh-add -l# Add your ssh keyssh-add ~/.ssh/your_private_key

Cuando se necesita por primera vez una clave privada, se le solicita su contraseña. ssh-agent recordará la clave para que no se le pregunte a su contraseña más.

llavero

Llavero, proporcionado por el paquete llavero, es un script de shell que permite usar el agente ssh en varias sesiones del mismo equipo. En efecto, después del primer inicio, ssh-agent crea un conector permanente que permite la comunicación con ssh. Solo se hace referencia a este socket en el entorno de la sesión en la que se inició el agente. Keychain permite detectar el agente y propagar el acceso a este agente a otras sesiones; esto permite utilizar una sola instancia de ssh-agent por usuario en una máquina.

ssh-askpass

ssh-askpass es una utilidad para simplemente preguntar la contraseña de una clave privada al usarla. Existen varias implementaciones:

  • x11-ssh-askpass : versión para X11

  • kaskpass : integración de ssh-askpass en el entorno de KDE

  • ssh-askpass-gnome : integración de ssh-askpass en el entorno Gnome

libpam-usb

libpam-usb es una utilidad (solo disponible hasta Debian Jessie) que permite la autenticación con una memoria USB. Este paquete incluye una utilidad útil: pamusb-agent. Esta utilidad, una vez configurada correctamente, permite cargar las llaves SSH presentes en la memoria USB una vez que está conectada y descargarlas cuando está desconectada.

Comandos remotos

Si solo desea ejecutar un comando en el equipo remoto, no necesita iniciar sesión. Puede decirle a ssh que ejecute el comando sin iniciar sesión, por ejemplo,

ssh $remote_user@$remote_host 'ls *.txt'

lista todos los archivos con extensión .txt en el ordenador remoto. Esto funciona con comillas simples…»como se muestra aquí, con comillas dobles»…»y sin comillas. Sin embargo, puede haber diferencias entre estos tres casos, que aún no se han documentado aquí.

SSH a Debian desde otro sistema operativo

  • PuTTY es una aplicación emuladora de terminal que puede actuar como cliente para ssh. Es ampliamente utilizado por los usuarios de Windows.

  • Wikipedia tiene Comparison_of_SSH_clients

Buenas prácticas de uso de SSH

Debe leer esto: https://lackof.org/taggart/hacking/ssh/

Este documento resume muchas buenas prácticas que los usuarios regulares de SSH deben seguir para evitar comprometer la seguridad de sus cuentas (y de toda la máquina al mismo tiempo).

Configure su ~/.ssh / config para enviar solo la clave correcta.

Host master.debian.org User account IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes

Solución de problemas

desajuste de la versión de OpenSSL. Construido contra 1000105f, tiene 10001060

Si recibe un mensaje de error como este al iniciar el demonio ssh, debe ejecutar:

apt install openssh-server openssh-client

Véase también el fallo # 732940.

SSH se cuelga

Problema

Está intentando usar SSH en un equipo remoto. Pero durante el inicio de sesión SSH, la sesión se bloquea/congela indefinidamente. Por lo tanto, no se le presenta el símbolo del sistema. Y no puede usar ningún comando SSH : ( Al usar el modo de depuración SSH, la sesión se cuelga en esta línea debug2: canal 0: abrir confirme rwindow 0 rmax 32768

Posible causa

Con algunos routers detrás de NAT y al usar OpenSSH. Durante la configuración de la sesión, después de que se ha dado la contraseña, OpenSSH establece el campo TOS (tipo de servicio) en el datagrama IP. El router se atraganta con esto. El efecto es que su sesión SSH se cuelga indefinidamente. En otras palabras, los comandos o conexiones SSH rara vez funcionan o no funcionan en absoluto. Resolución

con IPQoS 0x00

Hasta que el fabricante del router arregle su firmware. Aquí hay una opción para resolver ese problema:

  1. Compruebe que la versión de openssh-server y openssh-client sea 5.7 o más reciente. Por ejemplo, la siguiente resolución debería funcionar con Debian 7.11 Wheezy o más reciente, ya que viene con OpenSSH versión 6.0.

  2. Edite uno de los dos archivos siguientes ubicados en:

    ~/.ssh/config

    o

    /etc/ssh/ssh_config

    Nota: el archivo de configuración es por usuario y el archivo ssh_config es para todos los usuarios y para todo el sistema. Si no está seguro, edite el archivo de configuración de usuario apropiado.

    Contenido del archivo anterior

    Host *

    Contenido del archivo posterior

    Host * IPQoS 0x00
  3. Si tiene alguna ventana(s) de Terminal/consola ya abierta. Ciérralos por completo. Al hacerlo, se cerrará cualquier sesión SSH activa.
  4. No es necesario reiniciar OpenSSH o su Debian. Intente de nuevo SSH en cualquier servidor remoto. Debería funcionar. Hecho, ha solucionado correctamente ese problema :)

    Gracias a Joe y catmaker por este consejo :)

    Documentación conexa en https://www.openssh.com/txt/release-5.7

Resolución con netcat

/!\ ADVERTENCIA: Se sugiere considerar usar esa otra resolución con IPQoS 0x00 en lugar de usar la opción netcat/ProxyCommand nc %h %p. Porque IPQoS 0x00 es la opción OpenSSH incorporada oficial. También IPQoS 0x00 es una forma más directa de resolver ese problema, y una opción potencialmente más segura. Porque IPQoS 0x00 utiliza el cifrado incorporado de SSH para transferencias seguras. Compare con las transferencias no cifradas de netcat. Fuentes: 1 2. Si elige utilizar la opción netcat/ProxyCommand nc %h %p, siga leyendo.

Otra opción para resolver el problema de bloqueo de SSH es usar ProxyCommand nc % h % p. Para hacerlo, siga los mismos pasos que la resolución anterior con IPQoS 0x00. Pero reemplace IPQoS 0x00 por

ProxyCommand nc %h %p

Mantenga activa la conexión SSH

Por razones de seguridad, de forma predeterminada, una conexión SSH se cierra automáticamente después de un período de tiempo establecido. Pero en algunos casos quieres mantener esa conexión abierta. Como almacenamiento en la nube a través de conexión SSH.

/!\ ADVERTENCIA: Antes de activar la opción mantener activa la conexión SSH. Se sugiere considerar asegurar tanto el Cliente SSH como el Servidor SSH. Porque, por ejemplo, existe el riesgo de que si los usuarios dejan su sesión SSH abierta y su equipo desatendido y desbloqueado. Cualquiera puede acercarse a ese equipo y luego explotar esa conexión SSH abierta. Por ejemplo, usando el comando passwd, y cambie la contraseña. Y así obtener acceso al servidor. En otras palabras, antes de activar la opción mantener activa la conexión SSH, se sugiere usar su mejor juicio y buenas prácticas de seguridad.

Para Debian 7.servidor x

Pasos para mantener activa la conexión SSH.

En el servidor SSH edite el archivo /etc/ssh/sshd_config y agregue lo siguiente en la parte inferior de ese archivo.

# Keep client SSH connection alive by sending every 300 seconds a small keep-alive packet to the server in order to use ssh connection. 300 seconds equal 5 minutes.ClientAliveInterval 300 # Disconnect client after 3333 "ClientAlive" requests. Format is (ClientAliveInterval x ClientAliveCountMax). In this example (300 seconds x 3333) = ~999,900 seconds = ~16,665 minutes = ~277 hours = ~11 days.ClientAliveCountMax 3333

Como usuario root reinicie el servicio SSH:

service sshd restart

Tenga en cuenta que en sistemas Debian recientes (por ejemplo, Wheezy 7 con actualizaciones actuales a partir de noviembre. 2015), el comando anterior ya no funciona y devuelve el error:

sudo service sshd restartsshd: unrecognized service

Sin embargo, los siguientes trabajos:

sudo service ssh restart Restarting OpenBSD Secure Shell server: sshd.

Véase también

  • multiplexor de terminales de pantalla con emulación de terminales VT100/ANSI

  • tmux-multiplexor de terminales alternativo

Categorías Categorías de redes Software

Deja una respuesta

Tu dirección de correo electrónico no será publicada.