Introducción
OpenSSH es una poderosa colección de herramientas para el control remoto y la transferencia de datos entre computadoras en red. También aprenderá sobre algunos de los ajustes de configuración posibles con la aplicación de servidor OpenSSH y cómo cambiarlos en su sistema Ubuntu.
OpenSSH es una versión disponible gratuitamente de la familia de herramientas de protocolo Secure Shell (SSH) para controlar de forma remota o transferir archivos entre computadoras. Las herramientas tradicionales utilizadas para realizar estas funciones, como telnet o rcp, son inseguras y transmiten la contraseña del usuario en texto claro cuando se usan. OpenSSH proporciona un demonio de servidor y herramientas de cliente para facilitar el control remoto cifrado y las operaciones de transferencia de archivos, reemplazando efectivamente las herramientas heredadas.
El componente de servidor OpenSSH, sshd, escucha continuamente las conexiones del cliente desde cualquiera de las herramientas del cliente. Cuando se produce una solicitud de conexión, sshd configura la conexión correcta en función del tipo de conexión de la herramienta de cliente. Por ejemplo, si el equipo remoto se conecta con la aplicación cliente ssh, el servidor OpenSSH configura una sesión de control remoto después de la autenticación. Si un usuario remoto se conecta a un servidor OpenSSH con scp, el demonio del servidor OpenSSH inicia una copia segura de los archivos entre el servidor y el cliente después de la autenticación. OpenSSH puede usar muchos métodos de autenticación, incluyendo contraseñas simples, claves públicas y tickets de Kerberos.
Instalación
La instalación de las aplicaciones cliente y servidor OpenSSH es sencilla. Para instalar las aplicaciones cliente OpenSSH en su sistema Ubuntu, use este comando en un símbolo del terminal:
sudo apt install openssh-client
Para instalar la aplicación de servidor OpenSSH y los archivos de soporte relacionados, use este comando en un símbolo del terminal:
sudo apt install openssh-server
Configuración
Puede configurar el comportamiento predeterminado de la aplicación de servidor OpenSSH, sshd, editando el archivo /etc/ssh/sshd_config
. Para obtener información sobre las directivas de configuración utilizadas en este archivo, puede ver la página de manual correspondiente con el siguiente comando, emitido en un mensaje de terminal:
man sshd_config
Hay muchas directivas en el archivo de configuración sshd que controlan cosas como la configuración de comunicación y los modos de autenticación. Los siguientes son ejemplos de directivas de configuración que se pueden cambiar editando el archivo /etc/ssh/sshd_config
.
Tip
Antes de editar el archivo de configuración, debe hacer una copia del archivo original y protegerlo de la escritura para tener la configuración original como referencia y reutilizarla según sea necesario.
Copie el archivo
/etc/ssh/sshd_config
y protéjalo de la escritura con los siguientes comandos, emitidos en un mensaje de terminal:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.originalsudo chmod a-w /etc/ssh/sshd_config.original
Además, dado que perder un servidor ssh puede significar perder su camino para llegar a un servidor, verifique la configuración después de cambiarla y antes de reiniciar el servidor:
sudo sshd -t -f /etc/ssh/sshd_config
Los siguientes son ejemplos de directivas de configuración que puede cambiar:
- Para configurar su OpenSSH para que escuche en el puerto TCP 2222 en lugar del puerto TCP 22 predeterminado, cambie la directiva de puerto como tal:
Puerto 2222
- Para hacer que su servidor OpenSSH muestre el contenido del archivo
/etc/issue.net
como banner de inicio de sesión, simplemente agregue o modifique esta línea en el archivo/etc/ssh/sshd_config
:
Banner /etc/issue.net
Después de realizar cambios en el archivo /etc/ssh/sshd_config
, guarde el archivo y reinicie la aplicación de servidor sshd para efectuar los cambios utilizando el siguiente comando en un mensaje de terminal:
sudo systemctl restart sshd.service
Advertencia
Muchas otras directivas de configuración para sshd están disponibles para cambiar el comportamiento de la aplicación de servidor para adaptarse a sus necesidades. Tenga en cuenta, sin embargo, que si su único método de acceso a un servidor es ssh, y comete un error al configurar sshd a través del archivo
/etc/ssh/sshd_config
, es posible que se encuentre bloqueado del servidor al reiniciarlo. Además, si se suministra una directiva de configuración incorrecta, el servidor sshd puede negarse a iniciar, así que tenga mucho cuidado al editar este archivo en un servidor remoto.
Las claves SSH
SSH permiten la autenticación entre dos hosts sin necesidad de contraseña. La autenticación de clave SSH utiliza una clave privada y una clave pública.
Para generar las claves, desde un mensaje de terminal ingrese:
ssh-keygen -t rsa
Esto generará las claves usando el algoritmo RSA. En el momento de escribir esto, las claves generadas tendrán 3072 bits. Puede modificar el número de bits utilizando la opción -b
. Por ejemplo, para generar claves con 4096 bits, puede hacer:
ssh-keygen -t rsa -b 4096
Durante el proceso se le solicitará una contraseña. Simplemente presione Enter cuando se le solicite crear la clave.
De forma predeterminada, la clave pública se guarda en el archivo ~/.ssh/id_rsa.pub
, mientras que ~/.ssh/id_rsa
es la clave privada. Ahora copia el id_rsa.pub
archivo en el host remoto y anexar a ~/.ssh/authorized_keys
escribiendo:
ssh-copy-id username@remotehost
por último, compruebe los permisos en el authorized_keys
archivo, sólo el usuario autenticado debe tener permisos de lectura y escritura. Si los permisos no son correctos cambiar:
chmod 600 .ssh/authorized_keys
Ahora debería poder SSH al host sin que se le solicite una contraseña.
Importar claves desde servidores de claves públicos
En estos días, muchos usuarios ya tienen claves ssh registradas con servicios como launchpad o github. Estos se pueden importar fácilmente con:
ssh-import-id <username-on-remote-service>
El prefijo lp:
está implícito y significa obtener desde launchpad, la alternativa gh:
hará que la herramienta obtenga desde github en su lugar.
autenticación de Dos factores con U2F/FIDO
OpenSSH 8.2 se agregó soporte para dispositivos de autenticación de hardware U2F / FIDO. Estos dispositivos se utilizan para proporcionar una capa adicional de seguridad además de la autenticación basada en claves existente, ya que el token de hardware debe estar presente para finalizar la autenticación.
Es muy fácil de usar y configurar. El único paso adicional es generar un par de teclas nuevo que se pueda usar con el dispositivo de hardware. Para ello, se pueden utilizar dos tipos de clave: ecdsa-sk
y ed25519-sk
. El primero tiene soporte de hardware más amplio, mientras que el segundo puede necesitar un dispositivo más reciente.
Una vez que se genera el par de claves, se puede usar como se usaría normalmente con cualquier otro tipo de clave en openssh. El único requisito es que para usar la clave privada, el dispositivo U2F debe estar presente en el host.
Por ejemplo, conecte el U2F dispositivo y generar un par de claves para utilizar con:
$ ssh-keygen -t ecdsa-skGenerating public/private ecdsa-sk key pair.You may need to touch your authenticator to authorize key generation. <-- touch deviceEnter file in which to save the key (/home/ubuntu/.ssh/id_ecdsa_sk): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_ecdsa_skYour public key has been saved in /home/ubuntu/.ssh/id_ecdsa_sk.pubThe key fingerprint is:SHA256:V9PQ1MqaU8FODXdHqDiH9Mxb8XK3o5aVYDQLVl9IFRo ubuntu@focal
Ahora sólo la transferencia de la parte pública del servidor ~/.ssh/authorized_keys
y usted está listo para ir:
$ ssh -i .ssh/id_ecdsa_sk [email protected] user presence for key ECDSA-SK SHA256:V9PQ1MqaU8FODXdHqDiH9Mxb8XK3o5aVYDQLVl9IFRo <-- touch deviceWelcome to Ubuntu Focal Fossa (GNU/Linux 5.4.0-21-generic x86_64)(...)[email protected]:~$