
Si su trabajo requiere mantener muchas sesiones SSH en diferentes servidores, probablemente sepa cómo se rompen fácilmente al cambiar a otro Wi-Fi o cuando Internet se pierde temporalmente. Pero, ¿qué pasa si te digo que todos estos problemas han sido resueltos durante mucho tiempo y puedes olvidarte de las sesiones interrumpidas y las reconexiones constantes?
Al abrir la tapa de la computadora portátil, todas mis docenas de sesiones SSH son accesibles de inmediato y en el mismo estado en que las dejé. Este artículo describe cómo configurar un servidor de terminal para un administrador del sistema. El uso de dicho servidor le permite olvidarse de las sesiones SSH rotas, reconectando e ingresando contraseñas constantemente.
Configuración del servidor
La idea es simple y se ilustra claramente en la imagen en el título de la publicación: mantendremos todas las conexiones SSH en un servidor de terminal especial. Este servidor será nuestro punto de entrada para administrar otros servidores. Al mismo tiempo, los servidores finales no necesitan configurar o instalar software adicional.
Casi cualquier configuración es adecuada para un servidor de terminal, pero es mejor tener más RAM para almacenar el registro de la consola dentro de cada sesión y poder desplazarse por el historial en cualquier momento y ver lo que hizo en el servidor de sesión hace un mes. Por lo general, 1-2 GB de memoria es suficiente.
Elección de distribución
En el servidor de terminal, lo más importante es el tiempo de actividad, porque cuanto menos reiniciamos, más duran nuestras sesiones SSH. Por lo tanto, elegimos la distribución LTS (Soporte a largo plazo) más conservadora, por ejemplo, una rama estable de Debian o Ubuntu. Configuramos actualizaciones automáticas (actualizaciones desatendidas) para que un reinicio repentino de los programas no sea una sorpresa.
Configuración del servidor SSH
Dado que el servidor terminal abrirá el acceso a todos nuestros servidores a la vez, será seguro asegurarlo. Para hacer esto, prohibimos la autenticación con contraseñas, dejando solo el acceso con claves, y también prohibimos iniciar sesión como root.
Primero debe crear un nuevo usuario en el sistema.
/ etc / ssh / sshd_config.....
Tal configuración es suficiente para proteger contra la enumeración masiva de contraseñas, ya que el servidor SSH simplemente cerrará la conexión cuando intente iniciar sesión con una contraseña. Incluso con una gran cantidad de conexiones, se cerrarán lo suficientemente rápido sin crear una carga significativa en el servidor. En mi opinión, con esta configuración no hay necesidad de instalar funciones de seguridad adicionales como fail2ban.
A menudo, los administradores principiantes en sus manuales aconsejan cambiar el puerto SSH e instalar algún tipo de puerto no estándar como 2222 en lugar de 22 . En mi opinión, esta es una mala práctica que no agrega ninguna seguridad.
- Esto no le permitirá protegerse del descifrado de contraseñas, ya que los escáneres automáticos aún encontrarán SSH en cualquier puerto y comenzarán a martillar.
- Esto hace un desastre si varias personas administran el sistema y cada una inventa sus propios puertos. Cuando hay docenas de sistemas de este tipo, debe buscar el escáner en qué puerto está oculto el SSH esta vez.
- Esto rompe las restricciones de seguridad incorporadas en los programas. Por ejemplo, los navegadores web no se conectarán al puerto 22 si lo especifica explícitamente en HTTP, pero al mismo tiempo se conectarán a otro puerto no estándar. Esto se puede usar para activar sistemas IDS / IPS DDoS.
Tmux: una ventana para gobernar todo
Tmux es un programa increíblemente conveniente para administrar terminales virtuales, sin el cual simplemente no puedo imaginar mi trabajo. Al principio parece confuso y complicado, pero si te dominas y aprendes a usarlo, ya no puedes rechazarlo.
Para aquellos que no saben qué es tmux, imagine un navegador web con pestañas, pero en lugar de sitios hay sesiones de consola. Puede abrir un número infinito de pestañas y en cada pestaña ejecute su programa. Al mismo tiempo, se está ejecutando en el servidor, y puede desconectarse de él en cualquier momento, mientras que todas las pestañas y programas en ejecución permanecerán en su lugar y podrá volver a ellos.
Instale tmux si aún no está instalado:
apt install tmux
En la terminología de tmux, un conjunto separado de ventanas se denomina sesión. Utilizaremos solo una sesión de forma predeterminada, por lo tanto, no utilizaremos nombres de sesión en absoluto. Pero es importante saber que puede haber más de uno si es necesario.
Crea una nueva sesión:
tmux new
En este momento, creamos una nueva sesión con una ventana e inmediatamente nos conectamos a ella. Puede ver la barra de estado verde que aparece a continuación. Esto es algo así como una barra con pestañas en un navegador. Mostrará la pestaña actual y los mensajes adyacentes, así como los mensajes de servicio.
La barra de estado de tmux muestra los nombres de las ventanas (pestañas)En este punto, incluso si cerramos la conexión SSH y nos reconectamos al servidor, nuestra sesión tmux en ejecución permanecerá en el mismo estado, junto con todos los programas en ejecución, como si la minimizáramos. Intentemos ejecutar el programa
superior dentro de la sesión tmux y desconectarnos de él. Para mayor claridad, cierre la ventana de terminal por completo y vuelva a conectarse al servidor.
Después de volver a conectarnos al servidor, nos conectaremos a nuestra sesión lanzada anteriormente:
tmux attach
Y asegúrese de que el programa que más se ejecuta continúa funcionando. En este punto, es importante comprender el principio principal: después de iniciar la sesión de tmux, queda por trabajar en segundo plano en el servidor, independientemente de si está conectado o no.
Dado que la sesión tmux permite varias conexiones simultáneas, esto puede usarse para la colaboración de varias personas en el servidor para ver la misma consola en tiempo real. Para hacer esto, todos se conectan al mismo servidor bajo la misma cuenta e ingresan tmux attach. Allí puedes chatear, directamente en la línea de comando. A menudo usamos esto para no arrojar el registro de la consola entre sí en el messenger, sino para trabajar inmediatamente en una terminal.
Tmux puede dividir una ventana en varias (cada ventana dentro de una pestaña se llama panel), esto es conveniente cuando necesita ver dos consolas al mismo tiempo. Por ejemplo, en una ventana, edite el script y, en otra, mire el registro.
tmux le permite crear múltiples ventanas dentro de una y redimensionarlasPor defecto,
Ctrl + b se usa para controlar tmux. Después de presionar esta tecla de acceso rápido de control, tmux espera ingresar el comando principal desde una sola letra.
Aquí están los comandos básicos:
Ctrl + b + c - (crear) Crear una nueva ventana (pestaña)
Ctrl + b + <dígito> : muévase a la pestaña número N, donde el dígito es una clave del 0 al 9. La numeración de las ventanas comienza desde cero.
Ctrl + b + x : cierra la ventana actual. Si la última ventana está cerrada, la sesión de tmux finalizará.
Ctrl + b + w : muestra una lista de todas las ventanas que puede mover hacia arriba y hacia abajo con los botones del cursor y seleccione la deseada presionando enter.
Ctrl + b + " : divide la ventana por la mitad horizontalmente y crea una nueva
Ctrl + b +% : divide la ventana verticalmente y crea una nueva
Ctrl + b +, - renombra la ventana actual
Ctrl + b + abajo / arriba / izquierda / derecha - moverse a través de pane'am dentro de la ventana
Ctrl + b + página arriba / página abajo - desplazarse hacia arriba
Ctrl + b + / - buscar por historial, como en vim o menos
Estas son todas las teclas de acceso rápido que necesitaba durante más de 10 años usando tmux. De hecho, hay muchos más, pero para empezar es mejor detenerse en ellos.
Config Tmux
Encuentro la
tecla de acceso rápido
Ctrl + b incómoda, ya que toma demasiado presionar tres teclas para cualquier acción. El tema de las configuraciones de tmux es un área separada del gusto, y cada usuario experimentado tiene su propia visión de cómo usarlo de manera correcta y conveniente. Incluso hay selecciones completas de autores
de configuraciones y temas para tmux.
Para empezar, daré un ejemplo de mi configuración, que me parece que soluciona todas las dificultades que impiden el rápido desarrollo de tmux. La configuración se encuentra en la carpeta de inicio con el nombre
~ / .tmux.conf
Esta configuración le permite crear automáticamente varias ventanas al inicio, en las que las sesiones SSH comienzan de inmediato. En este caso, no es necesario crear manualmente una nueva sesión con el comando
tmux new , es suficiente ingresar siempre
tmux attach . Si la sesión no existía antes, se creará.
Autostart tmux
Queremos que cuando nos conectemos a un servidor terminal, ingresemos inmediatamente a tmux, incluso si el servidor se reinició y la sesión de tmux se cerró.
Para hacer esto, agregue tmux al final del
archivo ~ / .bashrc . Es importante recordar que dicho diseño solo funcionará con la configuración anterior.
if [ ! "$TMUX" ]; then tmux attach fi if [ "$TMUX" ]; then export TERM=screen fi
Esta simple condición significa que si no estamos en tmux, entonces estamos conectados a él.
Esto completa la configuración de tmux en el servidor de terminal. De ahora en adelante, para cada nueva conexión SSH crearemos una ventana separada en tmux. E incluso si se pierde la conexión con el servidor terminal, todas las conexiones SSH permanecerán activas.
Mosh - No más descansos
Ahora necesitamos proporcionar una conexión continua al servidor de terminal, que siempre estará activo. Incluso si cerramos la computadora portátil durante varios días y la abrimos en otra red wifi, la conexión debería restablecerse.
Mosh es un complemento sobre un servidor OpenSSH normal, que le permite olvidarse de las desconexiones. Mosh inicia sesión utilizando SSH ordinario, después de lo cual se genera un canal UDP separado, que se restaura instantáneamente después de una interrupción, incluso si se cambia su dirección IP externa.
Dado que necesitamos mantener una conexión constante con el servidor terminal, instalaremos mosh solo en el servidor y en nuestra computadora en funcionamiento. Al mismo tiempo, no necesita instalar nada en los servidores remotos, ya que las conexiones a ellos ya viven para siempre en tmux.
Instale mosh en el servidor:
apt install mosh
Instale mosh en nuestra computadora en funcionamiento. Está disponible para todos los sistemas operativos principales, pero el cliente nativo es solo para sistemas operativos tipo Unix. La versión de Windows se implementa utilizando Cygwin o la aplicación Chrome.
Uso macOS e instalo mosh a través del administrador de paquetes brew:
brew install mosh
En la mayoría de los casos, mosh no requiere configuración adicional y funciona de inmediato. Es suficiente escribir mosh en lugar del comando ssh:
mosh user@my-server.com
Para configuraciones no estándar, el comando parece un poco más complicado. Por ejemplo, si necesita especificar el puerto y la ruta clave:
mosh --ssh="ssh -p 2222 -i /path/to/ssh.key" user@my-server.com
Mosh realiza la autenticación primaria como un cliente SSH normal, autorizando al puerto estándar 22. Al mismo tiempo, el servidor mosh inicialmente no escucha ningún puerto, y aparte del demonio OpenSSH original, no hay puertos abiertos en el servidor. Después de conectarse a través de TCP, mosh se ejecuta en el servidor en el espacio del usuario y abre un túnel adicional a través de UDP.
Diagrama de flujo del protocolo MoshAhora la sesión mosh que se ejecuta en el cliente siempre se restaurará cuando aparezca Internet. En mi computadora portátil, mantengo abierta una sesión de mosh durante meses sin reiniciar y no tengo que volver a iniciar sesión constantemente en el servidor terminal, simplemente siempre funciona.
Para no ingresar un comando de conexión largo al servidor de terminal cada vez, hice un alias del comando de conexión de una letra:
alias t='mosh --ssh="ssh -p 443 -i /path/to/ssh.key" user@my-server.com'
Conclusión
Este esquema simple le permite ahorrar significativamente tiempo y nervios, no perder el resultado del trabajo cuando se rompe SSH. Constantemente tengo que ver cómo los administradores novatos comienzan a iniciar sesión en sus servidores cada vez y eliminan las sesiones SSH.
Puede parecer confuso a primera vista, pero le aseguro que una vez que se domine y se acostumbre, comenzará a mirar con arrepentimiento condescendiente a aquellos que todavía tienen conexiones SSH rotas.

Suscríbase a nuestro desarrollador de Instagram
