Introdução
Olá pessoal, neste artigo irei tratar sobre o SSH
(Secure Shell), uma fantástica ferramenta de
administração remota, demonstrando através de
exemplos práticos como ele pode substituir não
só outras ferramentas de administração remota
como telnet, rlogin , rsh, etc como também serviços
como, por exemplo, o FTP. Tudo isto com a certeza de quem
está conectando na outra ponta e criptografia dos
dados.
O que é SSH?
Esta ferramenta foi originalmente desenvolvida pela
empresa finlandesa de mesmo nome (
http://www.ssh.fi
), e surgiu como uma maneira de suprir as deficiências
não só do telnet mas como também do rlogin
(Remote Login) e do rsh (Remote Shell). Com o tempo acabou
transformando-se na ferramenta padrão para a
administração de sistemas no mundo UNIX,
substituindo totalmente o telnet, tanto que o nome ``SSH''
é usado hoje não só para designar o programa e
a empresa que o criou como também suas variantes e
clones.
A grande vantagem do SSH está em encriptar os dados
que são transmitidos durante a sessão e
provavelmente ninguém gosta da idéia de ter suas
informações transitando pela rede totalmente
abertas, principalmente senhas. Além disso, é
possível com o SSH agregar outros serviços como,
por exemplo, o SCP (Secure Copy) que substitui com
tranquilidade e até com mais praticidade o bom e velho
FTP.
Cliente SSH
Existem diversos clientes disponíveis, desde o
original da SSH, que é um produto comercial com
versões para várias plataformas e sistemas
operacionais, até versões gratuitas. Neste artigo,
estarei demonstrando a utilização do
OpenSSH
(que é originário do projeto
OpenBSD
), que é uma versão adaptada do SSH de livre
distribuição desenvolvido por Tatu Ylonen mas com a
inclusão de novos recursos e outros algoritmos de
encriptação que não o RSA e DES, como o
Blowfish.
Caso você possua um outro cliente SSH, saiba que os
comandos e a utilização são praticamente
idênticos, logo se você já possui uma outra
versão não fique preocupado. Em virtude da
política de exportação de software de
criptografia nos EUA, as versões internacionais,
distribuições originárias de lá, não
podem conter o SSH, ficando com o usuário a tarefa de
instalá-lo. No caso das distribuições baseadas
em RPM utilize o serviço
RPM Find
, para as baseadas na Debian acrescente a linha
deb http://non-us.debian.org/debian-non-US stable/non-US
main contrib non-free
em
/etc/apt/source.list
e para quem usa Slackware pegue o pacote em
http://www.linux-mafia.org
. Para distribuições empacotadas fora dos EUA
não existe este problema.
Para quem vai compilá-lo, vale a pena lembrar que o
OpenSSH necessita do OpenSSL (a página é:
http://www.openssl.org
). E que não se esqueça de pegar o código
fonte já com os patches para Linux (existem
diferenças na parte de rede dos BSD e do Linux). E caso
você queira utilizar um cliente SSH a partir de uma
estação Windows(TM), para administrar suas
estações, saiba que existem clientes SSH para
Windows, como o PuTTY, o TeraTERM ou o SecureTTY, confira nas
páginas de download por outros programas e maiores
informações.
Preparando o servidor
O pacote do SSH traz tanto o cliente como o servidor, o
SSHD (ou SSH Dæmon). No caso de uma instalação
a partir de pacotes RPM ou DEB um script estilo System V (ou
seja, funciona com os parâmetros start, stop, restart,
etc...) será criado no respectivo diretório
/etc/(...)init.d. No caso do Slackware, que trabalha com
inicialização estilo BSD, o script /etc/rc.inet2
irá procurar pelo dæmon nos diretórios /sbin,
/usr/sbin ou /usr/local/sbin.
Caso sua a instalação, por algum motivo,
não esteja carregando automaticamente o SSHD durante a
inicialização verifique se não há algum
problema com as permissões dos arquivos, e se
persistindo o problema inclua-o no manualmente no rc.local ou
no final do rcS (no caso da Debian).
Utilizando o SSH
Após instalar o SSH, vamos utilizá-lo. Para quem
está usando o SSH pela primeira vez é interessante
criar o par de chaves públicas e privadas para a sua
estação. Isto é feito pelo comando
ssh-keygen
, basta executá-lo. Será criado o par de chaves RSA
que serão gravadas, por padrão, em seu
diretório HOME. Este procedimemto não é
obrigatório mas pode facilitar bastante a sua vida. Para
testar se tanto o cliente quanto o servidor estão
funcionando corretamente tente conectar-se em sua
própria estação usando
ssh localhost
.
Usar o SSH é bastante simples, bastando incluir o
nome (ou endereço IP) da máquina que se deseja
usar. Quando da primeira conexão em uma determinada
estação, ele perguntará se deseja
adicioná-la à sua lista de hosts conhecidos
(.ssh/know_hosts). E geralmente o SSH irá tentar se
conectar na estação remota usando a mesma conta que
você está usando no servidor local, para contornar
esse problema, use o parâmetro -l ou então
usuário@host para especificar quem você deseja usar
na conexão remota.
Secure Copy
Pelo que foi mostrado até agora é bastante
fácil substituir o telnet pelo SSH na tarefa de
administração de suas estações.
Porém, o SSH permite que você utilize outros
serviços usando a conexão segura. O exemplo mais
conhecido é o scp (Secure Copy) que permite a
transferência de arquivos entre estações.
Supondo que você queira enviar um arquivo local para o
seu servidor:
scp [arquivo_local] [usuario@servidor remoto]:[nome do
arquivo no servidor remoto]
Ou supondo que você queira na sua máquina um
arquivo que está no servidor:
scp usuario@servidor_remoto:arquivo
usuario@sua_maquina:arquivo
Para maiores detalhes sobre a utilização do SCP
consulte sua respectiva página de manual (man scp).
X11 Forward
Outro serviço interessante que pode ser usado junto
com o SSH, é o X11 Forwarding. Como todos sabem (ou
deveriam saber) o X/Window é bem mais do que uma
interface gráfica, é um protocolo de
comunicação cliente/servidor que se utiliza do
TCP/IP. Graças a isto, o cliente (a aplicação
que você está usando) e o servidor (quem está
colocando as janelas na tela) podem tranquilamente estar em
computadores diferentes. Assim como no Telnet, o uso do X11
Forwarding dentro de uma sessão SSH garante a
encriptação daquilo que está indo de um lado
ao outro da rede.
Para usar você precisa antes habilitar o acesso da
estação remota em seu X/Window local usando
xhost +{nome ou IP da estação remota}
. Aí, conectar-se e redirecionar a saída dos
programas mudando a variável do sistema DISPLAY para sua
estação com
export DISPLAY=(nome ou IP da estação
local):(n)
, sendo "n" a sessão do X que você pretende usar
(geralmente este valor é 0).
Aumentando a segurança do
SSH
Não basta encriptação, muitas vezes é
bom ser um pouco mais paranóico. No arquivo sshd_config
você pode configurar alguns parâmetros que podem te
deixar mais garantidos quanto a quem e de onde você pode
ser acessado. Dentre os parâmetros os que podem
realmente restringir o acesso são:
-
PermitRootLogin Use
: "Yes" ou "No" para habilitar o login como root
-
AllowHosts
: A relação de estações que podem se
conectar, use o endereço IP ou então o nome da
máquina.
-
DenyHosts
: A relação das estações que não
podem se conectar
-
AllowUsers
: Aqueles que podem se logar na estação
-
DenyUsers
: Aqueles que, por motivos que não vamos discutir
agora, não podem se logar
Após estas alterações você vai
precisar reinicializar o dæmon, isto pode ser feito
usando o script que está no init.d com
ssh restart
ou então com
killall -HUP sshd
.