# Guia do Linux/Avançado/Servidor ssh/Introdução
## Introdução

O serviço de ssh permite fazer o acesso remoto ao console de sua máquina, em outras palavras, você poderá acessar sua máquina como se estivesse conectado localmente ao seu console (substituindo o rlogin e rsh). A principal diferença com relação ao serviço telnet padrão, rlogin e rsh é que toda a comunicação entre cliente/servidor é feita de forma encriptada usando chaves públicas/privadas RSA para criptografia garantindo uma transferência segura de dados.
A velocidade do console remoto conectado via Internet é excelente (melhor que a obtida pelo telnet e serviços r*) dando a impressão de uma conexão em tempo real (mesmo em links discados de 9.600 KB/s), a compactação dos dados também pode ser ativada para elevar ainda mais a velocidade entre cliente-servidor ssh. Além do serviço de acesso remoto, o scp possibilita a transferência/recepção segura de arquivos (substituindo o rcp).
Em conexões sem criptografia (rsh, rlogin) os dados trafegam de forma desprotegida e caso exista algum sniffer instalado em sua rota com a máquina destino, todo o que fizer poderá ser capturado (incluindo senhas).
Para o ssh funcionar, é preciso que:
* o daemon sshd esteja rodando nas duas máquinas, tanto a máquina local quanto a remota.
* o firewall da máquina remota deixe passar as conexões pelo ssh
O daemon sshd pode ser baixado de forma normal (apt-get, yum, urpmi, etc), sua instalação existe um comando simples, e o firewall pode ser alterado através da GUI.

### Versão

É assumido que esteja usando a versão 2.0 do ssh. As explicações contidas aqui podem funcionar para versões posteriores, mas é recomendável que leia a documentação sobre modificações no programa (changelog) em busca de mudanças que alterem o sentido das explicações fornecidas aqui.

### História

O openSSH (explicado neste capítulo) é baseado na última versão livre do implementação de Tatu Ylonen com todos os algoritmos patenteados (para bibliotecas externas) removidos, todos as falhas de segurança corrigidas, novas características e muitas outras melhorias. O openSSH foi criado por Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt e Dug Song.

### Contribuindo

A Home page principal é http://www.unixuser.org/~haruyama/security/openssh/index.html. Falhas, correções e sugestões podem ser enviadas para a lista de discussão openssh-unix-dev@mindrot.org (aberta a postagens de usuários não inscritos).

### Características

Abaixo as principais características do serviço ssh (Openssh).
* Conexão de dados criptografada entre cliente/servidor.
* Cópia de arquivos usando conexão criptografada.
* Suporte a ftp criptografado (sftp).
* Suporte a compactação de dados entre cliente/servidor.
* Controle de acesso das interfaces servidas pelo servidor ssh.
* Suporte a controle de acesso tcp wrappers.
* Autenticação usando um par de chaves pública/privada RSA ou DSA.
* Algoritmo de criptografia livre de patentes.
* Suporte a PAM.
* Suporte a caracteres ANSI (cores e códigos de escape especiais no console).

### Ficha técnica

Pacote: ssh
Utilitários:
* ssh - Cliente ssh (console remoto).
* slogin - Link simbólico para o programa ssh.
* sshd - Servidor de shell seguro ssh.
* scp - Programa para transferência de arquivos entre cliente/servidor
* ssh-keygen - Gera chaves de autenticação para o ssh
* sftp - Cliente ftp com suporte a comunicação segura.
* sftp-server - Servidor ftp com suporte a comunicação segura.
* ssh-add - Adiciona chaves de autenticação DSA ou RSA ao programa de autenticação.
* ssh-agent - Agente de autenticação, sua função é armazenar a chave privada para autenticação via chave pública (DSA ou RSA).
* ssh-keyscan - Scaneia por chaves públicas de autenticação de hosts especificados. O principal objetivo é ajudar na construção do arquivo local know_hosts.
* ssh-copy-id - Usado para instalação do arquivo identity.pub em uma máquina remota.
Arquivos de configuração:
* /etc/ssh/sshd_config - Arquivo de configuração do servidor ssh.
* /etc/ssh/ssh_config - Arquivo de configuração do cliente ssh.
* ~/.ssh/config - Arquivo de configuração pessoal do cliente ssh.

### Requerimentos de Hardware

É recomendado no mínimo 6MB de memória RAM para a execução do serviço ssh mais o kernel do Linux. Este limite deve ser redimensionado para servidores de acesso dedicado, uma quantidade de 64MB deve ser confortável para centenas de usuários conectados simultaneamente (o que raramente acontece).
Veja também [ch-d-restr.html Restrições de acesso, recursos e serviços, Capítulo 19] para configuração de restrições usando PAM. O ssh que acompanha a distribuição Debian vem com o suporte a tcp wrappers compilado por padrão.

### Arquivos de log criados pelo servidor ssh

Detalhes sobre a execução do servidor sshd (como inicio, autenticação e término) são enviadas ao syslog do sistema. A prioridade e nível são definidos no arquivo de configuração /etc/ssh/sshd_config (veja [#s-s-ssh-server-sshd_config Exemplo de sshd_config com explicações das diretivas, Seção 15.3.8]).

### Instalação do servidor openSSH

apt-get install ssh.
Por padrão o servidor sshd é instalado como daemon, também é possível executa-lo via inetd mas isto não é aconselhável porque o servidor gera uma chave aleatória de seção toda vez que é iniciado, isto podendo levar vários segundos (quando é usada a versão 1 do protocolo ssh, veja [#s-s-ssh-server-protodiff Diferenças nas versões do protocolo, Seção 15.3.7]).

### Iniciando o servidor/reiniciando/recarregando a configuração

O arquivo que controla o funcionamento do daemon do ssh é controlado pelo arquivo /etc/init.d/ssh.
A execução do ssh através de inetd é automática quando é feita uma requisição para a porta 22.

### Opções de linha de comando

Opções de linha de comando do servidor sshd:
* -b bits - Especifica o número de bits da chave do servidor (768 por padrão).
* -d - Modo de depuração - O servidor envia detalhes sobre seu funcionamento aos logs do sistema e não é executado em segundo plano. Ele também responderá conexões pelo mesmo processo. Podem ser usadas no máximo 3 opções -d para aumentar os detalhes de depuração.
* -f arquivo_configuração Indica um arquivo de configuração alternativo (por padrão é usado /etc/ssh/sshd_config). O ssh pode ser configurado através de opções de linha de comando mas requer um arquivo de configuração para ser executado. Opções de linha de comando substituem as especificadas no arquivo de configuração.
* -g segundos - Especifica o tempo máximo para a digitação de senha de acesso. Após o tempo especificado o servidor encerra a conexão. O valor padrão é 600 segundos e 0 desativa este recurso.
* -h arquivo_chave - Diz qual arquivo contém a chave privada local. O padrão é /etc/ssh/ssh_host_key e somente o usuário root deve ter permissões de leitura neste arquivo. Será necessário especificar esta opção caso o sshd não esteja sendo executado como usuário root.
É possível ter múltiplos arquivos de chaves para os protocolos 1 e 2 do ssh.
* -i - Indica que o servidor sshd será executado pelo inetd. Isto não é aconselhável porque o servidor gerará a chave aleatória de seção toda vez que for iniciado e isto pode levar alguns segundos. Esta opção pode se tornar viável com o uso do protocolo 2 ou criando chaves pequenas como 512 bytes (no ssh 1), mas a segurança criptográfica também será diminuída. Veja as diferenças entre os dois protocolos em [#s-s-ssh-server-protodiff Diferenças nas versões do protocolo, Seção 15.3.7].
* -k segundos - Especifica a frequência da geração de novas chaves do daemon sshd. O valor padrão é 3600 segundos e 0 desativa este recurso.
ATENÇÃO: NÃO desative este recurso!!! Esta opção traz a segurança que uma nova chave gerada de servidor será gerada constantemente (esta chave é enviada junto com a chave pública quando o cliente conecta e fica residente na memória volátil), assim mesmo que um cracker consiga obtê-la interceptando as conexões, será praticamente impossível tentar qualquer coisa. Valores menores tendem a aumentar ainda mais a segurança.
* -p porta - Especifica a porta que o daemon sshd atenderá as requisições. Por padrão é usada a porta 22.
* -q - Nenhuma mensagem será enviada ao syslog do sistema.
* -u tam - Especifica o tamanho do campo de nome do computador que será armazenado no arquivo utmp. A opção u0 faz somente endereços IP serem gravados.
* -D - Quando usada não faz o sshd iniciar em segundo plano.
* -V versão_cliente - Assume que o cliente possui a versão ssh especificada (1 ou 2) e não faz os testes de identificação de protocolo.
* -4 - Força o uso do protocolo IP tradicional (IPv4).
* -6 - Força o uso da nova geração do protocolo IP (IPv6).
A maioria das opções são realmente úteis para modificar o comportamento do servidor ssh sem mexer em seu arquivo de configuração (para fins de testes) ou para executar um servidor ssh pessoal, que deverá ter arquivos de configuração específicos.