Pesquisa de site

Uso e configuração de comando SSH mais comuns no Linux


Resumo: Neste guia, discutiremos os casos de uso comuns de SSH. Também discutiremos configurações SSH comumente usadas que podem ser usadas no dia a dia para aumentar sua produtividade.

Secure Shell (SSH) é um protocolo de rede amplamente adotado, que nos permite interagir com hosts remotos de forma segura. Ele fornece segurança criptografando toda a comunicação entre eles.

Como usar o comando SSH no Linux

Nesta seção, discutiremos alguns dos casos de uso populares do protocolo SSH.

Conecte-se ao host Linux remoto

Existem várias maneiras de interagir com hosts Linux remotos usando protocolos como telnet, ftp, netcat, etc. No entanto, estes não são seguros devido à ausência de criptografia. Podemos usar o protocolo SSH para permitir a comunicação segura entre os hosts.

Temos que usar um cliente SSH para interagir com o host remoto. Existem muitos clientes baseados em GUI e CLI disponíveis para Linux. Entretanto, ao longo deste guia, usaremos um utilitário de linha de comando chamado ssh. Por padrão, o utilitário ssh está disponível na maioria das distribuições Linux.

A sintaxe do comando SSH é a seguinte:

ssh [OPTIONS]  [COMMANDS] [ARGS]

Aqui, os colchetes ([]) representam os argumentos opcionais, enquanto os colchetes angulares (<>) representam os argumentos obrigatórios.

Vamos nos conectar ao host remoto usando o cliente ssh:

ssh -l root 192.168.19.130

Neste exemplo, especificamos o nome de login usando a opção -l e o destino é 192.168.19.130. A conexão SSH é estabelecida após inserir a senha correta. De agora em diante, podemos executar os comandos no host remoto da mesma forma que no sistema local.

hostname

Para encerrar a sessão, podemos usar o comando exit ou a combinação de teclas ctrl+D.

É importante observar que precisamos nos autenticar no host remoto para cada nova sessão. Para evitar inserir senhas todas as vezes, podemos configurar um login SSH sem senha.

Execute comandos no host remoto

Na seção anterior, vimos como estabelecer uma conexão com um host remoto, o que é adequado apenas quando vamos usar o host remoto por um período mais longo. Às vezes, só precisamos executar um ou dois comandos no host remoto. Nesses casos, podemos executar esses comandos sem criar uma sessão de longo prazo.

Vamos executar o comando hostname no host remoto:

ssh -l root 192.168.19.130 hostname

De maneira semelhante, podemos executar vários comandos em uma máquina Linux remota:

ssh -l root 192.168.19.130 'hostname; pwd'

É importante observar que os comandos devem ser colocados entre aspas e separados pelo caractere ponto e vírgula (;). Se você deseja executar comandos em vários hosts Linux remotos, leia nosso artigo – Pssh – Executar comandos em vários hosts Linux remotos.

Execute o script no host remoto

Semelhante aos comandos, também podemos executar um script local no host remoto. Vamos entender isso com um exemplo.

Primeiro, crie um script de shell simples em uma máquina local com permissões executáveis:

cat script.sh 

hostname
pwd

Agora, vamos executá-lo no host remoto:

ssh [email  'bash -s' < ./script.sh 

Neste exemplo, usamos a opção -s do bash para ler o script da entrada padrão.

Copiar arquivos entre os hosts

Trabalhamos com arquivos e diretórios com muita frequência. Uma operação comum que os usuários realizam é copiar diretórios e arquivos. Assim como as máquinas locais, podemos copiar arquivos e diretórios entre hosts remotos usando o comando scp, que copia os arquivos com segurança usando o protocolo SSH.

Vamos copiar o arquivo script.sh para o diretório /tmp do host remoto:

scp script.sh [email :/tmp

Agora, verifique se o arquivo foi copiado:

ssh [email  'ls /tmp/script.sh'

De forma semelhante, podemos usar o comando scp para copiar os diretórios. No entanto, temos que usar a opção -r com o comando.

Habilitar compactação para SSH

SSH suporta compactação de dados usando o algoritmo de compactação gzip, que compacta todos os fluxos de dados possíveis, como stdin, stdout, stderr e assim por diante. Esta opção é muito útil ao usar conexões de rede lentas.

Podemos habilitar a compactação no SSH usando a opção -C:

ssh -C -l root 192.168.19.130 'hostname' 

Habilite o modo detalhado para SSH

Os usuários do Linux geralmente precisam depurar sessões SSH para investigar vários problemas relacionados à conexão e configuração SSH. Nesses casos, podemos ativar o modo detalhado que imprime os logs de depuração da sessão atual.

Vamos ativar o modo detalhado usando a opção -v:

ssh -v -l root 192.168.19.130 hostname

Além disso, podemos aumentar o nível de verbosidade usando as múltiplas opções -v.

  • -v – define o nível de verbosidade como 1 e fornece detalhes sobre as atividades do lado do cliente.
  • -vv – define o nível de verbosidade para 2 e fornece detalhes sobre as atividades do cliente e do servidor.
  • -vvv – define o nível de verbosidade para 3 e fornece informações mais detalhadas sobre as atividades do cliente e do servidor.

O nível máximo de verbosidade suportado pelo SSH é 3. Vamos ver isso em ação:

ssh -vvv -l root 192.168.19.130 hostname

No exemplo acima, debug1 representa a mensagem de depuração habilitada pelo nível de detalhamento 1. Da mesma forma, debug2 e debug3 representam as mensagens de depuração habilitadas pelo níveis de verbosidade 2 e 3, respectivamente.

Sequências de escape em SSH

Podemos usar sequências de escape com o SSH para gerenciar as sessões do terminal do cliente. Vamos discutir as sequências de escape comumente usadas com os casos de uso apropriados.

Suspendendo sessão SSH

Às vezes, temos que realizar algumas atividades na máquina local sem encerrar a sessão SSH atual. Nesse cenário, podemos suspender a sessão atual usando a sequência de teclas ~ + ctrl+z.

Primeiro, faça login no host remoto e execute o comando hostname:

ssh -l root 192.168.19.130
hostname

Em seguida, para suspender a sessão atual, primeiro digite o caractere til (~) e pressione as teclas ctrl+z. É importante observar que o caractere til (~) não será exibido no stdout até que pressionemos ctrl+z.

Agora, vamos verificar se a sessão foi suspensa:

jobs

Aqui, podemos ver que a sessão SSH atual está sendo executada em segundo plano.

Vamos retomar a sessão novamente usando o comando fg e executar o comando hostname:

fg %1

Encerrar sessão SSH congelada

Tenho certeza que você deve ter visto as sessões SSH congeladas, que acontecem quando a sessão é interrompida por uma rede instável. Aqui não podemos abortar a sessão usando o comando exit. No entanto, podemos encerrá-lo usando a sequência de teclas "~ + .".

Primeiro, faça login no host remoto:

ssh -l root 192.168.19.130

Agora use a combinação de teclas "~ + ." para encerrar a sessão atual.

Neste exemplo, podemos ver que SSH mostra a mensagem – Conexão com 192.168.19.130 fechada.

Listar sequência de escape suportada

Uma coisa interessante é que existe uma sequência de escape para listar todas as sequências de escape suportadas. Podemos usar o “~ + ? ” sequência de escape para listar as sequências de escape suportadas:

Aqui, temos que pressionar a tecla Enter para sair do menu de ajuda.

Como configurar SSH no Linux

Nesta seção, discutiremos a configuração do lado do servidor para proteger o servidor SSH. O servidor SSH armazena toda a sua configuração no arquivo /etc/ssh/sshd_config. É importante observar que é necessário acesso de usuário root para atualizar a configuração SSH.

Exibir banner SSH

Como prática recomendada, devemos sempre exibir o banner antes de estabelecer uma conexão SSH. Em alguns casos, desencoraja usuários não autorizados de acessar hosts remotos. Vamos ver como habilitar essa configuração passo a passo.

Primeiro, crie um arquivo de texto em um servidor remoto com uma mensagem de aviso:

vi /etc/banner.txt 

Em seguida, adicione a seguinte mensagem de banner:

*********************************************************************
Warning !!! You are trying to log in to techmint.com's server.
All the activities on this server are monitored.
Terminate the session immediately if you are not an authorized user.
*********************************************************************

Em seguida, abra o arquivo /etc/ssh/sshd_config e especifique o arquivo com a diretiva Banner:

Banner /etc/banner.txt

Agora, reinicie o serviço sshd e encerre a sessão usando o comando exit:

systemctl restart sshd
exit

Por fim, verifique o banner fazendo login no host remoto:

ssh -l root 192.168.19.130

Aqui podemos que o servidor exiba o banner SSH corretamente.

Desativar login raiz SSH

Até agora, usamos o usuário root para acessar o host remoto. No entanto, isso é contra o princípio do menor privilégio. Em um ambiente de produção, o acesso do usuário root é sempre restrito para melhorar a segurança.

Podemos usar a diretiva PermitRootLogin para desabilitar o login do usuário root.

Primeiro, abra o arquivo /etc/ssh/sshd_config e use a opção no com a diretiva PermitRootLogin:

PermitRootLogin no

Agora, reinicie o serviço sshd e encerre a sessão usando o comando exit:

systemctl restart sshd
exit

Finalmente, verifique isso criando uma nova sessão SSH:

ssh -l root 192.168.19.130

Aqui, podemos observar que não podemos fazer login no host remoto com o usuário root. Para permitir o login do usuário root podemos usar a opção yes com a mesma diretiva.

Alterar porta SSH padrão

Por padrão, SSH usa a porta TCP 22. No entanto, podemos configurar o SSH para rodar em uma porta diferente, ou seja, 8088.

Primeiro, abra o arquivo /etc/ssh/sshd_config e use o valor 8088 com a diretiva Port:

Port 8088

Em seguida, reinicie o serviço sshd e encerre a sessão:

systemctl restart sshd
exit

Agora, vamos fazer login no host remoto:

ssh -p 8088 -l root 192.168.19.130

Neste exemplo, usamos a opção -p para especificar o número da porta.

Em alguns casos, temos que realizar algumas outras etapas para permitir a comunicação em uma porta não padrão. Como identificar portas disponíveis, atualizar regras de firewall, configurações do SELinux, etc.

Neste artigo, discutimos o protocolo SSH e seus casos de uso comuns. A seguir, discutimos algumas opções comuns. Por fim, discutimos algumas das configurações para proteger o servidor SSH.

Você conhece algum outro melhor uso de comando SSH no Linux? Deixe-nos saber sua opinião nos comentários abaixo.