SSH, ou Secure Shell, é um protocolo utilizado para a ligação segura entre um cliente e um servidor.
O SSH suporta vários mecanismos de autenticação. Neste tutorial irei abordar a criação de uma chave pública/privada a partir do nosso computador e a sua utilização numa vps.
Sendo uma chave digital em que parte está no nosso computador e outra parte no servidor, torna o sistema de autenticação muito mais seguro que uma simples password. Quando tudo estiver configurado é possível fazer login via SSH sem password.
De notar que é importante desactivar sistemas menos seguros à medida que vamos melhorando o processo de autenticação.
Criação de chaves SSH
Existem 2 formas de fazer isto tudo, contudo a mais utilizada é a criação das chaves no nosso pc, e depois a instalação na vps. Podemos inclusive ter a fantástica ideia de re-utilizar uma chave já criada vezes sem conta com outros servidores. (o que desaconselho, porque basta roubar uma chave e temos acesso a vários servidores).
Outra forma é criar a chave a partir do servidor e depois fazer ao contrário, mas ao fazer a partir do nosso computador reduz o risco de exposição da chave privada. Adiante…
Ao criar uma nova chave é conveniente verificar se já existem chaves criadas só para não nos perdermos. Caso uma chave já exista e não for mudado o seu nome, podemos estar a gravar uma nova por cima sem querer.
De forma a verificar se já existe alguma chave, aconselho correr o comando ls.
ls -l ~/.ssh/id_*.pub
Se o comando der erro e retornar
é sinal que não existe nada criado de chaves SSH.
caso retorne
É sinal que já temos algo criado.
Quando falamos em chaves SSH temos de ter em mente um par de chaves. Uma que fica no servidor para o user em questão, e outra no nosso próprio pc.
De forma a gerar uma chave podemos correr o seguinte comando (irá ser gerada uma chave privada e pública com 4096 bits):
ssh-keygen -t rsa -b 4096 -C "podemos colocar aqui uma referência ou email, é útil quando temos várias chaves e queremos ter a certeza de saber qual é qual"
por exemplo:
ssh-keygen -t rsa -b 4096 -C "servidor xpto produção"
Assim que um dos comandos for executado irá ser questionado qual o sítio onde queremos guardar as chaves criadas.
Enter file in which to save the key (/home/USERNAME/.ssh/id_rsa):
No caso do meu mac, utilizo “~/.ssh/nome-da-chave” (sem extensão)
Após este passo, somos questionados se queremos adicionar uma passphrase. Ou seja, uma password extra. Esta password adiciona uma camada de segurança, do qual irá sempre ser questionada quando estivermos a efectuar uma ligação SSH a uma máquina remota.
No caso de não querermos, basta pressionar enter.
Enter passphrase (empty for no passphrase):
E está concluído este passo.
Cópia da chave pública para a VPS
Teremos que copiar a nossa chave pública para o servidor, indicando qual é que é o user onde queremos instalar esta chave. Usando o terminal no mac:
ssh-copy-id -i nome-do-ficheiro.pub username@server_ip_address
Por exemplo: “ssh-copy-id -i serverABC [email protected]”
Seremos questionados pela password do root e depois de autenticado, ele irá colocar a chave no sítio certo.
remote_username@server_ip_address's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@server_ip_address'"
and check to make sure that only the key(s) you wanted were added.
Teste SSH
Agora basta um teste:
ssh -i ~/.ssh/nome-da-chave remote_username@server_ip_address
Se foi definida uma password adicional somos questionados a colocar, senão a ligação é feita.
Desactivar a autenticação por password normal no SSH
Antes de fazer este passo é importantíssimo testar o login através de chave pública/privada.
Um bom failsafe será sempre ter uma funcionalidade de rescue no nosso ISP. Caso não exista esta funcionalidade é mesmo aconselhado testar tudo. Testar, testar, testar.
Login no server:
ssh sudo_user@server_ip_address
Autenticação de root (para evitar tar sempre a escrever sudo):
sudo -i
Abrir o sshd_config (o ficheiro de config do ssh)
nano /etc/ssh/sshd_config
Vai ser necessário desactivar o PasswordAurhentication. Adicionalmente iremos colocar também a “no” o PermitEmptyPasswords e o UsePAM:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
PermitEmptyPasswords no
Sair com um Control+X e gravar com “y”.
No final, fazer restart ao serviço de ssh:
service ssh restart