Translation(s): Deutsch - English - Français - Italiano - Español - Português Brasileiro
Contents
Afazer: unir essa página com a 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 estaremos usando o conjunto de comandos OpenSSH e também será assumido 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 o nome de usuário nesse computador remoto. Em seguida, cortar 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. Se não estiver é suficiente rodar como root:
apt-get install openssh-client
Instalação do servidor
O servidor permite conexão remota e é instalado rodando como root:
apt-get 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
Além disso, este diretório 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 usuário $remote_user simplesmente digite
ssh $remote_user@$remote_host
e então digite a sua senha.
Se o nome de usuário local é igual ao da máquina remote, então 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 conhecido 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, localizados em ~/.ssh. Depois é solicitada uma senha.
Nota: Recomendamos não deixar a senha vazia. Um invasor 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 do GNOME que gerencia facilmente chaves e senhas de criptografia através de uma Interface Gráfica de Usuário (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.
Tornar Seguro
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. Que 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 predefinido de tentativas de login com falha. Que protege automaticamente contra ataque de força bruta.
Mais boas práticas para usar o ssh em http://lackof.org/taggart/hacking/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
Desativar o uso de senhas para autenticação (PasswordAuthentication no).
Desativar o uso da conta root (PermitRootLogin no).
Somente permitir o login de certos usuário 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.
Utilitários Externos
fail2ban: permite listar automaticamente os IPs que tentam força bruta um servidor SSH com a ajuda do pacote iptables.
denyhosts : como o fail2ban, o denyhosts permite bloquear endereços IP tentando forçar uma conexão bruta com o ssh. Mas, ao contrário do fail2ban, ele 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. Que permite proteger contra falhas de segurança conhecidas.
Use autenticação chaves SSH. Em vez de autenticação por senha.
Adicione senhas fortes às suas chaves SSH. Isso reduz o risco de ataque de força bruta.
Funções adicionais
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]
mode 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. Deve ser invocado no início de sua sessão como em uma shell bourne:
eval `ssh-agent -s`
ou um shell em C:
eval `ssh-agent -c`
Quando uma chave privada é necessária pela primeira vez, você é solicitado a informar sua frase secreta e o agente ssh memoriza a chave. Sempre que essa chave privada é usada mais tarde, a frase-senha não é mais solicitada.
ssh-add pode ser usado para gerenciar as chaves lembradas:
Adicionar uma chave: ssh-add $private_key
Listar as chaves adicionadas: ssh-add -l
Remova todas as chaves conhecidas do ssh-agent: ssh-add -D
chaveiro
Keychain, fornecido pelo pacote keychain, é um script de shell que permite usar o agente ssh em várias sessões do mesmo computador. 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 em uma máquina.
ssh-askpass
ssh-askpass é um utilitário para simplesmente 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 do KDE
ssh-askpass-gnome: integração do ssh-askpass no ambiente Gnome
libpam-usb
libpam-usb é um utilitário (disponível apenas para o Debian Jessie) permitindo a autenticação com um pendrive. Este pacote inclui um utilitário útil: pamusb-agent. Este utilitário, uma vez configurado corretamente, permite carregar as chaves SSH presentes no pendrive USB quando ele 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 de outro SO
PuTTY é um aplicativo emulador de terminal que pode atuar como um cliente para o ssh. É amplamente utilizado pelos usuários do Windows.
A wikipedia tem uma comparação entre clientes SSH
Solução de problemas
Incompatibilidade de versão do OpenSSL. Construído com 1000105f, você tem o 10001060
Se você receber uma mensagem de erro como esta ao iniciar o daemon ssh, você precisa executar:
apt-get install openssh-server openssh-client
Veja também o relatório do bug.
O conteúdo abaixo não foi traduzido, pois aparenta estar desatualizado.
SSH hangs
Issue
You are trying to SSH into a remote computer. But during SSH log-in the session hangs/freezes indefinitely. Thus you are not presented with the command prompt. And you are not able to use any SSH commands When using SSH debug mode the session hangs at this line debug2: channel 0: open confirm rwindow 0 rmax 32768
Possible cause
With some routers behind NAT and when using OpenSSH. During session setup, after the password has been given, OpenSSH sets the TOS (type of service) field in the IP datagram. The router choke on this. The effect is that your SSH session hangs indefinitely. In other words, SSH commands or connections are seldom working or not working at all.
Resolution with IPQoS 0x00
Until your router manufacturer fix their firmware. Here is one option to resolve that issue:
Double check your openssh-server and openssh-client version are 5.7 or more recent. For example the resolution below should work with Debian 7.11 Wheezy or more recent as it comes with OpenSSH version 6.0.
Edit one of the following two files located at:
~/.ssh/config
or
/etc/ssh/ssh_config
Note: config file is per user and ssh_config file is for all users and system wide. If unsure edit the appropriate user config file.
File content before
Host *
File content after
Host * IPQoS 0x00
- If you have any Terminal/Console window(s) already open. Fully close all of them. Doing so will close any active SSH sessions.
No need to restart OpenSSH or your Debian. Try again to SSH into any remote server. It should work. Done you have successfully fixed that issue
Thanks to Joe and catmaker for this tip
Related documentation at https://www.openssh.com/txt/release-5.7
Resolution with netcat
WARNING: It is suggested to consider using that other resolution with IPQoS 0x00 instead of using netcat/ProxyCommand nc %h %p option. Because IPQoS 0x00 is the official built-in OpenSSH option. Also IPQoS 0x00 is a more direct way to resolve that issue, and potentially more secure option. Because IPQoS 0x00 uses SSH's built in encryption for secure transfers. Compare to netcat's not encrypted transfers. Sources: 1 2. If you choose to use netcat/ProxyCommand nc %h %p option read on.
Another option to resolve that SSH hangs issue is to use ProxyCommand nc %h %p. To do so follow the same steps as that above resolution with IPQoS 0x00. But replace IPQoS 0x00 with
ProxyCommand nc %h %p
Keep SSH connection alive
For security reason, by default a SSH connection is automatically closed after a set period of time. But in some cases you want to keep that connection open. Such as cloud storage over SSH connection.
WARNING: Before activating that keep SSH connection alive option. It is suggested to consider securing both your SSH Client and SSH Server. Because for example, there is a risk that if your users leave their SSH session open, and their computer unattended and unlocked. Anyone can approach that computer, then exploit that open SSH connection. For example by using the passwd command, and change the password. And thus gain access to the server. In other words, before activating that keep SSH connection alive option, it is suggested to use your best judgment and good security practices.
For Debian 7.x server
Steps to keep SSH connection alive.
On the SSH server edit "/etc/ssh/sshd_config" file
Add the following at the bottom of that file
# Keep client SSH connection alive by sending every 300 seconds a small keep-alive packet to the server in order to use ssh connection. 300 seconds equal 5 minutes. ClientAliveInterval 300 # Disconnect client after 3333 "ClientAlive" requests. Format is (ClientAliveInterval x ClientAliveCountMax). In this example (300 seconds x 3333) = ~999,900 seconds = ~16,665 minutes = ~277 hours = ~11 days. ClientAliveCountMax 3333
As Root user restart the SSH service
service sshd restart
Please note that on recent Debian systems (e.g. Wheezy 7 with current updates as of Nov. 2015), the above command no longer works and returns the error:
sudo service sshd restart sshd: unrecognized service
However, the following works:
sudo service ssh restart [ ok ] Restarting OpenBSD Secure Shell server: sshd.