Académique Documents
Professionnel Documents
Culture Documents
Introduo
Uma vantagem no uso do Linux, apontada por muitos administradores de rede, a
facilidade de administrar o sistema remotamente, tanto via linha de comando (usando o
SSH) quanto com acesso interface grfica (usando o NX Server, o VNC ou o prprio
SSH). Essa uma necessidade bsica para qualquer um que administra diversos
servidores.
Hoje em dia, poucas empresas hospedam seus websites "in house", ou seja, em
servidores instalados dentro da prpria empresa. Quase sempre os servidores ficam
hospedados em datacenters, complexos que oferecem toda a estrutura necessria para
que os servidores fiquem no ar de forma confivel, incluindo links redundantes (se o
link principal cai, existe um segundo de reserva), no-breaks de grande porte, geradores,
refrigerao (a temperatura ambiente mais baixa ajuda os componentes a trabalharem de
forma mais estvel) e assim por diante.
Isso significa que apesar do servidor ser "seu", voc no tem nenhum tipo de acesso
fsico a ele. No pode usar o teclado ou mouse por exemplo, tudo precisa ser feito a
distncia. No Linux, toda a configurao do sistema, instalao de novos programas,
etc. pode ser feita a partir do modo texto, o que permite configurar o servidor e mant-lo
atualizado remotamente, via SSH. Outro ponto interessante que, apesar de ele ser uma
ferramenta nativa do Unix, existem clientes SSH tambm para Windows e outras
plataformas, permitindo que o responsvel administre o servidor mesmo a partir de uma
estao Windows.
Outro uso comum, desta vez dentro das redes locais, o uso remoto de aplicativos. Em
muitas situaes faz sentido instalar determinados aplicativos em um servidor central e
abrir sesses remotas nos clientes. Isso permite centralizar as informaes no servidor
(facilitando os backups) e, ao mesmo tempo, usar menos recursos nos clientes,
permitindo o uso de micros mais antigos. O exemplo mais desenvolvido o LTSP, que
1
permite usar micros antigos, de praticamente qualquer configurao, como clientes de
um servidor rpido. Um nico servidor pode atender a 20 ou at mesmo 30 clientes.
Entendendo o SSH
So previstas respostas para diversos tipos de ataques conhecidos. O SSH detecta casos
em que o servidor tenha sido substitudo por outra mquina, situaes nas quais se tenta
injetar dados na conexo (ou seja, tirar proveito de uma conexo aberta para incluir
pacotes com comandos adicionais) e inclui at mesmo tcnicas de "despiste", que
tornam muito mais complicado descobrir em qual pacote encriptado foi transmitida a
senha de acesso, por exemplo, dificultando a vida de quem pretende descobrir a senha
usando um ataque de fora bruta.
A idia central que, mesmo em situaes onde seja fcil interceptar a transmisso
(como no caso de uma rede wireless pblica), seja impossvel descobrir o contedo dos
pacotes, devido encriptao. possvel ainda, utilizar um par de chaves em vez de
uma senha como forma de autenticao. Nesse caso, alm de possuir a chave privada
(um arquivo que pode ser salvo no HD, em um pendrive ou mesmo em um smartcard),
preciso saber a passphrase, que pode ser uma senha especialmente longa e difcil de
adivinhar.
Voc poderia argumentar que qualquer algoritmo de encriptao pode ser quebrado via
fora bruta (onde simplesmente so testadas todas as possibilidades possveis, at
encontrar a combinao correta), de forma que nenhum sistema de encriptao
inteiramente seguro. Entretanto, ataques de fora bruta s so realmente viveis contra
chaves de 40 ou 64 bits; acima disso invivel, pois a cada bit adicionado, o processo
torna-se exponencialmente mais demorado.
Um exemplo de protocolo pouco seguro o WEP de 64 bits (que na verdade utiliza uma
chave de 40 bits), usado em redes wireless pouco protegidas. Ele pode ser quebrado em
pouco tempo, caso voc consiga capturar um volume considervel de transmisses
2
usando um sniffer (um programa que captura a transmisso da rede, como o Kismet). O
DES, um dos algoritmos mais tradicionais, que usa chaves de 64 bits (reais), pode ser
quebrado em menos de um dia, caso voc tenha acesso a um cluster de 100 mquinas
com processadores Xeon ou Opteron quad-core.
Uma chave de 64 bits cerca de 16 milhes de vezes mais difcil de quebrar via fora
bruta do que uma de 40 bits, como as que eram utilizadas no SSL dos navegadores a at
poucos anos. Uma chave de 128 bits por sua vez, (arredondando)
18.447.000.000.000.000.000 vezes mais demorada de quebrar que uma de 64 bits, de
forma que, uma chave de 64 bits pode ser quebrada caso voc tenha o tempo e os
recursos necessrios disposio, mas uma de 128 (sem brechas conhecidas)
impossvel de quebrar com tecnologia atual.
Felizmente, este no o caso dos algoritmos usados no SSH. Por serem abertos,
qualquer falha similar que pudesse eventualmente existir j teria sido descoberta e
corrigida. O SSH usado em tantos servidores importantes que uma brecha grave
poderia (literalmente) parar o mundo. Por isso, todo o cdigo exaustivamente auditado
por uma variedade de empresas e rgos governamentais.
Quando voc se conecta a um servidor SSH, seu micro e o servidor trocam suas
respectivas chaves pblicas, permitindo que um envie informaes para o outro de
forma segura. Atravs deste canal inicial feita a autenticao, seja utilizando login e
senha, seja utilizando chave e passphrase (como veremos a seguir).
At aqui, tudo feito utilizando chaves de 512 bits ou mais (de acordo com a
configurao). O problema que, embora virtualmente impossvel de quebrar, este nvel
3
de encriptao demanda um volume muito grande de processamento. Se todas as
informaes fossem transmitidas desta forma, o SSH seria muito lento.
Para solucionar este problema, depois de fazer a autenticao, o SSH passa a utilizar um
algoritmo mais simples (que demanda muito menos processamento) para transmitir os
dados. Por padro utilizado o 3DES (triple-DES), que utiliza uma combinao de trs
chaves DES, de 64 bits cada. As chaves so trocadas periodicamente durante a conexo,
o que torna o sistema quase impossvel de quebrar. Na configurao do servidor e/ou
cliente, possvel especificar outro algoritmo, como o Blowfish. Isso garante uma boa
relao entre segurana e desempenho.
O SSH dividido em dois mdulos. O sshd o mdulo servidor, um servio que fica
residente na mquina que ser acessada, enquanto ossh o mdulo cliente, um utilitrio
que voc utiliza para acess-lo.
ou:
Na maioria dos casos, ao fazer uma instalao em modo servidor do sistema o SSH ser
instalado e configurado para subir no boot automaticamente, mas, de qualquer forma,
no custa verificar. Nas distribuies derivadas do Debian, ele ativado usando o
servio "ssh", como em:
# /etc/init.d/ssh start
Nas derivadas do Red Hat, incluindo o Mandriva e o CentOS o servio se chama sshd:
No caso do CentOS, voc precisa usar o comando "chkconfig sshd on" para ativar a
inicializao automtica do servio caso o pacote seja instalado depois da instalao do
sistema:
# chkconfig sshd on
Como de praxe, necessrio manter a porta 22 usada pelo SSH aberta no firewall do
servidor. O SSH permite fazer quase tudo atravs dessa nica porta, atendendo a
diversos clientes simultneos.
4
Concluindo, para usar o SSH no seu micro de trabalho necessrio ter instalado apenas
o pacote "openssh-client". Veja que o cliente e o servidor so intencionalmente
mantidos em pacotes separados justamente para permitir que voc instale apenas um ou
outro conforme necessrio.
Outra observao que alm do OpenSSH, que abordo aqui, existem outras verses do
SSH, como o Tectia (uma verso comercial, disponvel no http://ssh.com) e o SunSSH
que, embora conservem diferenas no funcionamento e na configurao, so
compatveis entre si. O SSH , na verdade, um protocolo aberto e no o nome de uma
soluo especfica.
O uso bsico do SSH bastante simples, j que basta usar o comando "ssh
login@servidor" para acessar o servidor remoto e, a partir da, rodar os comandos
desejados. Entretanto, essa apenas a ponta do iceberg. O SSH to rico em funes
que at mesmo os administradores mais experientes raramente usam mais do que um
punhado das funes disponveis. Vamos ento a uma viso mais aprofundada do SSH,
comeando com dicas de configurao:
$ ssh morimoto@192.168.0.2
Em vez de usar a arroba, voc pode tambm especificar o login usando o parmetro "-l"
(de login), como em:
$ ssh morimoto@gdhpress.com.br
Caso voc omita o nome do usurio, o SSH presume que voc quer acessar usando o
mesmo login que est utilizando na mquina local. Se voc est logado como "tux", ele
tentar fazer login usando uma conta "tux" no servidor remoto. Naturalmente, s
funciona caso voc use o mesmo login em ambas as mquinas.
Ao acessar micros dentro da rede local, voc pode tambm cham-los pelo nome, como
em "ssh morimoto@servidor". Neste caso, voc precisar primeiro editar o arquivo
5
"/etc/hosts" (no cliente), incluindo os nmeros de IP das mquinas e os nomes
correspondentes. O formato deste arquivo bem simples, basta fornecer o IP e o nome
da mquina correspondente, um por linha, como em:
127.0.0.1 localhost
192.168.0.2 servidor
192.168.0.6 athenas
A configurao do arquivo "/etc/hosts" vale apenas para a sua prpria mquina, ele nada
mais do que um arquivo com aliases. Se voc quiser que os apelidos sejam vlidos
tambm para as demais mquinas da rede, a melhor opo configurar um servidor
DNS de rede local.
Aplicativos grficos: Alm de oferecer acesso via linha de comando, o SSH permite
rodar aplicativos grficos remotamente (X11 forwarding). Muitas distribuies trazem o
recurso desabilitado por padro. Nestes casos, edite o arquivo "/etc/ssh/ssh_config" (no
cliente) e substitua a linha "ForwardX11 no" por:
ForwardX11 yes
O maior problema com o uso de aplicativos grficos via SSH que ele s funciona
satisfatoriamente dentro da rede local. Via Internet os aplicativos grficos ficam
realmente muito lentos (mesmo em uma conexo de 4 ou 8 megabits), pois o protocolo
do X otimizado para uso local, com uso intensivo de pacotes de retorno e sem nenhum
tipo de cache. Isso faz com que muitos administradores desabilitem o X11 forwarding
no prprio servidor.
Para rodar aplicativos grficos de forma segura via Internet, a melhor soluo usar o
NX Server (que veremos em detalhes mais adiante). Ele um sistema de acesso remoto
baseado no SSH, que utiliza um protocolo bastante otimizado. Nele voc tem um
desktop completo (similar ao VNC), mas com um desempenho muito superior, mesmo
em conexes via modem.
6
Compression = yes
Keep Alive: Outro problema comum relacionado ao SSH a conexo ser fechada pelo
servidor depois de alguns minutos de inatividade. Em muitas situaes voc quer
manter a conexo aberta por longos perodos, sem precisar ficar dando um "ls" ou um
"pwd" a cada dois minutos para manter a conexo aberta.
Voc pode evitar o problema fazendo com que o prprio cliente mande pacotes
periodicamente a fim de manter a conexo aberta. Para ativar o recurso, adicione a
opo "ServerAliveInterval" no arquivo, especificando o intervalo entre o envio dos
pacotes (em segundos):
ServerAliveInterval 120
ForwardX11 yes
Compression = yes
Port 22
ServerAliveInterval 120
7
Isso previne um tipo de ataque muito comum chamado "man in the middle" (que
poderia ser traduzido para "intermedirio", ou "impostor"), em que algum
simplesmente substitui o servidor por outra mquina, usando o mesmo IP, ou sabota o
servidor DNS da rede (ou do provedor de acesso) de forma que ele entregue um IP
forjado quando voc tenta acessar seu servidor baseado no domnio.
O servidor falso pode ser configurado para gravar sua senha e responder com uma
mensagem do tipo "O servidor est em manuteno, tente novamente daqui a algumas
horas". Dessa forma, ele vai ter no apenas acesso sua senha, mas tempo de us-la
para acessar o servidor verdadeiro sem que voc desconfie. Entretanto, isso previsto
dentro do design do SSH; ele percebe que a identificao do servidor mudou e lhe avisa
do problema:
Para continuar preciso que voc remova a linha com a identificao do servidor salva
no arquivo .ssh/know_hosts, dentro do diretrio home do usurio que est utilizando.
Isso pode ser feito de duas formas.
# ssh-keygen -R 192.168.1.200
/home/gdhn/.ssh/known_hosts updated.
Original contents retained as /home/gdhn/.ssh/known_hosts.old
Como pode ver, o comando substituiu a edio manual do arquivo, removendo a linha
correspondente ao servidor e salvando um backup do arquivo original por precauo.
8
Em qualquer um dos dois casos, da prxima vez que tentar se conectar, o SSH exibe
uma mensagem mais simptica, perguntando se voc quer adicionar a nova chave:
No existe forma de fazer com que o cliente SSH adicione as novas chaves
automaticamente, isso seria uma brecha de segurana. sempre preciso primeiro
remover a chave antiga manualmente.
Uma ltima opo seria desabilitar a checagem das chaves, adicionando a opo
"StrictHostKeyChecking no" na configurao dos clientes. Contudo, isso no
recomendvel, pois desabilita completamente a checagem, abrindo brechas para
ataques.
Voc pode configurar vrias opes relacionadas ao servidor SSH, incluindo a porta
TCP a ser usada editando o arquivo "/etc/ssh/sshd_config". Assim como no caso da
configurao do cliente, a maior parte das opes dentro do arquivo podem ser omitidas
(pois o servidor simplesmente utiliza valores default para as opes que no constarem
no arquivo), mas, de qualquer forma, saudvel especificar todas as opes que
conhece: alm de evitar enganos, uma forma de praticar e memorizar as opes.
Port 22
Esta a porta que ser usada pelo servidor SSH. O padro usar a porta 22. Ao mudar a
porta do servidor aqui, voc dever usar a opo "-p" ao conectar a partir dos clientes
para indicar a porta usada, como em:
9
Outra opo editar o arquivo "/etc/ssh/ssh_config" (nos clientes) e alterar a porta
padro usada por eles. Mudar a porta padro do SSH uma boa idia se voc est
preocupado com a segurana. Muitos dos ataques "casuais" (quando o atacante
simplesmente varre faixas inteiras de endereos, sem um alvo definido), comeam com
um portscan genrico, onde feita uma varredura em faixas inteiras de endereos IP,
procurando por servidores com portas conhecidas abertas, como a 21, a 22 e a 80. Isso
torna o teste mais rpido, permitindo localizar rapidamente um grande volume de hosts
com portas abertas. A partir da, os ataques vo sendo refinados e direcionados apenas
para os servidores vulnerveis encontrados na primeira varredura. Colocar seu servidor
para escutar uma porta mais escondida, algo improvvel como a porta 32456 ou a 54232
reduz sua exposio.
Controle de acesso: Logo abaixo vem a opo "ListenAddress", que permite limitar o
SSH a uma nica interface de rede (mesmo sem usar firewall), til em casos de micros
com duas ou mais placas; o tpico caso em que voc quer que o SSH fique acessvel
apenas na rede local, mas no na Internet, por exemplo. Digamos que o servidor use o
endereo "192.168.0.1" na rede local e voc queira que o servidor SSH no fique
disponvel na Internet. Voc adicionaria a linha:
ListenAddress 192.168.0.1
Protocolo: Atualmente utilizamos o SSH 2, mas ainda existem alguns poucos clientes
que utilizam a primeira verso do protocolo. Por padro, o servidor SSH aceita
conexes de clientes que utilizam qualquer um dos dois protocolos, o que indicado na
linha:
Protocol 2,1
Protocol 2
Restringir a verso do protocolo ajuda a melhorar a segurana, pois evita que usurios
utilizando clientes SSH antigos abram brechas para ataques. Existem, por exemplo,
muitos clientes SSH para uso em celulares que suportam apenas o SSH 1 e utilizam
algoritmos fracos de encriptao. Desativando a compatibilidade com o SSH 1 voc
corta o mal pela raiz.
PermitRootLogin yes
10
Esta opo determina se o servidor aceitar que usurios se loguem como root. Do
ponto de vista da segurana, melhor deixar esta opo como "no", pois assim o
usurio precisar primeiro se logar usando um login normal e rodar comandos como
root usando o "sudo" ou "su -":
PermitRootLogin no
Dessa forma, preciso saber duas senhas, ao invs de saber apenas a senha do root,
eliminando a possibilidade de algum atacante obstinado conseguir adivinhar a senha de
root e, assim, obter acesso ao servidor.
Por padro, o SSH permite que qualquer usurio cadastrado no sistema se logue
remotamente, mas voc pode refinar isso atravs da opo "AllowUsers", que especifica
uma lista de usurios que podem usar o SSH. Quem no estiver na lista, continua
usando o sistema localmente, mas no consegue se logar via SSH. Isso evita que contas
com senhas fracas, usadas por usurios que no tm necessidade de acessar o servidor
remotamente coloquem a segurana do sistema em risco. Para permitir que apenas os
usurios "joao" e "maria" possam usar o SSH, por exemplo, adicione a linha:
Voc pode ainda inverter a lgica, usando a opo "DenyUsers". Neste caso, todos os
usurios cadastrados no sistema podem fazer login, com exceo dos especificados na
linha, como em:
PermitEmptyPasswords no
Esta opo faz com que qualquer conta sem senha fique automaticamente desativada no
SSH, evitando que algum consiga se conectar ao servidor "por acaso" ao descobrir a
conta desprotegida. Lembre-se de que a senha justamente o ponto fraco do SSH. De
nada adianta usar 2048 bits de encriptao se o usurio escreve a senha em um post-it
colado no monitor, ou deixa a senha em branco.
Banner = /etc/ssh/banner.txt
11
X11 Forwarding: Alm de ser usada na configurao dos clientes, a opo
"X11Forwarding" pode ser tambm includa na configurao do servidor:
X11Forwarding yes
realmente necessrio que esta linha esteja presente para que o SFTP funcione.
Comente esta linha apenas se voc realmente deseja desativ-lo.
Por mais seguras que sejam suas senhas, sempre existe uma pequena possibilidade de
que um atacante descubra alguma delas, observando enquanto voc digita no teclado, ou
que simplesmente consiga adivinh-la a partir de informaes pessoais ou de senhas
antigas. Se voc tem o hbito de usar as mesmas senhas em vrios locais, a
possibilidade cresce, pois muitos servios armazenam ou transmitem senhas de formas
no seguras. Com isso, as senhas acabam sendo o ponto fraco da segurana.
Como de praxe, o SSH oferece uma resposta para o problema. Em vez de depender
unicamente da senha como forma de autenticao, voc pode utilizar um par de chaves
de autenticao, onde a chave pblica instalada nos servidores que sero acessados e a
chave privada (que nunca sai da sua mquina) protegida por uma passphrase, sem a
qual a chave se torna intil.
Nesse caso, temos uma segurana de dois nveis, em que preciso saber a passphrase e,
alm dela, ter a chave privada, um arquivo salvo no HD ou em um pendrive, algo
similar ao sistema bancrio, onde voc precisa ter o carto e saber a senha.
$ ssh-keygen -t rsa
12
Ele deve ser executado usando seu login de usurio (o mesmo que voc usa para acessar
os servidores remotos), no como root:
Depois de gerar seu par de chaves, falta o comando final, que instala a chave pblica no
servidor, permitindo que ela seja usada para autenticao:
Como o nome sugere, o comando "ssh-copy-id" copia sua chave pblica, instalando-a
no servidor. Ao us-lo, substitua o "login" pelo seu login de usurio e o "servidor" pelo
endereo IP ou o domnio do servidor.
Ao ser executado, ele abrir uma conexo via SFTP (ainda utilizando seu login e senha
de acesso), que usada para instalar a chave pblica (o arquivo ".ssh/id_rsa.pub",
dentro do seu home) no diretrio correspondente do servidor. Naturalmente, para que a
transferncia funcione, necessrio que o SFTP esteja ativo na configurao do
servidor.
Caso voc utilize o mesmo login de usurio nas duas mquinas (usa o usurio "joao" em
ambas, por exemplo), pode omitir o login no comando, digitando apenas "ssh-copy-id
servidor", como em:
13
A partir da, ao invs de pedir sua senha, o servidor envia um "desafio" encriptado
usando a chave pblica. Para respond-lo, o cliente SSH na sua mquina precisa usar a
chave privada, que por sua vez precisa ser destravada usando a passphrase. Mesmo que
algum consiga roubar sua chave privada, no conseguir conectar sem saber a
passphrase e vice-versa.
Em resumo, o que o ssh-copy-id faz nada mais do que copiar o contedo do arquivo
".ssh/id_rsa.pub", dentro do seu diretrio home, para o arquivo
".ssh/authorized_keys" dentro do diretrio home do servidor remoto, uma operao
que tambm pode ser realizada manualmente em caso de problemas.
O arquivo ".ssh/id_rsa.pub" composto por uma nica (e longa) linha, que contm sua
chave pblica de encriptao. Ela segue este padro:
Concluindo, depois de gerar a chave e conseguir se conectar atravs dela, voc pode
desativar a possibilidade de fazer logins normais, usando senha. Nesse caso, apenas
voc, que possui a chave gerada, conseguir se conectar ao servidor.
Outras pessoas, mesmo que descubram a senha de alguma das contas, no tero como se
conectar e nem como instalar uma nova chave para faz-lo, a menos que tenham acesso
fsico ao servidor, a fim de copiar a chave manualmente. Isso significa que, mesmo
algum com a senha de root do seu servidor em mos no conseguir fazer nada
remotamente (o sonho de todo administrador ;). Isso pode ser usado para incrementar a
segurana.
PasswordAuthentication no
UsePAM no
14
A opo "PasswordAutentication no" permite desativar o uso das senhas, como
esperado, enquanto a "UsePAM no" refora a configurao, desativando qualquer outra
forma de autenticao com exceo das chaves.
# /etc/init.d/ssh restart
ou:
Se voc abre conexes SSH com freqncia, sempre com as mesmas mquinas, j deve
estar cansado de ter que ficar digitando seu password ou sua passphrase a cada nova
conexo. A boa notcia que ao usar um par de chaves voc pode automatizar o login de
duas formas diferentes.
Esta opo muito usada para criar scripts de backup automtico, capazes de acessar o
servidor e transferir os arquivos de forma automtica, sem que o administrador precise
ficar na frente do terminal para digitar a passphrase, mas no necessariamente uma
boa idia para uso em estaes de trabalho, pois algum que consiga copiar sua chave
privada poderia ganhar acesso irrestrito ao servidor.
Isso no algo to corriqueiro quanto pode parecer, pois a chave privada nunca sai do
seu micro. Para roubar sua chave privada, seria necessrio que algum efetivamente
invadisse o sistema, ou tivesse acesso fsico ao seu micro (para dar boot com o live-CD
e copiar o arquivo para um pendrive), mas, de qualquer forma, no bom dar sopa para
o azar.
Chegamos ento segunda opo, que consiste em usar o ssh-agent para salvar as
passphrases na memria, sem com isso abrir mo da segurana. Ele funciona como uma
espcie de "cache", onde voc digita a passphrase apenas uma vez e ela fica gravada na
memria at que a sesso seja encerrada. A segurana no prejudicada, pois a
passphrase no salva em lugar algum; fica apenas armazenada (de forma encriptada)
em uma rea protegida de memria, acessvel apenas ao ssh-agent. Ao desligar o micro,
tudo perdido.
15
$ ssh-agent
$ ssh-add
A partir da, ela fica carregada na memria e voc no precisa mais se preocupar at o
prximo reboot.
No KDE, uma forma prtica de fazer com que os dois comandos sejam executados
automaticamente durante a abertura do sistema, adicion-los em um atalho dentro da
pasta ".kde/Autostart" (dentro do seu diretrio home) de forma que eles sejam
executados automaticamente e voc tenha apenas o trabalho de digitar a chave e dar
Enter. No caso das distribuies baseadas no Gnome, use a opo "Sistema >
Preferncias > Sesses" para adicionar um atalho executando o comando "xterm -e 'ssh-
agent; ssh-add'", obtendo assim o mesmo resultado:
16
Usando o ForwardAgent
Ao usar o ssh-agent para guardar suas passphrases, voc pode ativar a opo
ForwardAgent (no cliente) para permitir que o agente disponvel na sua mquina possa
ser usado para abrir novas sesses SSH quando estiver logado em outras mquinas.
Imagine que voc administra dois servidores remotos: servidor A e servidor B. Voc
instalou a sua chave pblica em ambos e armazenou sua passphrase no ssh-agent, de
forma que voc pode logar em ambos a partir da sua mquina, sem digitar senha.
Porm, se voc estiver logado no servidor A, e precisar copiar um arquivo via sftp para
o servidor B, voc precisaria fornecer a senha ou passphrase, j que o servidor A no
tem acesso sua chave privada, que est no seu micro.
$ ssh gdhn.com.br
Para ativar este recurso, abra o arquivo "/etc/ssh/ssh_config" (na sua mquina, ou seja,
no cliente) e adicione a opo:
ForwardAgent yes
At aqui, aprendemos como utilizar um nico par de chaves. Nada impede que voc
utilize a mesma chave para todos os servidores que administra; na verdade, justamente
isso que a maioria dos administradores faz. Entretanto, isso abre uma pequena
possibilidade de que algum realmente consiga copiar o arquivo com sua chave privada
(acessando seu micro enquanto estiver fora do escritrio, por exemplo) e que, de alguma
17
forma, consiga descobrir tambm sua passphrase (observando enquanto voc a digita no
teclado, por exemplo), obtendo assim acesso a todos os servidores de uma s vez.
Devido a isso, alguns administradores mais precavidos preferem utilizar diversos pares
de chaves (um para cada servidor), cada um com uma passphrase diferente. Isso oferece
uma barreira de segurana adicional, evitando colocar todos os ovos dentro do mesmo
cesto, mas, por outro lado, torna o processo bem mais trabalhoso.
Para gerar novas chaves, rode o comando "ssh-keygen -t rsa", prestando ateno para
informar um nome de arquivo alternativo na hora que ele pergunta:
Com isso, voc pode gerar quantos pares de chaves quiser, salvando-os em arquivos
diferentes. A partir da, voc pode escolher qual instalar ao executar o "ssh-copy-id".
Basta especificar o arquivo referente chave pblica que deseja instalar, como em:
$ ssh-agent
$ ssh-add ~/.ssh/id_rsa-12
Ao usar vrias chaves, voc precisa executar o ssh-add uma vez para cada chave que
precisar utilizar, a cada boot (imagine o caso de um administrador que administre 20
servidores e use 20 chaves diferentes, por exemplo :). Como disse, usar vrias chaves
aumenta um pouco a segurana, mas torna a administrao bem mais cansativa.
O SSH um verdadeiro canivete suo. Alm de permitir rodar aplicativos e fazer toda a
administrao de um servidor remotamente, ele tambm pode ser usado para transferir
arquivos. A forma mais bsica de fazer isso usar o sftp, um pequeno utilitrio que faz
parte do pacote padro.
Ele oferece uma interface similar dos antigos programas de FTP de modo texto, mas
todos os arquivos transferidos atravs dele trafegam atravs de um tnel encriptado,
criado atravs do SSH. Na prtica, temos uma espcie de VPN temporria, criada no
momento em que efetuada a conexo. A melhor parte que o prprio SSH cuida de
tudo, no necessrio instalar nenhum programa adicional.
18
Para se conectar a um servidor usando o sftp, o comando :
$ sftp usuario@servidor
Se o servidor ssh na outra ponta estiver configurado para escutar em uma porta diferente
da 22, preciso indicar a porta no comando, incluindo o parmetro "-o port=", como
em:
A partir da, voc tem o prompt do sftp. Use o comando "put" para dar upload de um
arquivo e "get" para baixar um arquivo do servidor para a pasta local. Para navegar
entre as pastas do servidor, use os comandos "cd pasta/" (para acessar a pasta), "cd .."
(para subir um diretrio), "ls" (para listar os arquivos) e "pwd" (para ver em qual
diretrio est). Veja um exemplo:
sftp> ls
gdhpress.tar.gz www
sftp> pwd
Remote working directory: /home/morimoto
Voc pode estar se perguntando como consegui taxas de transferncia de quase 1 MB/s
tanto para download quanto para upload. O segredo aqui que no estou transferindo os
arquivos de um servidor remoto para meu micro de trabalho, mas sim transferindo
diretamente entre dois servidores remotos, onde me loguei no primeiro via SSH e abri a
conexo com o segundo a partir dele. Se os dois servidores esto ligados a portas de 10
megabits e existir uma boa conectividade entre eles, taxas de at 1 MB/s so
perfeitamente normais. Se voc pagar um pouco a mais para ter portas de 100 megabits,
ento possvel conseguir taxas 10 vezes maiores. :)
Voltando ao sftp, existem ainda os comandos "lcd" (local cd), "lls" (local ls), "lmkdir"
(local mkdir) e "lpwd" (local pwd), que permitem mudar o diretrio local. Digamos, por
19
exemplo, que voc est atualmente no diretrio "/mnt/arquivos". Ao abrir a conexo via
sftp, tudo que voc baixar ser colocado automaticamente neste diretrio. Mas, digamos
que voc queira baixar um determinado arquivo para o diretrio "/home/joao". Voc
usaria, ento, o comando "lcd /home/joao" para mudar o diretrio local e depois o "get
arquivo" para baix-lo j na pasta correta. Na hora de dar upload de um arquivo a
mesma coisa. Voc pode usar o "lls" para listar os arquivos no diretrio local e depois o
"put arquivo" para dar upload.
Para tornar as coisas mais prticas, eu uso o recurso de dividir a janela em duas, que
voc encontra no "Janela > Separar viso em topo/base". Assim, fico com uma janela
mostrando os arquivos locais e outra mostrando os arquivos do servidor, e posso
simplesmente arrastar os arquivos que devem ser transferidos:
20
O Konqueror no muito bom em prever erros com a conexo, se limitando a exibir um
"no possvel se conectar ao servidor". Nesses casos, abra um terminal e experimente
tentar se conectar via texto para ver as mensagens de erro e poder assim diagnosticar o
problema.
21
Isso cria um cone de acesso, que aparece tanto no desktop quanto na barra "Locais" do
Nautilus. Para finalmente efetuar o acesso, clique sobre o cone e fornea a senha.
A grande limitao do sftp (e das interfaces grficas para ele) que ele exige
interveno manual e, por isso, no adequado para uso em scripts para realizar
transferncias automatizadas (como no caso de um script de backup). Para isso, temos o
"scp", um cliente ainda mais primitivo, que permite especificar em uma nica linha o
login e endereo do servidor, junto com o arquivo que ser transferido.
22
A sintaxe do scp : "scp arquivo_local login@servidor:pasta_remota", como em:
Voc pode adicionar tambm as opes "-p" (que preserva as permisses de acesso alm
das datas de criao e modificao do arquivo original), "-r" (que permite copiar pastas,
recursivamente), "-v" (verbose, onde so mostradas todas as mensagens) e "-C" (que
ativa a compresso dos dados, ajudando muito na hora de transferir grandes arquivos via
Internet). Nesse caso, o comando ficaria:
Ao incluir a opo "-r", voc pode especificar diretamente uma pasta no primeiro
parmetro, o que faz com que todo o seu contedo seja transferido. Esta opo
interessante para backups.
O SSH pode ser ainda usado como "meio de transporte" por outros programas, como no
caso do rsync, um utilitrio que permite sincronizar uma pasta local com uma pasta do
servidor. Ele capaz de fazer uma cpia diferencial, transferindo apenas os trechos dos
arquivos que foram modificados o que o torna um utilitrio quase que ideal para backup
de pastas com um grande volume de arquivos. Ele capaz inclusive de consertar
arquivos danificados e dar upload de atualizaes, enviando apenas as partes dos
arquivos que forem diferentes, o que torna a transferncia muito mais rpida.
O uso bsico do rsync, para sincronizar duas pastas locais, seria "rsync -a origem/
destino/". A pasta destino poderia ser um segundo HD, um carto de memria ou um
compartilhamento de rede, por exemplo. Usado dessa forma, o rsync serve apenas para
fazer backups locais, mas, ao combin-lo com o SSH, abrimos uma nova gama de
possibilidades.
Para usar o rsync via SSH, o comando acaba sendo bem mais complexo, mas o
resultado bem interessante. Ele vai apenas atualizar as partes dos arquivos remotos
que foram modificados, sem dar upload dos arquivos inteiros novamente, como muitos
programas de backup fariam.
Para sincronizar a pasta local "/home/gdh" com a pasta remota "/backup", no servidor
"gdhn.com.br" (onde seria feito um backup dos arquivos locais), usando o login "gdh",
por exemplo, o comando seria:
23
No primeiro comando os arquivos da pasta "/home/gdh" vo para a pasta /backup do
servidor e no segundo eles so recuperados, subscrevendo os arquivos locais. A parte
mais significativa deste comando o parmetro "--rsh="ssh -l gdh", que diz para o rsync
usar um programa externo (o SSH) para fazer o trabalho.
Uma observao que usando apenas os parmetros "-av", o rsync apenas atualiza e
grava novos arquivos na pasta do servidor, sem remover arquivos que tenham sido
deletados na pasta local. Por um lado isso bom, pois permite recuperar arquivos
deletados acidentalmente, mas por outro pode causar confuso. Se voc preferir que os
arquivos que no existem mais sejam deletados ao atualizar o backup, adicione o
parmetro "--delete", como em:
O rsync no vem instalado por padro na maioria das distribuies, mas pode ser
instalado rapidamente usando o gerenciador de pacotes, como em:
Se voc utiliza o VNC para tarefas sensveis, como administrar servidores, acessar
sistemas bancrios, etc., pode implantar uma camada extra de segurana, utilizando o
VNC em conjunto com o SSH. Nesse caso, a segurana quase total, pois alm de ser
necessria uma dupla autenticao (primeiro no SSH e depois no VNC), todos os dados
so transmitidos atravs da rede de forma encriptada, utilizando um algoritmo
reconhecidamente seguro.
24
Para utilizar o SSH em conjunto com o VNC, utilizamos a opo "-L", que permite
redirecionar uma determinada porta local para uma porta no servidor, criando o tnel. A
sintaxe do SSH, neste caso, seria "ssh -L porta_local:servidor:porta_do_servidor
servidor". Parece complicado, mas vai melhorar... :)
O servidor VNC escuta na porta 5900 + o nmero do display (5901, 5902, 5903, etc.).
Note que a porta diferente do servidor Java, acessvel utilizando o browser, que utiliza
as portas de 5800 em diante.
Substitua o "login" pela sua conta de usurio na mquina remota. O SSH pedir a senha
(ou passphrase) e, pronto, o tnel estar criado.
Tudo o que voc precisa fazer agora abrir o cliente VNC e acessar o endereo
"127.0.0.1:1". Isso far com que o cliente acesse a porta 5901 na mquina local, que por
sua vez ser redirecionada (atravs do tnel) para a porta 5901 do servidor remoto. Voc
usar o VNC da mesma forma, mas desta vez usando um tnel seguro.
Se por acaso a porta 5901 local j estiver em uso, voc pode simplesmente criar o tnel
apontando para outra porta da sua mquina. Se voc fosse acessar o display 4 (porta
5904) no servidor 192.168.0.4, redirecionando-o para a porta 5905 (display 5) da
mquina local, logando-se usando o usurio "tux", o comando seria:
Nesse caso, voc acessaria o endereo "127.0.0.1:5" no cliente VNC, que faz com que
ele se conecte na porta 5905.
Alm do VNC, este comando pode ser usado para criar tneis para outras portas. Para
redirecionar portas privilegiadas, da 1 a 1024, voc precisa executar o comando como
root. Para as portas altas (como as usadas pelo VNC), voc pode usar um login normal
de usurio.
25
O parmetro "-f" dentro do comando faz com que ele seja executado em background,
liberando o terminal depois que a conexo estabelecida. O "-N" faz com que o SSH
apenas crie o redirecionamento da porta, sem abrir um terminal do servidor remoto,
enquanto o "-L" a opo principal, que especifica que queremos fazer um
redirecionamento de portas. Ele seguido (sem espaos) pela porta local que receber a
porta remota, o endereo do servidor e a porta do servidor que ser redirecionada ("-
L2525:192.168.0.4:25" redireciona a porta 25 do servidor remoto para a porta 2525 da
mquina local). Concluindo, o "-l" em seguida especifica o login que ser usado para
estabelecer a conexo, seguido pelo endereo IP do servidor.
Seja qual for a porta destino, todo o trfego transportado atravs da porta do SSH e
encaminhada localmente para a porta final. Graas a essa peculiaridade, os tneis so
uma forma muito usada para acessar ferramentas como o Webmin, phpMyAdmin ou
Swat em servidores remotos, sem precisar manter as respectivas portas abertas para toda
a Internet. Basta que a porta 22 (ou outra em que o servidor SSH esteja escutando)
esteja aberta para que voc consiga acessar qualquer outra usando tneis. Em casos em
que o servidor remoto esteja configurado para usar uma porta diferente da padro para o
SSH, adicione a opo "-p porta" no incio do comando, como em:
Para isso, preciso que o gateway da rede (ou alguma mquina na Internet, que seja
acessvel por voc) esteja com um servidor proxy aberto (se voc estiver usando o
Squid, por exemplo, o proxy ficar aberto na porta 3128 do servidor). Podemos usar
ento o SSH para criar um tnel, ligando a porta 3128 do servidor porta 3128 (ou
qualquer outra) do seu micro, como em:
O prximo passo configurar o navegador na sua mquina para acessar usando o proxy.
Entretanto, em vez de configurar o navegador para acessar o proxy diretamente, vamos
configur-lo para procurar o proxy na porta 3128 do localhost. Isso faz com que todos
os acessos sejam direcionados ao tnel criado atravs do SSH e cheguem at o proxy de
forma encriptada:
26
Para ser usado dessa forma, o proxy rodando no servidor remoto deve ser configurado
para aceitar conexes de qualquer cliente, j que mesmo passando pelo tnel, o acesso
ser computado pelo Squid como partindo do seu IP de Internet atual. Um exemplo de
configurao do Squid para que o servidor permitisse a conexo de qualquer cliente
remoto seria:
http_port 3128
visible_hostname gdh
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow all
27
Como voc pode ver, essa configurao simplesmente permite acessos provenientes de
qualquer endereo. O truque que como o servidor ser acessado atravs dos tneis
criados usando o SSH, voc pode manter a porta 3128 fechada no firewall do servidor,
permitindo apenas conexes atravs da porta 22. Com isso, o servidor no ficar
vulnervel, j que a nica forma de chegar at o proxy criando um tnel at ele atravs
do SSH.
SSH no Windows
Existem diversas verses do SSH. A maioria das distribuies Linux inclui o OpenSSH,
que no possui um cliente para Windows. No entanto, isso no chega a ser um
problema, pois o SSH um protocolo aberto, o que permite o desenvolvimento de
clientes para vrias plataformas, inclusive Windows. Eles so usados por muita gente
para administrar servidores Linux remotamente.
Usar o PuTTY para se conectar a servidores Linux bem simples, pois ele no precisa
sequer ser instalado. Basta baixar o arquivo e execut-lo:
28
O PuTTY tambm permite criar tneis encriptados. Para isso, comece colocando o IP ou
o domnio do servidor a que vai se conectar no campo "Host Name (or IP address)" na
tela principal, como se estivesse abrindo uma conexo normal, mas, ao invs de clicar
no "open", acesse a opo "Connection > SSH > Tunels".
Na opo "source port" vai a porta do seu micro que receber o tnel (3128, por
exemplo) e no "Destination" vai o endereo IP ou domnio do servidor remoto a que
voc est se conectando, seguido da porta, como em "meuservidor.com.br:3128". Clique
no "Add" (voc pode adicionar vrias portas) e em seguida no "Open", para abrir a
conexo.
Outro exemplo de cliente SSH para Windows a verso da SSH Security, que possui
vrios recursos mas gratuita apenas para universidades e usurios domsticos e por
isso bem menos usada. O link : http://www.ssh.com
29
concentram nos recursos de encriptao para transferncias de arquivos e criao de
tneis.
Voltando ao tema principal, existem alguns servidores X para Windows, que abrem uma
sesso do X dentro de uma janela, como o X-Win32 (http://xwin32.dk) e o WinaXe
(http://labf.com), mas uma opo muito melhor o Xming, um software gratuito e de
cdigo aberto, disponvel no:
http://www.straightrunning.com/XmingNotes/.
Quando aberto, o Xming fica residente ao lado do relgio, esperando que algum
aplicativo precise dele. Para us-lo em conjunto com o PuTTY, marque (no PuTTY) a
opo "Connection > SSH > X11 > Enable X11 forwarding" (sem colocar nada no
campo "X display location"). Isso faz com que o PuTTY encaminhe todas as requisies
grficas para o Xming, permitindo que os aplicativos grficos rodem normalmente,
mesmo no Windows. Embora no seja uma soluo muito elegante, realmente funciona:
30
O Xming resolve o problema do uso de aplicativos grficos via SSH no Windows, mas
ele ainda no a soluo ideal para muitas situaes, j que exige uma certa dose de
configurao e o uso centralizado em torno do terminal. Se voc est procurando uma
soluo mais prtica e simples, a melhor opo o Cliente NX, que (uma vez
configurado o servidor) muito mais simples de usar e oferece uma performance muito
melhor que a obtida ao rodar aplicativos grficos atravs do SSH "puro", graas s
vrias otimizaes utilizadas. Veremos mais detalhes sobre ele logo a seguir.
31
Na hora de transferir arquivos via SFTP, uma boa opo o FileZilla, um cliente de FTP
grfico e bastante amigvel, que inclui suporte ao SFTP. Voc pode baix-lo no:
http://filezilla.sourceforge.net/
Para conectar via SFTP, use a opo "File > Site Manager > New Site" para criar a
conexo. S assim voc tem acesso opo de usar o SFTP, j que os campos na tela
principal servem apenas para servidores FTP:
32
Na tela seguinte, informe o IP do servidor, a porta (22) e a conta de acesso. Uma vez
conectado, voc acessa os arquivos usando a interface tradicional dos clientes de FTP,
com as duas janelas, uma mostrando os arquivos locais e outra mostrando os do
servidor. Para transferir arquivos, basta arrast-los entre as duas.
33