14 de mar de 2010

Acesso remoto Linux

Neste artigo vou descrever como acessar remotamente um servidor Linux, tanto com shell em modo texto, quanto em gráfico, e também transferindo arquivos entre as máquinas.

Para tanto, será necessário no mínimo os seguintes equipamentos:

  • Duas máquina Windows (XP ou superior)
  • Uma máquina Linux (Ubuntu ou Debian)

Deve ser disposta uma rede entre as máquinas de tal forma que:

  • Do Linux é possível “ver” ambas máquinas Windows
  • De qualquer Windows seja possível “ver” o Linux
  • De qualquer Windows não seja possível “ver” o outro Windows.

A melhor forma para montar está rede é colocar duas redes distintas entre os Windows, cada um com um IP, e colocar o Linux com 2 IPs, um de cada rede, como no exemplo:

  • Linux – IP rede 1 = 192.168.1.1 com máscara “/24”(255.255.255.0)
  • Linux – IP rede 2 = 192.168.2.1/24
  • Windows 1 – IP = 192.168.1.2/24
  • Windows 2 – IP = 192.168.2.2/24

No Linux pode ser configurado temporariamente a mesma interface com dois IPs utilizando o comando iptables:

iptables eth0:1 192.168.1.1

iptables eth0:2 192.168.2.1

Deve ser instalado no Linux o serviço SSH, e em um dos Windows os aplicativos Putty, Xming e FileZilla, descritos mais adiante.

Acessando um servidor remoto por linha de comando

O meio mais comum de acessar um servidor Linux remoto (Ubuntu, Fedora, Debian ou os BDSs) é usando SSH. O protocolo serve basicamente para iniciar remotamente um dispositivo Linux. Entenda que é possível acessar um dispositivo shell remoto, ou um aplicativo X11, ou fazer uma VPN, ou redirecionar uma porta, ou executar um comando, ou copiar um arquivo, ou ou ou... São tantas as possibilidades que vou demonstrar as mais básicas.

Primeiro esteja certo que tem o serviço SSH rodando na máquina remota. Para instalar no Ubuntu, digite:

  $ sudo apt-get install openssh-server

Feito isto, na máquina cliente, instale o cliente ;)

  $ sudo apt-get install openssh-client

Se você usa Windows como cliente, baixe o Putty, tanto faz o instalador completo ou somente o putty.exe.

Ainda para Windows, é interessante baixar os seguintes aplicativos também:

No nosso laboratório virtual, vamos imaginar que temos o servidor Linux com serviço SSH rodando e queremos acessar remotamente com uma estação Windows.

Abra o putty e na tela inicial, coloque o IP ou nome do servidor e clique em Open:

Abrindo uma tela preta, semelhante ao MSDOS, pede o usuário e depois uma senha. A senha não aparece nada. Só digite a senha correta e aperte ENTER.

Neste ponto você tem um shell completo do Linux. Pode virar root, trocar usuários, parar serviços, editar arquivos, verificar interfaces, executar testes e tudo mais que pode ser feito pela interface texto do linux.

Redirecionando uma porta pelo servidor

Mas vamos supor que agora queremos acessar um servidor de TS que está atrás do firewall linux. Como podemos fazer isto?

Veja que a topologia da rede é:

Local

Neste caso a máquina “Meu PC” chega até a máquina “firewall.example.com” mas não até a máquina “Servidor TS”, mas a máquina “firewall.example.com” se comunica com a “Servidor TS”. Então, como fazemos isso?

Primeiro vamos ver se temos as ferramentas necessárias.

Execute o mstsc com a opção /? e verifique se aparece a opção de porta, como abaixo:.

Se existe a opção de porta, então vamos ao putty novamente.

Abra o putty, digite o IP do servidor, e na lista do lado esquerdo, no final, tem “SSH”. Clique sobre ele e abra o item “Tunnels”:

image

Nas configurações de “Tunnels” temos que nos preocupar com 3 coisas:

  1. Qual porta local usar
  2. Como o servidor remoto (Firewall) se comunica com a outra máquina (TS)
  3. Qual a porta remota que o serviço está usando.

Neste caso, imaginamos que a porta local 3333 não está sendo usada.

Também sabemos que o firewall se comunica com o servidor TS pelo seu nome, ServidorTS

E sabemos que a porta do Terminal Services remota está rodando no padrão, TCP 3389.

Então a configuração fica:

 

image

 

  • Source Port: 3333
  • Destination: ServidorTS:3389

Não esqueça do “dois pontos” (:) entre o nome da máquina e a porta. Não esqueça que não pode ter espaços. E não esqueça de clicar em “Add” antes de clicar em “Open”.

Clique sobre o botão “Add”, adicionando as configurações a conexão e no botão “Open”. Vai aparecer a mesma tela preta, solicitando usuário e senha.

Escreva seu usuário e senha nesta tela preta. Deixe como está.

Agora é hora de rodar o MSTSC na sua máquina Windows, a mesma que você está usando o putty.

Clique em “Iniciar” e em “Executar” escreva:

  mstsc /v:localhost:3333

Clique em “OK”. Em alguns segundos, abre a janela:

image Agora é só logar na máquina remota e pronto. Mas o que foi feito ?

Bem, é mais ou menos assim:

Nas configurações do putty, na parte do Tunnel, você solicitou que uma porta local da sua máquina fosse aberta e a comunicação fosse enviada pelo SSH até o servidor. Então neste servidor seria feito a comunicação com a máquina ServidorTS, na porta 3389. Entendeu? É um túnel entre uma porta na sua máquina e uma porta em um servidor remoto, que é transmitida dentro do SSH.

Agora você ja pode imaginar o que dá pra fazer. Você pode redirecionar uma porta local sua para um proxy rodando dentro do servidor. Dá para abrir uma porta do servidor e redirecionar para uma máquina e dentro da sua rede local. Pode ser aberta várias portas para diversos fins simultâneos. É só “brincar” com as opções Tunnel do Putty.

Executando aplicativos gráficos em máquinas Linux remotas

Um outro recurso muito bom é abrir aplicativos gráficos remotos diretamente na sua máquina, sem que para isto seja necessário iniciar o Xorg na máquina remota.

Vamos supor que você quer executar o gnome-nettool na máquina firewall. Para isto, instale o Xming que você baixou anteriormente. Execute o aplicativo Xming que agora está no seu menu Iniciar.

Aparecerá um X preto próximo ao relógio do Windows e mais nada.

image 

E agora abra o putty, adicione o endereço do servidor firewall, navegue no menu esquerdo até SSH, abra as opções de X11, marque a opção “Enable X11 forwarding” e clique em “Open”:

imageNa tela preta do shell do firewall digite novamente seu usuário e senha.

Ao entrar, digite o comando:

   $ gnome-nettool

E aguarde alguns segundos. Logo a tela do Gnome-NetTool irá abrir no seu desktop

image

E pode se fazer uma cadeia disto. Por exemplo, você pode conectar em um servidor redirecionando o X11 para sua máquina, mas deste servidor você abre outra conexão com outra máquina, novamente redirecionando o X11 e ai sim abrir um aplicativo gráfico. Será neste caso feito um “encadeamento” de sessões X11, onde o aplicativo é redirecionado para o servidor anterior e este redirecionado para sua máquina local. Se parecer lento, você pode ativar a compactação do SSH, sob o menu do putty em SSH e marcando a opção “Enable Compression”. Esta compressão não é boa para compactar um stream de mp3, mas para compactar uma transmissão Terminal Services, X11 ou uma http (proxy por exemplo), é muito boa mesmo.

Mas note que o aplicativo continua rodando na máquina remota. Somente a tela dele que está na sua máquina.

Transferindo arquivos por SSH

Existe uma outra brincadeira para fazer com o SSH. É usar o mesmo para servir arquivos como um FTP, mas com toda a segurança que existe no protocolo SSL e nas trocas de chaves pública/privada que é implementada.

Para isso, instale e execute o FileZilla baixado anteriormente.

Na tela inicial, coloque o endereço do destino com sftp:// na frente, como no exemplo abaixo:

>>>>>> FALHA NA GERAÇÃO DA IMAGEM <<<<<<<

E desta forma pode ser transferido arquivos de e para o servidor que está trabalhando.