Contents
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:
ssh_config : arquivo de configuração do cliente
sshd_config : arquivo de configuração do servidor
Desde o Bullseye, os arquivos de configuração também serão lidos dos seguintes subdiretórios:
/etc/ssh/ssh_config.d/*.conf : arquivo de configuração do cliente
/etc/ssh/sshd_config.d/*.conf : arquivo de configuração do servidor
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:
- ssh_host_dsa_key
- ssh_host_dsa_key.pub
- ssh_host_rsa_key
- ssh_host_rsa_key.pub
Desde o OpenSSH 5.73, um novo par de chaves privada/pública está disponível:
- ssh_host_ecdsa_key
- ssh_host_ecdsa_key.pub
Desde o OpenSSH 6.54, um novo par de chaves privada/pública está disponível:
- ssh_host_ed25519_key
- ssh_host_ed25519_key.pub
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
Aplique atualizações de segurança do openssh-server o mais rápido possível. Isto permite proteger contra falhas de segurança conhecidas.
Ativar autenticação de chaves SSH somente com senhas. Desativar a autenticação somente por senha.
Considere o uso de fail2ban, que é um monitor de arquivo de log que proíbe automaticamente um endereço IP após um número pré-definido de tentativas de login com falha. Protege automaticamente contra ataques de força bruta.
Mais boas práticas para usar o ssh em http://lackof.org/taggart/hacking/ssh/
Recomendações da Mozilla sobre configuração de servidores e clientes SSH em https://infosec.mozilla.org/guidelines/openssh.html
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
Desativar o uso de senhas para autenticação (PasswordAuthentication no).
Desativar o uso da conta root (PermitRootLogin no).
Somente permitir o login de certos(as) usuários(as) ou grupos (AllowUsers e AllowGroups)
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
fail2ban: permite listar automaticamente os IPs que tentam ataques de força bruta em um servidor SSH com a ajuda do pacote iptables.
denyhosts : como o fail2ban, o denyhosts permite bloquear endereços IP tentando conexões com o via ataques de força bruta. Mas, ao contrário do fail2ban, não usa o pacote iptables, mas o arquivo /etc/hosts.deny.
Cliente SSH
Boas práticas com o cliente SSH
Aplique as atualizações de segurança do openssh-client o mais rápido possível. Permite proteger contra falhas de segurança conhecidas.
Use autenticação com chaves SSH em vez de autenticação por senhas.
Adicione senhas fortes as suas chaves SSH. Isso reduz o risco de ataques de força bruta.
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.
- Enviar um arquivo:
scp $source_file $remote_user@$remote_host:$destination_file
- Copiar um arquivo para a máquina local:
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:
x11-ssh-askpass: versão para X11
kaskpass: integração do ssh-askpass no ambiente KDE
ssh-askpass-gnome: integração do ssh-askpass no ambiente GNOME
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
PuTTY é um aplicativo emulador de terminal que pode atuar como um cliente para o ssh. É amplamente utilizado por usuários(as) do Windows.
A wikipedia tem uma comparação entre clientes SSH
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:
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.
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
- Se você tiver alguma janela de terminal/console aberta, feche todas. Fazer isso fechará quaisquer sessões SSH ativas.
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
screen - multiplexador de terminal com emulação de terminal VT100/ANSI
tmux - multiplexador de terminal alternativo
CategoryNetwork CategorySoftware CategorySystemAdministration CategorySystemSecurity