SSH, mais do que um shell seguro

SSH (Secure Shell) é um protocolo que nos ajuda a acessar computadores remotos com segurança, basicamente como o Telnet, mas usando algoritmos de criptografia que nos ajudam a manter nossa conexão segura, especialmente se quisermos acessar computadores que desempenham alguma função importante dentro de uma organização.

Geralmente, para acessar devemos fornecer nosso nome de usuário e o endereço do computador, para que o servidor SSH nos solicite a senha de acesso:

ssh usuario@equiporemoto

A partir do momento em que o cliente inicia a primeira ligação entre o computador remoto e nós, a informação já está a viajar com segurança, impedindo que alguém obtenha as nossas credenciais de acesso ao referido computador, no entanto o SSH é um protocolo muito adaptável que nos oferece muitas possibilidades.

SCP

A primeira delas é poder transferir arquivos entre o cliente e o computador remoto, sem a necessidade de montar um servidor FTP ou NFS, simplesmente utilizando SCP (Secure CoPy) que a maioria dos servidores SSH implementa:

scp archivo.tar.gz usuario@equiporemoto:/home/usuario
scp usuario@equiporemoto:/var/log/messages messages.txt

Tunelamento SSH

Esta funcionalidade é muito útil, pois permite enviar e receber informações que não são necessariamente comandos de shell entre o cliente e o computador remoto, por exemplo, navegação normal. Se você não adivinhar que utilidade isso pode ter, pense no seguinte: você precisa acessar uma página, mas o local onde você está tem um firewall implementado que bloqueia exatamente essa página, portanto, podemos fazer 'tunelamento' com um controle remoto computador que não tem os referidos blocos e navegando na referida página através de nossa sessão SSH:

ssh -D 8888 usuario@equiporemoto

Uma vez conectado, nosso cliente SSH 'escuta' na porta 8888 como um servidor proxy, para que possamos configurar nosso navegador e todo o tráfego seja transmitido através da sessão SSH

Túnel SSH

Outro exemplo que me ocorre é quando, devido a alguma restrição geográfica, não conseguimos acessar um serviço web de onde estamos, ao fazer o túnel, esse serviço detecta como fonte o IP do nosso servidor remoto, não o IP do cliente. Isso é um pouco equivalente a VPNs (rede privada virtual)

SSH reverso

Se por algum motivo precisamos acessar um computador que está atrás de um firewall e ele não nos permite redirecionar o tráfego SSH para ele, podemos fazer um 'SSH reverso', de forma que esse computador se conecte a outro servidor SSH, ao qual também podemos nos conectar, para acessar o equipamento atrás do firewall. Um exemplo que vem à mente é quando queremos ajudar um amigo que não tem ideia de como configurar um redirecionamento em seu modem, mas precisamos acessar seu computador remotamente:

Amigo -> Modem -> Servidor SSH <- Sobre nós

As etapas a seguir são relativamente muito simples:

Amigo
ssh -R 9999:localhost:22 usuario@servidorssh

Nós
ssh usuario@servidorssh
Uma vez dentro do servidor SSH, podemos nos conectar com a equipe de nosso amigo usando
ssh amigo@localhost -p 9999

Como você pode ver, toda a mágica está no parâmetro -R, que informa ao servidor intermediário que na porta 9999 o computador de nosso amigo está escutando agora como um servidor.

Essas são apenas algumas possibilidades que o SSH nos oferece, mas convido você a experimentar algumas mais, por exemplo; podemos fazer scripts autônomos usando chaves RSA, redirecionar sessões X (modo gráfico) para nosso ambiente gráfico, apenas para citar alguns.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Astro dito

    Excelente artigo, estou ansioso para chegar em casa e começar a praticá-los.

    1.    adr14n dito

      Muito obrigado! Na verdade, é meu primeiro post no blog e é muito bom ler esses comentários. Saudações!

  2.   Pablo cardozo dito

    Ontem eu estava perguntando algo sobre esse assunto, e é o seguinte.

    Existe alguma maneira de conseguir scp para uma pasta inteira, mas levando em consideração a data dos arquivos? Em outras palavras, tenho uma pasta com muitos arquivos que baixei há algum tempo, estou interessado em baixar apenas o que foi carregado para essa pasta a partir de uma determinada data.

    Saudações e muito obrigado antecipadamente.

    1.    elav. dito

      Você pode fazer isso com RSYNC sobre SSH. 😉

      1.    moela dito

        rsync é a tampa da jarra !!! 😀

      2.    Eduardo dito

        Recomendo que você experimente o unison, é ESPECTACULAR, está disponível nos repositórios (debian e ubuntu pelo menos)

        http://www.cis.upenn.edu/~bcpierce/unison/

        Eu o uso para fazer backups diários de minhas anotações em outro computador, além de ter diretórios sincronizados em computadores diferentes.

        É muito fácil de usar

        Espero que seja útil para você!

        Sucessos
        Eduardo

    2.    Canhoto dito

      Isso parece mais uma tarefa para rsync, mas não sei se existe um parâmetro para fazer isso especificamente, se não, talvez teria que ser tratado a partir de um script

    3.    adr14n dito

      O que me ocorre é fazer um ls ordenado por data, e a partir daí copiar os que você precisa com um scp simples, pois o scp não tem tantas funções como dizem, tem rsync.

  3.   anônimo dito

    Atesto que o ssh reverso é luxuoso, usei entre meu pc e outro que estava a mais de 700Km de distância e zero problemas.
    Obrigado por esses artigos, eles são muito valiosos.

  4.   cessar dito

    Tão salgado! Haha eu não sabia que o ssh tinha tantas possibilidades, já quero aprender a configurar um servidor ssh e começar a experimentar suas capacidades, só uma coisa, você poderia explicar o que cada parâmetro faz?

    1.    adr14n dito

      De acordo com o ssh man, o -D é usado para especificar um 'encaminhador de aplicativo dinâmico' localmente, que, como expliquei no artigo, é usado para passar o tráfego por um túnel na mesma sessão SSH. O -R especifica a porta remota que será redirecionada para nosso computador local por meio de 'encaminhamento'. E, por fim, o -p especifica a qual porta o cliente deve se conectar, quando não usa a porta padrão: 22

  5.   Manuelmdn dito

    Que bom que toca nesse tópico, tenho uma dúvida sobre as chaves ssh, vocês podem gerar mais de uma chave para serviços diferentes? Espero que tenham feito um post sobre como gerenciar as chaves ssh, sei que no google existe a resposta, mas espero que eles falem sobre isso,

    Saudações!

    1.    adr14n dito

      Quando você usa autenticação usando chaves SSL, você pode exportar as mesmas (do seu computador) para serviços diferentes e da mesma forma, se o seu computador for o servidor, você pode incorporar chaves diferentes de computadores diferentes. Não sei se respondi sua pergunta, mas entendi isso. Saudações

  6.   Luis dito

    Acho que me lembro de que havia uma maneira de usar o ssh que nos permitia executar um aplicativo remotamente e visualizá-lo em nosso computador como se fosse um aplicativo local.

    Por exemplo, poderíamos executar o Firefox, podemos vê-lo e controlá-lo em nosso computador local, mas o processo é executado no computador remoto.

    Especialmente útil em computadores com poucos recursos, mas infelizmente não tenho controle do problema e não sei como configurar os computadores para fazer isso.

    Alguém sabe alguma coisa sobre isso?

    1.    Staff dito

      Para algo assim, seria conveniente usar o VNC e você pode criar um túnel com SSH.

      1.    x11tete11x dito

        @Staff para mim não seria conveniente usar VNC .. com VNC se eu não estou mal você traz toda a área de trabalho ..

        @Luis, o que você faz é simplesmente adicionando o parâmetro "-X" ao ssh (você deve permitir o encaminhamento do X em seu servidor)

        http://i.imgur.com/NCpfzBL.jpg

      2.    Staff dito

        @ x11tete11x
        Pelo que o Luis mencionou, pensei em lhe oferecer outra alternativa, pois:

        1. "Especialmente útil em computadores com poucos recursos ..."

        - No caso de um único aplicativo, ele pode não consumir tantos recursos, mas tentar abrir 10 janelas com x encaminhamento continua a fazer o sistema trabalhar mais difícil do que ter uma única instância VNC, já que o VNC não "traz toda a área de trabalho"
        - Ao fechar o programa no cliente ele acaba igual no servidor (Alguém me corrija se eu estiver errado), enquanto com o VNC você pode, por exemplo, deixar um download de torrent a noite toda e logar novamente pela manhã e tudo continuaria como eu havia partido.
        -VNC é um protocolo agnóstico de sistema, você pode acessá-lo de um cliente em Win, Andorid, Mac OSX, etc. e use seus programas GNU / Linux, sem ter que instalar nada além do próprio cliente VNC.

        E 2. "... infelizmente não controlo o problema e não sei como configurar os computadores para isso."

        É muito mais fácil (e sem risco de digitar algo errado e reiniciar sem desktop) instalar o VNC e configurar o túnel SSH (isso é feito com GUI) do que mover os arquivos de configuração do X.

      3.    Luis dito

        Obrigado a ambos por seus comentários.

        Eu uso SSH junto com SHFS há algum tempo para acessar conteúdo remoto em meu pequeno servidor, mas nunca consegui executar aplicativos remotos em um ambiente gráfico.

        Vou tentar as duas opções para ver como funciona. O que eu estava dizendo a princípio parece mais simples, pois de acordo com x11tete11x, você só precisa adicionar um parâmetro.

        Mais tarde verei se consigo encontrar uma maneira simples de configurar o VNC já que sou um pouco grande, sou um usuário do Arch então com certeza haverá informações no wiki, outra coisa é que eu descobri. hehehe

        Uma saudação.

    2.    adr14n dito

      Pode ser feito passando o parâmetro -X para a sessão, mas você tem que ter seu servidor X configurado para aceitar conexões de um computador da rede, acho que está configurado com o utilitário xhost. Como a equipe menciona, VNC também é uma opção muito boa

    3.    mario dito

      É o encaminhamento X11, aqui neste mesmo site há um post sobre isso:
      https://blog.desdelinux.net/x11-forwarding-a-traves-de-ssh/

    4.    Luis dito

      Obrigado pela informação amigos.

      Eu disse, vou fazer isso usando as duas opções para ver qual delas me serve melhor.

      Saudações!