管理员终端服务器; SSH差距不大



如果您的工作需要保持到不同服务器的大量SSH会话,则您可能知道当切换到另一个Wi-Fi或Internet暂时丢失时,它们如何轻易中断。 但是,如果我告诉您所有这些问题已得到长期解决,而您却忘了会话中断和不断重新连接,该怎么办?

打开笔记本电脑的盒盖,我所有数十个SSH会话都可以立即访问,并且处于我离开状态相同的状态。 本文介绍如何为系统管理员配置终端服务器。 使用这样的服务器可以让您忘记断开的SSH会话,并不断重新连接并输入密码。



服务器设置


这个想法很简单,并且在帖子标题中的图片中清楚地说明:我们将所有SSH连接保留在特殊的终端服务器上。 该服务器将成为我们管理其他服务器的入口。 同时,终端服务器不需要配置或安装其他软件。
几乎任何配置都适用于终端服务器,但是最好有更多的RAM在每个会话中存储控制台日志,并且能够随时向上滚动历史记录并查看一个月前在会话服务器上的操作。 通常1-2GB的内存就足够了。

发行选择


在终端服务器中,最重要的是正常运行时间,因为我们重启的次数越少,我们的SSH会话就越活跃。 因此,我们选择最保守的LTS(长期支持)分布,例如稳定的debian或ubuntu分支。 我们配置自动更新(无人值守升级),这样程序突然重启就不足为奇了。

SSH服务器设置


由于终端服务器将立即打开对我们所有服务器的访问权限,因此可以安全地保护它。 为此,我们禁止使用密码进行身份验证,仅允许使用密钥进行访问,并且还禁止以root用户身份登录。
首先,您需要在系统中创建一个新用户。

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

这样的配置足以防止大量的密码枚举,因为SSH服务器在尝试使用密码登录时将简单地关闭连接。 即使有大量连接,它们也将足够快地关闭,而不会在服务器上造成很大的负载。 我认为,使用此配置,无需安装其他安全功能,例如fail2ban。

通常,初级管理员在其手册中建议更改SSH端口并安装某种非标准端口,例如2222而不是22 。 我认为这是一种不好的做法,不会增加任何安全性。

  • 这将使您无法保护自己免受密码破解的侵害,因为自动扫描程序仍会在任何端口上找到SSH并开始受到攻击。
  • 如果几个人管理系统并且每个人都发明自己的端口,那么这将很麻烦。 当有数十个这样的系统时,您必须寻找扫描器,这一次SSH隐藏在哪个端口上。
  • 这打破了程序中内置的安全限制。 例如,如果您在HTTP中明确指定端口22,Web浏览器将不会连接到端口22,但同时会连接到另一个非标准端口。 这可用于触发IDS / IPS DDoS系统。



Tmux-一扇统治一切的窗口


Tmux是用于管理虚拟终端的非常方便的程序,没有它,我简直无法想象我的工作。 乍一看,它似乎令人困惑和复杂,但是如果您压倒一切并学习如何使用它,您将无法再拒绝它。

对于那些不知道tmux是什么的人,可以想象使用标签式Web浏览器,但是控制台站点代替了站点。 您可以打开无数个选项卡,然后在每个选项卡中运行程序。 同时,它正在服务器上运行,您可以随时断开与它的连接,而所有正在运行的选项卡和程序都将保留在它们的位置,您可以返回它们。

如果尚未安装,请安装tmux:
 apt install tmux 

用tmux术语来说,一组单独的窗口称为会话。 默认情况下,我们将仅使用一个会话,因此我们将完全不使用会话名称。 但重要的是要知道,如有必要,可以有多个。

创建一个新会话:
 tmux new 

此时,我们创建了一个具有一个窗口的新会话,并立即连接到该窗口。 您可以看到下面显示的绿色状态栏。 这有点像浏览器中的选项卡式栏。 它将显示当前标签页和邻近标签以及服务消息。

tmux状态栏显示窗口(选项卡)名称
此时,即使我们关闭SSH连接并重新连接到服务器,我们正在运行的tmux会话以及所有正在运行的程序仍将保持相同的状态,就好像我们将其最小化一样。 让我们尝试在tmux会话中运行顶层程序,并断开其连接。 为了清楚起见,请完全关闭终端窗口,然后重新连接到服务器。

重新连接到服务器后,我们将连接到先前启动的会话:
 tmux attach 

并确保运行最高的程序继续运行。 在这一点上,重要的是要了解主要原理:启动tmux会话后,无论是否连接到服务器,它都始终在服务器的后台运行。

由于tmux会话允许同时进行多个连接,因此可用于服务器上几个人的协作以实时查看同一控制台。 为此,每个人都使用相同的帐户连接到相同的服务器,然后输入tmux attach。 您可以在命令行上在那里聊天。 我们经常使用此命令,以便不使控制台日志在Messenger中相互抛弃,而是立即在一个终端上工作。


Tmux可以将一个窗口划分为多个窗口(选项卡中的每个窗口称为窗格),当您需要同时查看两个控制台时,这非常方便。 例如,在一个窗口中,编辑脚本,在另一个窗口中,查看日志。

tmux允许您在一个内部创建多个窗口并调整其大小

默认情况下, Ctrl + b用于控制tmux。 按下此控制热键后,tmux希望从单个字母输入主命令。

以下是基本命令:
Ctrl + b + c- (创建)创建新窗口(标签)
Ctrl + b + <数字> -移至选项卡编号N,其中数字为0至9的键。窗口编号从零开始。
Ctrl + b + x-关闭当前窗口。 如果关闭了最后一个窗口,则tmux会话将结束。
Ctrl + b + w-显示所有窗口的列表,您可以使用光标按钮上下移动这些窗口,然后按Enter键选择所需的窗口。
Ctrl + b +“ -将窗口水平分成两半,然后创建一个新窗口
Ctrl + b +% -垂直拆分窗口并创建一个新窗口
Ctrl + b + -重命名当前窗口
Ctrl + b +向下/向上/向左/向右 -在窗口内的窗格中移动
Ctrl + b +向上翻页/向下翻页-向上滚动
Ctrl + b + / -按历史记录搜索,不超过vim

这些都是我使用tmux 10年以上所需的所有热键。 实际上,还有很多,但是从一开始,最好将它们放在上面。

配置多路复用器


我发现Ctrl + b热键不舒服,因为按任何三个操作键都花太多时间。 tmux配置的主题是一个单独的口味区域,每个经验丰富的用户对于如何正确,方便地使用它都有自己的见解。 甚至有整个作者为tmux 选择的配置和主题

首先,我将举例说明我的配置,在我看来,该示例解决了阻止tmux快速开发的所有困难。 该配置位于主文件夹中,名称为〜/ .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 


通过此配置,您可以在启动时自动创建多个窗口,并在其中立即启动SSH会话。 在这种情况下,不必使用tmux new命令手动创建新会话,而足以始终输入tmux attach 。 如果之前不存在该会话,则将创建该会话。

自动启动tmux


我们希望在连接到终端服务器时立即进入tmux,即使服务器已重新启动且tmux会话已关闭。

为此,请在〜/ .bashrc文件的末尾添加tmux。 重要的是要记住,这种设计仅适用于上述配置。
 if [ ! "$TMUX" ]; then tmux attach fi if [ "$TMUX" ]; then export TERM=screen fi 


这个简单的条件意味着如果我们不在tmux中,那么我们就已经连接到它了。

这样就完成了终端服务器上的tmux配置。 从现在开始,对于每个新的SSH连接,我们将在tmux中创建一个单独的窗口。 即使与终端服务器的连接丢失,所有SSH连接也将保持活动状态。

莫什-没有更多的休息


现在,我们需要提供与终端服务器的连续连接,该连接将始终处于活动状态。 即使我们关闭了笔记本电脑几天并在另一个wifi网络中打开它,连接也应该自行恢复。

Mosh是常规OpenSSH服务器上的附加组件,它使您无需担心断开连接。 Mosh使用常规SSH登录,此后将引发一个单独的UDP通道,即使您的外部IP地址已更改,该通道也会在中断后立即恢复。
由于我们需要保持与终端服务器的恒定连接,因此我们将仅在服务器和工作计算机上安装mosh。 同时,您无需在远程服务器上安装任何软件,因为与它们的连接已经永久存在于tmux中。

在服务器上安装mosh:
 apt install mosh 


在我们的工作计算机上安装mosh。 它适用于所有主要操作系统,但本机客户端仅适用于类似Unix的操作系统。 Windows版本是使用Cygwin或Chrome应用程序实现的。

我使用macOS并通过Brew软件包管理器安装mosh:
 brew install mosh 


在大多数情况下,mosh不需要其他配置,可以直接使用。 编写mosh而不是ssh命令就足够了:
 mosh user@my-server.com 


对于非标准配置,该命令看起来有些复杂。 例如,如果您需要指定端口和密钥路径:

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


Mosh作为常规SSH客户端执行主要身份验证,并授权给标准端口22。与此同时,mosh服务器最初不侦听任何端口,并且除了原始的OpenSSH守护程序外,服务器上没有打开任何端口。 通过TCP连接后,mosh在用户空间中的服务器上运行,并通过UDP打开另一个隧道。


Mosh协议流程图

现在,当Internet出现时,将始终恢复在客户端上运行的mosh会话。 在我的笔记本电脑上,我连续打开了一个mosh会话达数月之久,而无需重新启动,而且我不必始终不断地登录到终端服务器,它始终可以正常工作。

为了不每次都向终端服务器输入长连接命令,我用一个字母作为连接命令的别名:

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


结论



这种简单的方案可让您大大节省时间和精力,而不会在SSH损坏时丢失工作结果。 我经常要看到新手管理员如何开始每次登录服务器并杀死粘性SSH会话。
乍一看似乎有些令人困惑,但是我向您保证,一旦您克服了压力并习惯了它,对于那些仍然断开SSH连接的用户,您将怀着屈服的遗憾开始。



订阅我们的Instagram开发人员


Source: https://habr.com/ru/post/zh-CN472746/


All Articles