quinta-feira, 30 de setembro de 2010

Acessando arquivos via ssh graficamente (com túnel ssh)

Muitas pessoas utilizam a opção de montar um diretório de um host remoto através de ssh. No ubuntu, o nautilus (navegador de arquivos) permite que isso seja feito de maneira gráfica através do sftp.

O problema é caso você enfrente a mesma situação descrita no post SSH sobre SSH . Para quem não leu o post, um resumo: você precisa autenticar em um host com acesso externo (exthostA) para acessar um segundo host (inthostB) que só é visível na rede interna.

A pergunta é como fazer um processo equivalente para conseguir acessar os arquivos do host "escondido" (inthostB) via nautilus, porém utilizando o intermediário (exthostA).

Bom, adiantando, não é uma solução tão simples e direta quanto a do post anterior.

Inicialmente precisamos criar um redirecionador (túnel):

ssh -L2222:inthostB:22 userA@exthostA

Esse comando faz com que todas as conexões ao servidor local (a máquina que você está usando) que utilizem a porta 2222 sejam redirecionadas para o servidor remoto inthostB através do exthostA. É esse "através" que permite enxergar o host "escondido" diretamente. :)

Por fim, agora é só utilizar a conexão ssh via nautilus. No Ubuntu:

Locais->Conectar ao servidor...

Tipo de serviço: SSH
Servidor: localhost
Porta: 2222 (Atenção é 2222 e não apenas 22, não confundir )
Nome do usuário: userB (o usuário do host interno inthostB)
Nome do marcador: inthostB

Aparentemente você tentará se conectar a sua própria máquina, mas na verdade acontecerá um redirecionamento para o host desejado.

A porta utilizada também poderia ser outra, por exemplo 2223. Bastaria colocar a opção "-L2223" e conectar na porta 2223

Referência

SSH sobre SSH

Algumas vezes você precisa autenticar em um host com acesso externo (exthost1) para acessar um segundo host (inthost2) que só é visível na rede interna.

Normalmente o que é feito é fazer um ssh para o host externo:

ssh user1@exthost1

E após autenticado, fazer outro ssh para o host interno:

ssh user2@inthost2

Como na realidade você não quer realmente fazer nada no host externo além de ter acesso ao interno, esse comando pode ser realizado de uma única vez:

ssh user1@exthost1 -t ssh user2@inthost2

Perceba que a presença do argumento -t é primordial, do contrário o comando não funcionará.

A vantagem é você não precisar cair em um terminal intermediário para redigitar o comando ssh.