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
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.
Excelente artigo, estou ansioso para chegar em casa e começar a praticá-los.
Muito obrigado! Na verdade, é meu primeiro post no blog e é muito bom ler esses comentários. Saudações!
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.
Você pode fazer isso com RSYNC sobre SSH. 😉
rsync é a tampa da jarra !!! 😀
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
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
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.
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.
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?
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
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!
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
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?
Para algo assim, seria conveniente usar o VNC e você pode criar um túnel com SSH.
@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
@ 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.
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.
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
É o encaminhamento X11, aqui neste mesmo site há um post sobre isso:
https://blog.desdelinux.net/x11-forwarding-a-traves-de-ssh/
Obrigado pela informação amigos.
Eu disse, vou fazer isso usando as duas opções para ver qual delas me serve melhor.
Saudações!