ToDo: unir a página em inglês com a página em francês, que é mais completa

Introdução

SSH significa Shell S eguro e é um protocolo para login remoto seguro e outros serviços de rede segura em uma rede insegura 1. Veja Wikipedia - Shell Seguro para informações mais gerais e ssh, lsh-client ou dropbear para as implementações de software SSH, das quais OpenSSH é o mais popular e mais amplamente usado 2. O SSH substitui o telnet não criptografado, rlogin e rsh, e adiciona muitos recursos.

Neste documento usaremos a suíte de comandos OpenSSH e também assumiremos que as duas variáveis a seguir estão definidas:

remote_host=<the remote computer>
remote_user=<your user name on $remote_host>

Portanto, se você quiser usar os códigos abaixo, primeiro defina essas variáveis para o nome do computador remoto e para o nome de usuário(a) nesse computador remoto. Em seguida, copiar e colar os comandos abaixo deve funcionar. remote_host também pode ser um endereço IP.

Instalação

Instalação do cliente

Normalmente o cliente é instalado por padrão. Caso contrário, execute como root:

apt install openssh-client

Instalação do servidor

O servidor permite a conexão remota e é instalado executando como root:

apt install openssh-server

Arquivos de configuração

Os arquivos de configuração principais estão no diretório /etc/ssh:

Desde o Bullseye, os arquivos de configuração também serão lidos dos seguintes subdiretórios:

Esses diretórios foram ativados com o parâmetro Include em ssh_config e sshd_config. Fazer alterações locais usando esses diretórios pode facilitar o gerenciamento de configuração e evitar problemas com atualizações que fazem alterações em arquivos de configuração gerenciados de pacotes.

Além disso, o diretório /etc/ssh contém os pares de chaves privadas/públicas que identificam seu servidor:

Desde o OpenSSH 5.73, um novo par de chaves privada/pública está disponível:

Desde o OpenSSH 6.54, um novo par de chaves privada/pública está disponível:

Regerando as chaves do servidor

rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

Login Remoto

Com senha

Se você deseja logar no $remote_host como o(a) usuário(a) $remote_user, simplesmente digite

ssh $remote_user@$remote_host

e então digite sua senha.

Se o nome de usuário(a) local é igual ao da máquina remota, você pode remover a parte do $remote_user@ e digitar simplesmente

ssh $remote_host

Se esta é a primeira vez que você efetua login no computador remoto, o ssh perguntará se você tem certeza de que deseja se conectar ao computador remoto. Responda "sim" depois de ter verificado a impressão digital do computador remoto, digite sua senha e o ssh conectará você ao servidor remoto.

Uso de chaves compartilhadas

Uma das funções do ssh é usar um par de chaves privadas/públicas para se conectar a um servidor remoto. Também conhecidas como chaves SSH. Esse método permite que você faça login em um servidor remoto sem digitar sua senha todas as vezes. Para fazer isso, você deve gerar um par de chaves privada/pública em sua máquina local e colocar a chave pública no servidor remoto.

Para gerar a chave, use o programa ssh-keygen da seguinte forma

ssh-keygen -t rsa

Este programa gera um par de chaves privada/pública no diretório ~/.ssh. O programa primeiro solicita os arquivos de destino para as chaves, por padrão localizado em ~/.ssh. A seguir, é solicitada uma senha.

Nota: recomendamos não deixar a senha vazia. Um(a) invasor(a) que consiga sua chave privada pode se conectar aos servidores onde você copiou sua chave pública, já que a frase secreta está vazia. Escolha uma senha longa e complexa.

Sua chave privada é id_rsa (não dê para outra pessoa), sua chave pública é id_rsa.pub.

Você copia sua chave pública para um servidor remoto com o comando ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub $remote_user@$remote_host

Agora você pode conectar-se simplesmente ao host remoto e a senha para a sua chave privada é solicitada. Uma vez feito isso, você se conecta ao host remoto. No caso de uma nova conexão, a frase secreta não é solicitada novamente durante toda a sessão.

Gerenciamento de chaves

Uso de interface gráfica

Opcionalmente, o seahorse é um aplicativo GNOME que gerencia facilmente chaves e senhas de criptografia através de uma interface gráfica de usuário(a) (GUI) intuitiva. O Seahorse é capaz de fazer várias operações, como criar chaves SSH ou PGP, configurá-las e armazená-las em cache. Leia mais.

Segurança

Servidor SSH

Por padrão, um servidor SSH é relativamente seguro. Com a ajuda de algumas boas práticas, opções de configuração e utilitários externos, é possível tornar ainda mais difícil para 'robôs' e crackers

Boas prática com o servidor SSH

Opções de configuração

(!) Deve-se editar o arquivo /etc/ssh/sshd_config para alterar os parâmetros e depois reiniciar o servidor ssh com

service ssh restart

{i} As opções AllowUsers e AllowGroups não melhoram a segurança de um servidor SSH. Mas, em certos casos, seu uso permite resistir a um ataque de força bruta por um pouco mais de tempo.

Você pode listar as atuais configurações do sshd com o seguinte comando:

sshd -T | sort

Utilitários Externos

Cliente SSH

Boas práticas com o cliente SSH

Funções adicionais

Exiba arquivos na interface gráfica

Em gerenciadores de arquivos como o Konqueror, Dolphin, Krusader e Midnight Commander, você pode usar o FISH para ver os arquivos na interface gráfica usando

fish://username@server_name_or_ip

Comandos Adicionais

scp

scp é um utilitário de linha de comando que permite transferir arquivos entre duas máquinas.

scp $source_file $remote_user@$remote_host:$destination_file

scp $remote_user@$remote_host:$source_file $destination_file

sftp

[vazio por enquanto]

modo de texto

[vazio por enquanto]

modo gráfico

[vazio por enquanto]

clusterssh

[vazio por enquanto]

ssh-agent e ssh-add

ssh-agent é um utilitário para gerenciar chaves privadas e suas senhas. A maioria dos ambientes de área de trabalho no Debian já são configurados para executar o ssh-agent (através de serviços de usuário(a) systemd ou /etc/X11/Xsession), então você não deve precisar iniciá-lo manualmente.

# Verifica se o ssh-agent está rodando
env | grep -i ssh

Ainda assim você precisa dizer ao agente que gerencie suas chaves.

# Lista as chaves gerenciadas pelo agente
ssh-add -l
# Adiciona sua chave ssh
ssh-add ~/.ssh/your_private_key

Quando uma chave privada é necessária pela primeira vez, você é solicitado para entrar sua senha. O ssh-agent se lembrará da chave para que sua senha não seja mais solicitada.

chaveiro

Keychain (chaveiro), fornecido pelo pacote keychain, é um script shell que permite usar o agente ssh em várias sessões do mesmo computador. Em efeito após a primeira inicialização, o agente ssh cria um soquete permanente, permitindo a comunicação com o ssh. Este soquete é referenciado apenas no ambiente da sessão na qual o agente foi iniciado. O chaveiro permite detectar o agente e propagar o acesso a esse agente para outras sessões; isso permite usar uma única instância de ssh-agent por usuário(a) em uma máquina.

ssh-askpass

ssh-askpass é um utilitário para simplificar a pergunta da senha de uma chave privada ao usá-la. Existem várias implementações:

libpam-usb

libpam-usb é um utilitário (disponível até o Debian Jessie) que permite a autenticação com um pendrive USB. Este pacote inclui um utilitário interessante: pamusb-agent. Este utilitário, uma vez configurado corretamente, permite carregar as chaves SSH presentes no pendrive USB quando este estiver conectado e descarregá-las quando estiver desconectado.


Comandos Remotos

Se você quer apenas executar um comando no computador remoto, não precisa fazer o login. Você pode dizer ao ssh para executar o comando sem login, por exemplo,

ssh $remote_user@$remote_host 'ls *.txt'

lista todos os arquivos com extensão .txt no computador remoto. Isso funciona com aspas simples '...' como mostrado aqui, com aspas duplas "..." e sem aspas. Pode haver diferenças entre esses três casos, embora ainda não documentados aqui.

SSH no Debian a partir de outro SO

Boas práticas no uso do SSH

Você deve ler isto: https://lackof.org/taggart/hacking/ssh/

Este documento reúne muitas boas práticas que usuários(as) regulares de SSH devem seguir para evitar comprometer a segurança de suas contas (e também de toda a máquina).

Configure seu ~/.ssh/config para enviar somente a chave correta.

Host master.debian.org
    User account
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

Solução de problemas

Incompatibilidade de versão do OpenSSL. Construído com 1000105f, você tem 10001060

Se você receber uma mensagem de erro como esta ao iniciar o daemon ssh, você precisa executar:

apt install openssh-server openssh-client

Veja também o bug #732940.

Travamento do SSH

"Problema"

Você está tentando conectar via SSH em um computador remoto. Mas durante o login do SSH, a sessão trava/congela indefinidamente. Assim, o prompt de comando não é apresentado. E você não pode usar nenhum comando SSH :( Ao usar o modo de depuração SSH, a sessão fica travada nesta linha debug2: channel 0: open confirm rwindow 0 rmax 32768

"A causa possível" '

Com alguns roteadores atrás do NAT e ao usar o OpenSSH. Durante a configuração da sessão, após a senha ter sido dada, o OpenSSH define o campo TOS ("type of service" - tipo de serviço) no datagrama IP. O roteador engasga nisso. O efeito é que a sua sessão SSH fica travada indefinidamente. Em outras palavras, comandos ou conexões SSH raramente funcionam ou não funcionam.

Solução com IPQoS 0x00

Até o(a) fabricante do roteador corrigir o firmware, aqui está uma opção para resolver esse problema:

  1. Verifique duas vezes se a versão do openssh-server e openssh-client é a 5.7 ou mais recente. Por exemplo, a solução abaixo deve funcionar com o Debian 7.11 Wheezy ou mais recente, pois vem com a versão 6.0 do OpenSSH.

  2. Edite um dos seguintes dois arquivos localizados em:

    ~/.ssh/config

    ou

    /etc/ssh/ssh_config

    Nota: o arquivo config diferencia-se por usuário(a), e o arquivo ssh_config destina-se a todos(as) os(as) usuários(as) e para o sistema como um todo. Se não tem certeza, edite o arquivo de usuário(a) config apropriado.

    O conteúdo do arquivo antes da modificação

    Host *

    O conteúdo do arquivo após a modificação

    Host *
      IPQoS 0x00
  3. Se você tiver alguma janela de terminal/console aberta, feche todas. Fazer isso fechará quaisquer sessões SSH ativas.
  4. Não há necessidade de reiniciar o OpenSSH ou seu Debian. Tente novamente uma conexão SSH em qualquer servidor remoto. Deve funcionar. Você corrigiu com sucesso esse problema :)

    Obrigado(a) a Joe e catmaker por esta dica :)

    Documentação relacionada em https://www.openssh.com/txt/release-5.7

Solução com netcat

/!\ ATENÇÃO: Sugere-se considerar o uso da outra solução com IPQoS 0x00 em vez de usar a opção netcat/ProxyCommand nc %h %p. Porque IPQoS 0x00 é a opção oficial e embutida do OpenSSH. Além disso, IPQoS 0x00 é um modo mais direto de resolver a questão, e potencialmente uma opção mais segura. Isto porque IPQoS 0x00 usa criptografia embutida do SSH para transferências seguras. Compare com as transferências não criptografadas do netcat. Fontes:[[https://nc110.sourceforge.io/|1]] 2. Se escolher usar a opção netcat/ProxyCommand nc %h %p, continue lendo.

Outra opção para resolver que o problema de travamento do SSH é usar ProxyCommand nc %h %p. Para fazer isso, siga os mesmos passos que a solução acima com IPQoS 0x00. Mas substitua IPQoS 0x00 com

ProxyCommand nc %h %p

Mantenha ativa a conexão SSH

Por motivos de segurança, por padrão uma conexão SSH é automaticamente fechada após um período de tempo definido. Mas em alguns casos você quer manter essa conexão aberta. Como armazenamento em nuvem sobre uma conexão SSH.

/!\ ATENÇÃO: Antes de ativar a opção de manutenção da conexão SSH viva, sugere-se considerar a segurança tanto do seu cliente SSH quanto do servidor SSH. Porque, por exemplo, há um risco de que se seus(suas) usuários(as) deixem a sessão SSH aberta, e o computador sem supervisão e desbloqueado. Qualquer pessoa pode acessar esse computador e explorar essa conexão SSH aberta. Por exemplo, usando o comando {passwd e alterar a senha. E assim obter acesso ao servidor. Em outras palavras, antes de ativar a opção que mantém a conexão SSH ativa, sugere-se usar seu melhor julgamento e boas práticas de segurança.

For Debian 7.x server

Passos para manter a conexão SSH ativa.

No servidor SSH, edite o arquivo /etc/ssh/sshd_config e adicione o seguinte ao final do arquivo:

# Mantém a conexão SSH do cliente ativa, enviando a cada 300 segundos um pequeno pacote keep-alive para o servidor a fim de usar a conexão ssh. 300 segundos são iguais a 5 minutos.
ClientAliveInterval 300

# Desconecte o cliente após 3333 pedidos "ClientAlive". Formato é (ClientAliveInterval x ClientAliveCountMax). Neste exemplo (300 segundos x 3333) = ~999,900 segundos = ~16,665 minutos = ~277 horas = ~11 dias.
ClientAliveCountMax 3333

Como usuário(a) root, reinicie o serviço SSH:

service sshd restart

Por favor note que nos sistemas Debian recentes (por exemplo, Wheezy 7 com atualizações atuais a partir de novembro de 2015), o comando acima não funciona mais e retorna o erro:

sudo service sshd restart
sshd: unrecognized service

Contudo, o seguinte comando funciona:

sudo service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

Veja também


CategoryNetwork CategorySoftware CategorySystemAdministration CategorySystemSecurity