Serveur de terminal pour administrateur; Pas un seul Ă©cart SSH



Si votre travail nécessite de conserver un grand nombre de sessions SSH sur différents serveurs, vous savez probablement comment elles se cassent facilement lors du passage à un autre Wi-Fi ou lorsque Internet est temporairement perdu. Mais que se passe-t-il si je vous dis que tous ces problÚmes sont résolus depuis longtemps et que vous pouvez oublier les sessions interrompues et les reconnexions constantes?

En ouvrant le couvercle de l'ordinateur portable, toutes mes dizaines de sessions SSH sont immĂ©diatement accessibles et dans le mĂȘme Ă©tat que je les ai laissĂ©es. Cet article dĂ©crit comment configurer un serveur Terminal Server pour un administrateur systĂšme. L'utilisation d'un tel serveur vous permet d'oublier les sessions SSH interrompues, de vous reconnecter et de saisir constamment des mots de passe.



Configuration du serveur


L'idĂ©e est simple et clairement illustrĂ©e dans l'image du titre de l'article: nous conserverons toutes les connexions SSH sur un serveur terminal spĂ©cial. Ce serveur sera notre point d'entrĂ©e pour gĂ©rer d'autres serveurs. Dans le mĂȘme temps, les serveurs finaux n'ont pas besoin de configurer ou d'installer de logiciels supplĂ©mentaires.
Presque toutes les configurations conviennent à un serveur Terminal Server, mais il est préférable d'avoir plus de RAM pour stocker le journal de la console à l'intérieur de chaque session et de pouvoir faire défiler l'historique à tout moment et voir ce que vous avez fait sur le serveur de session il y a un mois. Habituellement, 1 à 2 Go de mémoire suffisent.

Choix de distribution


Dans le serveur Terminal Server, la chose la plus importante est la disponibilité, car moins nous redémarrons, plus nos sessions SSH sont actives. Par conséquent, nous choisissons la distribution LTS (Long Term Support) la plus conservatrice, par exemple, une branche Debian ou Ubuntu stable. Nous configurons des mises à jour automatiques (mises à niveau sans assistance) afin qu'un redémarrage soudain des programmes ne soit pas une surprise.

Configuration du serveur SSH


Étant donnĂ© que le serveur de terminaux ouvrira l'accĂšs Ă  tous nos serveurs Ă  la fois, il sera sĂ»r de le sĂ©curiser. Pour ce faire, nous interdisons l'authentification avec des mots de passe, ne laissant que l'accĂšs avec des clĂ©s, et nous interdisons Ă©galement la connexion en tant que root.
Vous devez d'abord créer un nouvel utilisateur dans le systÚme.

/ etc / ssh / sshd_config
..... #    root PermitRootLogin no #   ,   ChallengeResponseAuthentication no #   ,   PAM   UsePAM no .... 

Une telle configuration est tout Ă  fait suffisante pour se protĂ©ger contre l'Ă©numĂ©ration de masse des mots de passe, car le serveur SSH fermera simplement la connexion lors de la tentative de connexion avec un mot de passe. MĂȘme avec un grand nombre de connexions, elles se fermeront assez rapidement sans crĂ©er de charge importante sur le serveur. À mon avis, avec cette configuration, il n'est pas nĂ©cessaire d'installer des fonctionnalitĂ©s de sĂ©curitĂ© supplĂ©mentaires comme fail2ban.

Souvent, les administrateurs dĂ©butants dans leurs manuels conseillent de changer le port SSH et d'installer une sorte de port non standard comme 2222 au lieu de 22 . À mon avis, c'est une mauvaise pratique qui n'ajoute aucune sĂ©curitĂ©.

  • Cela ne vous permettra pas de vous protĂ©ger contre le craquage de mot de passe, car les scanners automatiques trouveront toujours SSH sur n'importe quel port et commenceront Ă  marteler.
  • Cela gĂąche si plusieurs personnes administrent le systĂšme et inventent chacune leurs propres ports. Lorsqu'il existe des dizaines de ces systĂšmes, vous devez rechercher le scanner sur quel port le SSH est masquĂ© cette fois.
  • Cela rompt les restrictions de sĂ©curitĂ© intĂ©grĂ©es dans les programmes. Par exemple, les navigateurs Web ne se connecteront pas au port 22 si vous le spĂ©cifiez explicitement dans HTTP, mais en mĂȘme temps vous connectez Ă  un autre port non standard. Cela peut ĂȘtre utilisĂ© pour dĂ©clencher des systĂšmes IDS / IPS DDoS.



Tmux - une seule fenĂȘtre pour tout gouverner


Tmux est un programme incroyablement pratique pour gérer des terminaux virtuels, sans lequel je ne peux tout simplement pas imaginer mon travail. Au début, cela semble déroutant et compliqué, mais si vous vous maßtrisez et apprenez à l'utiliser, vous ne pouvez plus le refuser.

Pour ceux qui ne savent pas ce qu'est tmux, imaginez un navigateur Web Ă  onglets, mais au lieu de sites, il y a des sessions de console. Vous pouvez ouvrir un nombre infini d'onglets et exĂ©cuter dans chaque onglet votre programme. En mĂȘme temps, il s'exĂ©cute sur le serveur, et vous pouvez vous en dĂ©connecter Ă  tout moment, tandis que tous les onglets et programmes en cours d'exĂ©cution resteront Ă  leur place et vous pourrez y revenir.

Installez tmux s'il n'est pas déjà installé:
 apt install tmux 

Dans la terminologie tmux, un ensemble de fenĂȘtres distinct est appelĂ© une session. Nous n'utiliserons qu'une seule session par dĂ©faut, donc nous n'utiliserons pas du tout les noms de session. Mais il est important de savoir qu'il peut y en avoir plusieurs si nĂ©cessaire.

Créez une nouvelle session:
 tmux new 

À ce moment, nous avons crĂ©Ă© une nouvelle session avec une fenĂȘtre et nous y sommes immĂ©diatement connectĂ©s. Vous pouvez voir la barre d'Ă©tat verte qui apparaĂźt ci-dessous. Cela ressemble Ă  une barre Ă  onglets dans un navigateur. Il affichera l'onglet actuel et les messages voisins, ainsi que les messages de service.

La barre d'Ă©tat tmux affiche les noms des fenĂȘtres (onglets)
À ce stade, mĂȘme si nous fermons la connexion SSH et nous nous reconnectons au serveur, notre session tmux en cours d'exĂ©cution restera dans le mĂȘme Ă©tat, avec tous les programmes en cours d'exĂ©cution, comme si nous la minimisions. Essayons d'exĂ©cuter le programme supĂ©rieur dans la session tmux et dĂ©connectons-nous de celle-ci. Pour plus de clartĂ©, fermez complĂštement la fenĂȘtre du terminal et reconnectez-vous au serveur.

AprĂšs vous ĂȘtre reconnectĂ© au serveur, nous nous connecterons Ă  notre session prĂ©cĂ©demment lancĂ©e:
 tmux attach 

Et assurez-vous que le programme en cours d'exĂ©cution continue de fonctionner. À ce stade, il est important de comprendre le principe principal: aprĂšs le dĂ©marrage de la session tmux, il reste Ă  travailler en arriĂšre-plan sur le serveur, que vous y soyez connectĂ© ou non.

Étant donnĂ© que la session tmux permet plusieurs connexions simultanĂ©es, cela peut ĂȘtre utilisĂ© pour la collaboration de plusieurs personnes sur le serveur pour voir la mĂȘme console en temps rĂ©el. Pour ce faire, tout le monde se connecte au mĂȘme serveur sous le mĂȘme compte et saisit tmux attach. LĂ , vous pouvez discuter, directement sur la ligne de commande. Nous l'utilisons souvent afin de ne pas se jeter le journal de la console dans le messager, mais de travailler immĂ©diatement sur un terminal.


Tmux peut diviser une fenĂȘtre en plusieurs (chaque fenĂȘtre Ă  l'intĂ©rieur d'un onglet est appelĂ©e volet), ce qui est pratique lorsque vous devez voir deux consoles en mĂȘme temps. Par exemple, dans une fenĂȘtre, modifiez le script et dans une autre, consultez le journal.

tmux vous permet de crĂ©er plusieurs fenĂȘtres Ă  l'intĂ©rieur d'une seule et de les redimensionner

Par défaut, Ctrl + b est utilisé pour contrÎler tmux. AprÚs avoir appuyé sur cette touche de raccourci de contrÎle, tmux s'attend à entrer la commande principale à partir d'une seule lettre.

Voici les commandes de base:
Ctrl + b + c - (crĂ©er) CrĂ©er une nouvelle fenĂȘtre (onglet)
Ctrl + b + <chiffre> - DĂ©placer vers le numĂ©ro de tabulation N, oĂč le chiffre est une clĂ© de 0 Ă  9. La numĂ©rotation des fenĂȘtres commence Ă  zĂ©ro.
Ctrl + b + x - ferme la fenĂȘtre actuelle. Si la derniĂšre fenĂȘtre est fermĂ©e, la session tmux se terminera.
Ctrl + b + w - affiche une liste de toutes les fenĂȘtres que vous pouvez dĂ©placer vers le haut et vers le bas avec les boutons du curseur et sĂ©lectionnez celle souhaitĂ©e en appuyant sur entrĂ©e.
Ctrl + b + " - diviser la fenĂȘtre en deux horizontalement et en crĂ©er une nouvelle
Ctrl + b +% - diviser la fenĂȘtre verticalement et en crĂ©er une nouvelle
Ctrl + b +, - renommer la fenĂȘtre courante
Ctrl + b + bas / haut / gauche / droite - se dĂ©placer dans le volet Ă  l'intĂ©rieur de la fenĂȘtre
Ctrl + b + page haut / page bas - faites défiler vers le haut
Ctrl + b + / - recherche par historique, comme dans vim ou moins

Ce sont tous les raccourcis clavier dont j'avais besoin pendant 10 ans d'utilisation de tmux. En fait, il y en a beaucoup plus, mais pour commencer, il vaut mieux s'y attarder.

Config Tmux


Je trouve la touche de raccourci Ctrl + b inconfortable, car il faut trop appuyer sur trois touches pour une action. Le thĂšme des configs tmux est un domaine distinct du goĂ»t, et chaque utilisateur expĂ©rimentĂ© a sa propre vision de la façon de l'utiliser correctement et commodĂ©ment. Il y a mĂȘme des sĂ©lections d' auteurs entiĂšres de configurations et de thĂšmes pour tmux.

Pour commencer, je donnerai un exemple de ma config qui, il me semble, rĂ©sout toutes les difficultĂ©s qui empĂȘchent le dĂ©veloppement rapide de tmux. La configuration se trouve dans le dossier d'accueil avec le nom ~ / .tmux.conf

 #  ctrl+b    .   macbook        set-option -g prefix ` #     <`>  `+a bind-key a send-prefix #       set -g base-index 1 set-option -g base-index 1 setw -g pane-base-index 1 # Lowers the delay time between the prefix key and other keys - fixes pausing in vim set-option -sg escape-time 1 #     1000 .      set -g history-limit 1000 #    # default statusbar colors set-option -g status-fg white set-option -g status-bg default # default window title colors set-window-option -g window-status-fg default set-window-option -g window-status-bg default #        #------------------ # Respawn windows when PANE IS DEAD bind-key R respawn-window #   default   local new -d -s default -n local #     irc   irssi neww -d -n irc irssi #     superserver   ssh root@superserver.com neww -d -n superserver ssh root@superserver.com #     anotherserver   ssh root@123.123.123.123 neww -d -n superserver anotherserver root@123.123.123.123 


Cette configuration vous permet de crĂ©er automatiquement plusieurs fenĂȘtres au dĂ©marrage, dans lesquelles les sessions SSH dĂ©marrent immĂ©diatement. Dans ce cas, il n'est pas nĂ©cessaire de crĂ©er manuellement une nouvelle session avec la commande tmux new , il suffit de toujours saisir tmux attach . Si la session n'existait pas auparavant, elle sera crĂ©Ă©e.

Autostart tmux


Nous voulons que lors de la connexion Ă  un serveur de terminaux, nous entrions immĂ©diatement dans tmux, mĂȘme si le serveur a Ă©tĂ© redĂ©marrĂ© et que la session tmux a Ă©tĂ© fermĂ©e.

Pour ce faire, ajoutez tmux Ă  la fin du fichier ~ / .bashrc . Il est important de se rappeler qu'une telle conception ne fonctionnera qu'avec la configuration ci-dessus.
 if [ ! "$TMUX" ]; then tmux attach fi if [ "$TMUX" ]; then export TERM=screen fi 


Cette condition simple signifie que si nous ne sommes pas dans tmux, nous y sommes connectés.

Ceci termine la configuration tmux sur le serveur Terminal Server. DĂ©sormais, pour chaque nouvelle connexion SSH, nous crĂ©erons une fenĂȘtre sĂ©parĂ©e dans tmux. Et mĂȘme si la connexion au serveur Terminal Server est perdue, toutes les connexions SSH resteront actives.

Mosh - Plus de pauses


Nous devons maintenant fournir une connexion continue au serveur Terminal Server, qui sera toujours actif. MĂȘme si nous avons fermĂ© l'ordinateur portable pendant plusieurs jours et l'avons ouvert dans un autre rĂ©seau wifi, la connexion devrait ĂȘtre rĂ©tablie elle-mĂȘme.

Mosh est un module complĂ©mentaire sur un serveur OpenSSH standard, qui vous permet d'oublier les dĂ©connexions. Mosh se connecte Ă  l'aide de SSH standard, aprĂšs quoi un canal UDP distinct est levĂ©, qui est instantanĂ©ment restaurĂ© aprĂšs une pause, mĂȘme si votre adresse IP externe est modifiĂ©e.
Comme nous devons maintenir une connexion constante avec le serveur de terminaux, nous n'installerons mosh que sur le serveur et sur notre ordinateur de travail. Dans le mĂȘme temps, vous n'avez pas besoin d'installer quoi que ce soit sur les serveurs distants, car les connexions avec eux vivent dĂ©jĂ  pour toujours dans tmux.

Installez mosh sur le serveur:
 apt install mosh 


Installez mosh sur notre ordinateur de travail. Il est disponible pour tous les principaux systÚmes d'exploitation, mais le client natif est uniquement pour les systÚmes d'exploitation de type Unix. La version Windows est implémentée à l'aide de Cygwin ou de l'application Chrome.

J'utilise macOS et j'installe mosh via le gestionnaire de paquets de brassage:
 brew install mosh 


Dans la plupart des cas, mosh ne nécessite pas de configuration supplémentaire et fonctionne dÚs la sortie de l'emballage. Il suffit d'écrire mosh au lieu de la commande ssh:
 mosh user@my-server.com 


Pour les configurations non standard, la commande semble un peu plus compliquée. Par exemple, si vous devez spécifier le port et le chemin de clé:

 mosh --ssh="ssh -p 2222 -i /path/to/ssh.key" user@my-server.com 


Mosh effectue l'authentification principale en tant que client SSH standard, autorisant le port standard 22. En mĂȘme temps, le serveur mosh n'Ă©coute initialement aucun port, et Ă  part le dĂ©mon OpenSSH d'origine, aucun port n'est ouvert sur le serveur. AprĂšs la connexion via TCP, mosh s'exĂ©cute sur le serveur dans l'espace utilisateur et ouvre un tunnel supplĂ©mentaire via UDP.


Organigramme du protocole Mosh

Maintenant, la session mosh en cours d'exécution sur le client sera toujours restaurée lorsque Internet apparaßtra. Sur mon ordinateur portable, je garde une session ouverte pendant des mois sans redémarrer et je n'ai pas besoin de me connecter constamment au serveur Terminal Server, cela fonctionne toujours.

Afin de ne pas entrer à chaque fois une commande de connexion longue au serveur Terminal Server, j'ai créé un alias de la commande de connexion à partir d'une seule lettre:

 alias t='mosh --ssh="ssh -p 443 -i /path/to/ssh.key" user@my-server.com' 


Conclusion



Ce schéma simple vous permet d'économiser considérablement du temps et des nerfs, de ne pas perdre le résultat du travail lorsque SSH est cassé. Je dois constamment voir comment les administrateurs novices commencent à se connecter à leurs serveurs à chaque fois et tuent les sessions SSH collantes.
Cela peut sembler déroutant à premiÚre vue, mais je vous assure qu'une fois que vous vous maßtriserez et vous y habituerez, vous commencerez à regarder avec un regret condescendant ceux qui ont encore des connexions SSH rompues.



Abonnez-vous à notre développeur Instagram


Source: https://habr.com/ru/post/fr472746/


All Articles