Secure Shell (Português)

From ArchWiki
Revision as of 20:37, 15 March 2011 by Lokidarkeden (Talk | contribs) (Save connection data in .ssh/config)

Jump to: navigation, search

Secure Shell ou SSH é um protocolo de internet que permite a troca de informações por meio de um canal seguro entre dois computadores. A encriptação proporciona sigilo e integridade da informação. SSH usa criptografia de chave-publica para autenticar no computador remoto e permitir que o computador remoto autentique o usuário, se necessário.

SSH é tipicamente utilizado para logar em um computador remoto e executar comandos, mas ele também pode ser usado para tunneling. Tranferencia de arquivos pode ser feita usando os protocolos SFTP ou SCP.

Um servidor de SSH, por padrão, roda na porta 22. Um cliente SSH geralmente é usado para estabelecer conexões com um servidor de sshd configurado para aceitar conexões remotas. Ambos estão presentes na maior parte dos sistemas operacionais modernos, incluindo GNU/Linux, MacOS X, Solaris e OpenVMS. Existem versões pagas, grátis e de código aberto.

OpenSSH

O OpenSSH (OpenBSD Secure Shell) é um conjunto de programas de computador que provê sessões de comunicação criptografada sobre uma rede de computadores utilizando o protocolo ssh. Ele foi criado como alternativa de código aberto à suite de aplicativos proprietários de Shell Seguro ( do inglês: Secure Shell ) oferecida pela SSH Communications Security. o OpenSSH é desenvolvido como parte do projeto OpenBSD, o qual é liderado por Theo de Raadt.

O OpenSSH é ocasionalmente confundido com o OpenSSL devido aos nomes parecidos; embora os projetos tenham propósitos diferentes e sejam desenvolvidos por times diferentes, os nomes similares surgiram de objetivos similares.

Instalando o OpenSSH

# pacman -S openssh

Configurando o SSH

Cliente

O arquivo de configuração do cliente SSH pode ser encontrado e editado em Template:Filename.

Um exemplo de configuração:

Template:File

É recomendado alterar a linha do Protocolo para:

Protocol 2

Dessa forma, apenas o protocolo 2 será utilizado, visto que a protocolo 1 é considerado inseguro.

Daemon

O Arquivo de configuração do daemon SSH pode ser encontrado e editado em Template:Filename.

Um exemplo de configuração:

Template:File


Para permitir acesso apenas por alguns usuários, adicione a seguinte linha:

AllowUsers    user1 user2

Você deve querer mudar algumas linhas para que pareçam com as seguintes:

Protocol 2
.
.
.
LoginGraceTime 120
.
.
.
PermitRootLogin no # (put yes here if you want root login)

Você pode também descomentar a opção BANNER e editar Template:Filename para uma mensagem de boas vindas.

Tip: Você deve querer alterar a porta padrão de 22 para qualquer porta alta (veja em inglês security through obscurity).

Mesmo que a porta utilizada pelo ssh possa ser detectada por um port-scanner como o nmap, alterando-a irá reduzir o número de entradas nos logs por tentativas automatizadas de acesso.pts.

Tip: Desativando inteiramente logins por senha pode melhorar sua segurança, desde que cada usário com acesso ao servidor necessitará criar chaves ssh. (veja em inglês Using SSH Keys).

Template:File

Permitindo outros entrarem

Template:Box Note

Para permitir que outra pessoa conecte via ssh a sua maquina você precisa ajustar o arquivo Template:Filename, e adicionar o seguinte:

# Permite qualquer um conectar a você
sshd: ALL

# Ou, você pode restringir certos ips.
sshd: 192.168.0.1

# ou restringir uma rede de ips
sshd: 10.0.0.0/255.255.255.0

# ou restringir o ip por um padrão
sshd: 192.168.1.

Agora você deve checar o arquivo Template:Filename pela seguinte linha, e ter certeza que ela está dessa forma:

ALL: ALL

É isso. Você pode sair e outros devem conseguir entrar via ssh :).

Para utilizar as novas configurações, reinicie o daemon (as root):

# /etc/rc.d/sshd restart

Gerenciando o Daemon SSHD

Apenas adicione sshd à seção "DAEMON" do seu arquivo Template:Filename:

DAEMONS=(... ... sshd ... ...)

Para iniciar/reiniciar/parar o daemon, use o seguinte:

# /etc/rc.d/sshd {start|stop|restart}

Conectando ao servidor

Para conectar ao servidor, execute:

$ ssh -p port user@server-address


Dicas e Truques

Túnel criptografado

Isso é muito util para usuário de notebook conectado a várias redes inseguras. A única coisa que você precisa é um servidor ssh sendo executado em alguma localização segura, como sua casa ou trabalho. Pode ser util fazer uso de um serviço de DNS dinâmico como DynDNS assim você não precisa lembrar o seu endereço IP.

Primeiro Passo: Iniciar a Conexão

Você tem apenas que executar esse único comando no seu terminal favorito para iniciar a conexão:

$ ssh -ND 4711 usuario@host

onde Template:Codeline é o seu usuário no servidor SSH executando em Template:Codeline. Ele irá pedir sua senha, e então você estará conectado! A opção Template:Codeline desabilita o "prompt" interativo, e a opção Template:Codeline especifica a porta local na qual ele ouvirá (você pode escolher qualquer numero de porta de sua preferência).

Uma forma de fazer isso mais facil é colocar um atalho no seu arquivo Template:Filename da seguinte forma:

alias sshtunnel="ssh -ND 4711 -v user@host"

É interessante adicionar a opção de verbosidade Template:Codeline, porque então você pode verificar que está realmente conectado pela saída. Agora você precisa executar apenasTemplate:Codeline  :)

Segundo Passo: Configure seu Navegador ( e/ou outros programas )

O passo acima é completamente inútil se você não configurar seu navegador ( ou outros programas) para usar o novo túnel. Desde que a versão atual do SSH suporta SOCKS4 e SOCKS5, você pode usar qualquer um deles.

  • Para o Firefox:Editar → Preferências → Avançado → Rede → Configurar Conexão →:
Marque a opção "Configuração manual de proxy", e digite "localhost" no campo"SOCKS", e então o número da porta no campo seguinte (acima eu utilizei 4711).
  • Para o Chromium: você terá que configurar as variáveis de ambiente. Eu recomento adicionar as seguintes linhas ao seu .bashrc:
   function secure_chromium {
       port=4711
       export SOCKS_SERVER=localhost:$port
       export SOCKS_VERSION=5
       chromium &
   }

Agora abra um terminal e faça:

   $ secure_chromium

Aproveite o seu túnel seguro!

Encaminhamento X11

Para executar aplicativos gráficos através de uma conexão SSH você pode habilitar o "X11 forwarding". Uma opção precisa ser definida nos arquivos de configuração do servidor e do cliente (aqui "cliente" quer dizer o seu computador onde o servidor X11 é executado, e você irá executar aplicativos X no "servidor").

Instalando xorg-xauth no servidor:

# pacman -S xorg-xauth

Para usar o encaminhamento, conecte no seu servidor pelo ssh:

# ssh -X -p port user@server-address

Se vocẽ receber erros ao tentar executar um aplicativo gráfico, tente usar o encaminhamento confiável então:

# ssh -Y -p port user@server-address

Agora você pode iniciar qualquer aplicativo X no servidor remoto, a saida será redirecionada para a sua sessão local:

# xclock

Se você receber erros "Cannot open display", tente o seguinte comando como root:

$ xhost +

o comando acima irá permitir que qualquer um encaminhe aplicativos X11. Para restringir o encaminhamento a um determinado host:

$ xhost +hostname

onde hostname é o nome do host ao qual você quer encaminhar. Digite "man xhost" para mais detalhes.

Seja cuidadoso com alguns aplicativos que checam por uma instância na maquina local. O Firefox é um exemplo. Feche o Firefox ou use o seguinte parâmetro de inicialização para inicar uma instância na maquina local:

$ firefox -no-remote

Acelerando o SSH

Você pode fazer todas as sessões ao mesmo host utilizarem uma única conexão, o que irá acelerar muito os logins subsequentes, ao adicionar a seguinte linha abaixo do host apropriado em Template:Filename:

ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p

Alterando as cifras utilizadas pelo SSH para aquelas que requerem menos processamento pode melhorar a velocidade. Nesse aspecto as melhores escolhas são arcfour e blowfish-cbc. Por favor, não faça isso a menos que saiba o que estás fazendo;arcfour tem várias vulnerabilidades conhecidas. Para usá-las, execute o ssh com a opção Template:Codeline, assim:

# ssh -c arcfour,blowfish-cbc user@server-address

Para usá-las permanentemente, adicione a seguinte linha abaixo do host apropriado em Template:Filename:

Ciphers arcfour,blowfish-cbc

Outra opção para melhorar a velocidade é ativar a compressão com a opção Template:Codeline. Uma solução permanente para isso é adicionar a seguinte linha abaixo do host apropriado em Template:Filename:

Compression yes

O tempo de login pode ser reduzido utilizando a opção Template:Codeline, que pula a pesquisa em IPv6. Isso pode ser feito permanentemente adicionando a seguinte linha abaixo do host apropriado em Template:Filename:

AddressFamily inet

Outra forma de fazer essas mudanças permanentes é criar um atalho em Template:Filename:

alias ssh='ssh -C4c arcfour,blowfish-cbc'

Resolução de Problemas

Certifique-se de que a variável DISPLAY está corretamente configurada no servidor remoto:

ssh -X user@server-address
server$ echo $DISPLAY
localhost:10.0
server$ telnet localhost 6010
localhost/6010: lookup failure: Temporary failure in name resolution   

isso pode ser resolvido adicionando localhost ao arquivo Template:Filename.

Montando um Sistema de Arquivos Remoto com SSHFS

Instale o sshfs

# pacman -S sshfs

Carregue o módulo Fuse para a memória

# modprobe fuse

Adicione fuse à lista de módulos no arquivo Template:Filename para carregá-lo na inicalização do sistema.

Monte o diretório remoto usando sshfs

# mkdir ~/remote_folder
# sshfs USER@remote_server:/tmp ~/remote_folder

O comando acima irá fazer com que a pasta /tmp no servidor remoto seja montada como ~/remote_folder na maquina local. Copiando qualquer arquivo para essa pasta irá em cópia transparente através da rede usando SFTP. O mesmo ocorre quanto a edição, criação ou remoção de arquivos.

Quando terminarmos de utilizar o sistema de arquivos remoto, podemos desmontar o diretório remoto fazendo:

# fusermount -u ~/remote_folder

Se trabalharmos nessa pasta numa base diária, ele irá sabiamente adicionar à table de sistemas de arquivo Template:Filename. Desse forma ele pode ser automaticamente montado pelo sistema durante a inicialização ou manualmente (se a opção Template:Codeline for escolhida) sem a necessidade de especificar a localização remota a cada vez. Aqui uma entrada de exemplo da tabela:

sshfs#USER@remote_server:/tmp /full/path/to/directory fuse    defaults,auto,allow_other    0 0

Mantendo a Sessão Ativa

Sua sessão ssh irá desconectar automaticamente se permanecer ociosa. Para manter a conexão ativa adicione a seguinte linha ao arquivo Template:Filename ou para Template:Filename no cliente.

ServerAliveInterval 120

Isso irá enviar um sinal "keep alive" para o servidor a cada 120 segundos.

Reciprocamente, para manter conexões de entrada ativas, você pode definir

ClientAliveInterval 120

(ou algum outro número maior que 0) no arquivo Template:Filename no servidor.

Salvar os dados da conexão em .ssh/config

Sempre que você quer conectar a um servidor, você normalmente precisa digitar ao menos o endereço e o seu usuário. Para evitar o trabalho de digitar os servidores que você regularmente conecta, você pode utilizar o arquivo Template:Filename como mostrado no exemplo:

Template:File

Agora vocẽ pode simplesmente conectar ao servidor usando o nome que você especificou:

$ ssh myserver

Para ver uma lista completa de possíveis opções, cheque a pagina de manual do ssh_config no seu sistema ou a Documentação do ssh_config no site official em inglês.