
Se o seu trabalho exigir a manutenção de várias sessões SSH em servidores diferentes, você provavelmente saberá como elas se quebram facilmente ao mudar para outro Wi-Fi ou quando a Internet está temporariamente perdida. Mas e se eu lhe disser que todos esses problemas foram resolvidos há muito tempo e você pode esquecer as sessões interrompidas e as reconexões constantes?
Abrindo a tampa do laptop, todas as minhas dezenas de sessões SSH estão imediatamente acessíveis e no mesmo estado em que as deixei. Este artigo descreve como configurar um servidor de terminal para um administrador do sistema. O uso desse servidor permite que você esqueça as sessões SSH quebradas, reconectando e inserindo senhas constantemente.
Configuração do servidor
A idéia é simples e claramente ilustrada na figura no título da postagem: manteremos todas as conexões SSH em um servidor de terminal especial. Este servidor será nosso ponto de entrada para gerenciar outros servidores. Ao mesmo tempo, os servidores finais não precisam configurar ou instalar software adicional.
Quase todas as configurações são adequadas para um servidor de terminal, mas é melhor ter mais RAM para armazenar o log do console em cada sessão e poder rolar o histórico a qualquer momento e ver o que você fez no servidor de sessões há um mês. Normalmente, 1-2 GB de memória são suficientes.
Escolha de distribuição
No servidor de terminal, o mais importante é o tempo de atividade, porque, com menos frequência de reinicialização, mais nossas sessões SSH permanecem. Portanto, escolhemos a distribuição LTS (Long Term Support) mais conservadora, por exemplo, um ramo estável do debian ou ubuntu. Configuramos atualizações automáticas (atualizações autônomas) para que uma reinicialização repentina de programas não seja uma surpresa.
Configuração do servidor SSH
Como o servidor de terminal abrirá o acesso a todos os nossos servidores ao mesmo tempo, será seguro protegê-lo. Para fazer isso, proibimos a autenticação com senhas, deixando apenas o acesso com chaves, e também proibimos o login como root.
Primeiro, você precisa criar um novo usuário no sistema.
/ etc / ssh / sshd_config.....
Essa configuração é suficiente para proteger contra a enumeração em massa de senhas, já que o servidor SSH simplesmente fechará a conexão ao tentar efetuar login com uma senha. Mesmo com um grande número de conexões, elas fecharão rápido o suficiente sem criar uma carga significativa no servidor. Na minha opinião, com essa configuração, não há necessidade de instalar recursos de segurança adicionais, como fail2ban.
Freqüentemente, os administradores iniciantes em seus manuais aconselham alterar a porta SSH e instalar algum tipo de porta não padrão como 2222 em vez de 22 . Na minha opinião, essa é uma prática ruim que não adiciona nenhuma segurança.
- Isso não permitirá que você se proteja contra a quebra de senha, pois os scanners automáticos ainda encontrarão o SSH em qualquer porta e começarão a martelar.
- Isso causa confusão se várias pessoas administram o sistema e cada uma inventa suas próprias portas. Quando existem dezenas desses sistemas, é necessário procurar o scanner em qual porta o SSH está oculto dessa vez.
- Isso quebra as restrições de segurança internas nos programas. Por exemplo, os navegadores da Web não se conectam à porta 22 se você a especificar explicitamente em HTTP, mas ao mesmo tempo se conectar a outra porta não padrão. Isso pode ser usado para acionar sistemas IDS / IPS DDoS.
Tmux - uma janela para governar tudo
O Tmux é um programa incrivelmente conveniente para gerenciar terminais virtuais, sem o qual eu simplesmente não consigo imaginar meu trabalho. A princípio, parece confuso e complicado, mas se você se dominar e aprender a usá-lo, não poderá mais recusá-lo.
Para quem não sabe o que é o tmux, imagine um navegador com guias, mas em vez de sites, existem sessões de console. Você pode abrir um número infinito de guias e, em cada guia, executar seu programa. Ao mesmo tempo, ele está sendo executado no servidor e você pode desconectá-lo a qualquer momento, enquanto todas as guias e programas em execução permanecerão em seu lugar e você poderá retornar a eles.
Instale o tmux se ainda não estiver instalado:
apt install tmux
Na terminologia tmux, um conjunto separado de janelas é chamado de sessão. Usaremos apenas uma sessão por padrão; portanto, não usaremos nomes de sessão. Mas é importante saber que pode haver mais de um, se necessário.
Crie uma nova sessão:
tmux new
Nesse momento, criamos uma nova sessão com uma janela e imediatamente conectamos a ela. Você pode ver a barra de status verde que aparece abaixo. Isso é algo como uma barra com guias em um navegador. Ele exibirá a guia atual e as vizinhas, bem como as mensagens de serviço.
A barra de status do tmux exibe os nomes da janela (guia)Nesse ponto, mesmo que fechemos a conexão SSH e reconectemos ao servidor, nossa sessão tmux em execução permanecerá no mesmo estado, juntamente com todos os programas em execução, como se a minimizássemos. Vamos tentar executar o programa
principal dentro da sessão tmux e desconectá-lo. Para maior clareza, feche completamente a janela do terminal e reconecte-se ao servidor.
Após reconectar ao servidor, conectaremos à nossa sessão lançada anteriormente:
tmux attach
E verifique se o programa em execução continua funcionando. Neste ponto, é importante entender o princípio principal: após iniciar a sessão do tmux, resta trabalhar em segundo plano no servidor, independentemente de você estar ou não conectado a ele.
Como a sessão do tmux permite várias conexões simultâneas, isso pode ser usado para a colaboração de várias pessoas no servidor para ver o mesmo console em tempo real. Para fazer isso, todos se conectam ao mesmo servidor na mesma conta e insira tmux attach. Lá você pode conversar, diretamente na linha de comando. Geralmente, usamos isso para não lançar o log do console um ao outro no messenger, mas trabalhar imediatamente em um terminal.
O Tmux pode dividir uma janela em várias (cada janela dentro de uma guia é chamada de painel), isso é conveniente quando você precisa ver dois consoles ao mesmo tempo. Por exemplo, em uma janela, edite o script e, em outra, observe o log.
O tmux permite criar várias janelas dentro de uma e redimensioná-lasPor padrão,
Ctrl + b é usado para controlar o tmux. Depois de pressionar esta tecla de atalho de controle, o tmux espera inserir o comando principal a partir de uma única letra.
Aqui estão os comandos básicos:
Ctrl + b + c - (criar) Crie uma nova janela (guia)
Ctrl + b + <dígito> - Mova para o número da guia N, onde o dígito é uma tecla de 0 a 9. A numeração da janela começa do zero.
Ctrl + b + x - fecha a janela atual. Se a última janela for fechada, a sessão do tmux será encerrada.
Ctrl + b + w - exibe uma lista de todas as janelas que você pode mover para cima e para baixo com os botões do cursor e selecione a desejada pressionando enter.
Ctrl + b + " - divide a janela ao meio horizontalmente e cria uma nova
Ctrl + b +% - divida a janela verticalmente e crie uma nova
Ctrl + b +, - renomeia a janela atual
Ctrl + b + baixo / cima / esquerda / direita - mova-se pelo painel dentro da janela
Ctrl + b + página acima / página abaixo - rolar para cima
Ctrl + b + / - pesquisa por histórico, como no vim ou menos
Estas são todas as teclas de atalho que eu precisava durante 10 anos usando o tmux. De fato, existem muitos mais, mas, para começar, é melhor insistir neles.
Config Tmux
Acho as
teclas de atalho
Ctrl + b desconfortáveis, pois é preciso muito para pressionar três teclas para qualquer ação. O tema das configurações do tmux é uma área de gosto separada, e cada usuário experiente tem sua própria visão de como usá-lo corretamente e convenientemente. Existem até
seleções de configurações e temas do autor para o tmux.
Para começar, darei um exemplo da minha configuração, que, a meu ver, corrige todas as dificuldades que impedem o rápido desenvolvimento do tmux. A configuração está localizada na pasta inicial com o nome
~ / .tmux.conf
Essa configuração permite criar automaticamente várias janelas na inicialização, nas quais as sessões SSH são iniciadas imediatamente. Nesse caso, não é necessário criar manualmente uma nova sessão com o comando
tmux new ; é suficiente inserir sempre o
tmux attach . Se a sessão não existia antes, ela será criada.
Iniciar automaticamente o tmux
Queremos que, ao conectar-se a um servidor de terminal, entremos imediatamente no tmux, mesmo que o servidor tenha sido reinicializado e a sessão do tmux tenha sido fechada.
Para fazer isso, adicione tmux no final do
arquivo ~ / .bashrc . É importante lembrar que esse design funcionará apenas com a configuração acima.
if [ ! "$TMUX" ]; then tmux attach fi if [ "$TMUX" ]; then export TERM=screen fi
Essa condição simples significa que, se não estivermos no tmux, estaremos conectados a ele.
Isso completa a configuração do tmux no servidor de terminal. A partir de agora, para cada nova conexão SSH, criaremos uma janela separada no tmux. E mesmo se a conexão com o servidor de terminal for perdida, todas as conexões SSH permanecerão ativas.
Mosh - Não há mais pausas
Agora precisamos fornecer uma conexão contínua com o servidor de terminal, que estará sempre ativo. Mesmo se fechamos o laptop por vários dias e o abrimos em outra rede wifi, a conexão deve ser restaurada.
Mosh é um complemento em um servidor OpenSSH comum, que permite que você esqueça as desconexões. O Mosh efetua login usando SSH regular, após o qual um canal UDP separado é gerado, que é restaurado instantaneamente após uma interrupção, mesmo que seu endereço IP externo seja alterado.
Como precisamos manter uma conexão constante com o servidor de terminal, instalaremos o mosh apenas no servidor e em nosso computador de trabalho. Ao mesmo tempo, você não precisa instalar nada nos servidores remotos, pois as conexões com eles já vivem para sempre no tmux.
Instale o mosh no servidor:
apt install mosh
Instale o mosh no nosso computador de trabalho. Está disponível para todos os principais sistemas operacionais, mas o cliente nativo é apenas para sistemas operacionais semelhantes ao Unix. A versão do Windows é implementada usando o Cygwin ou o aplicativo Chrome.
Eu uso o macOS e instalo o mosh através do gerenciador de pacotes brew:
brew install mosh
Na maioria dos casos, o mosh não requer configuração adicional e funciona imediatamente. Basta escrever mosh em vez do comando ssh:
mosh user@my-server.com
Para configurações não padrão, o comando parece um pouco mais complicado. Por exemplo, se você precisar especificar a porta e o caminho da chave:
mosh --ssh="ssh -p 2222 -i /path/to/ssh.key" user@my-server.com
O Mosh executa autenticação primária como um cliente SSH regular, autorizando a porta padrão 22. Ao mesmo tempo, o servidor mosh não escuta inicialmente nenhuma porta e, além do daemon OpenSSH original, nenhuma porta está aberta no servidor. Após a conexão via TCP, o mosh é executado no servidor no espaço do usuário e abre um túnel adicional via UDP.
Fluxograma do protocolo MoshAgora, a sessão mosh em execução no cliente sempre será restaurada quando a Internet aparecer. No meu laptop, eu mantenho aberta uma sessão de mosh por meses sem reiniciar e não preciso fazer login constantemente no servidor de terminal novamente, ele sempre funciona.
Para não inserir um comando de conexão longo ao servidor de terminal a cada vez, criei um apelido para o comando de conexão a partir de uma letra:
alias t='mosh --ssh="ssh -p 443 -i /path/to/ssh.key" user@my-server.com'
Conclusão
Este esquema simples permite economizar significativamente tempo e nervos, para não perder o resultado do trabalho quando o SSH está quebrado. Eu constantemente tenho que ver como os administradores novatos começam a fazer logon nos servidores todas as vezes e matam sessões SSH complicadas.
Pode parecer confuso à primeira vista, mas garanto que, quando você se dominar e se acostumar, começará a olhar com pesar condescendente aqueles que ainda têm conexões SSH quebradas.

Inscreva-se no nosso desenvolvedor do Instagram
