Como corrigir um erro "Permission denied (publickey)" SSH no Linux?
O SSH é uma ferramenta útil para se ligar a máquinas remotas, mas pode deparar-se com um erro “Permission denied (publickey)” que envolve a sua chave pública no Linux. Felizmente, existem algumas correcções fáceis que pode tentar para resolver o problema.
O que é uma chave pública?
Gerar um par de chaves para SSH no Linux envolve a criação de uma chave pública e sua contraparte privada correspondente. A chave privada é cuidadosamente protegida pelo utilizador, enquanto a chave pública é transmitida para servidores remotos para facilitar o início de sessão seguro sem necessidade de uma palavra-passe. Ao tentar estabelecer uma ligação, o cliente SSH no sistema local verifica a autenticidade da chave pública em relação à chave privada detida pelo utilizador.
A principal vantagem desta abordagem reside no facto de a divulgação da chave pública ser suficiente. Desde que se mantenha a confidencialidade da sua chave privada, o utilizador permanece protegido mesmo que a sua chave pública seja conhecida, uma vez que esta última seria infrutífera sem a primeira.
Para que o OpenSSH, uma solução de cliente e servidor de código aberto prevalecente, funcione corretamente, devem ser concedidas permissões específicas a um determinado ficheiro localizado no diretório home do utilizador (.ssh/authorized\_keys). Especificamente, o arquivo não deve ter suas permissões de gravação configuradas para nenhum usuário fora do proprietário, denominado “world-writable”, ou então o sistema não funcionará corretamente. Notavelmente, devido ao ponto inicial presente antes do nome do diretório, este arquivo não aparecerá em listagens padrão de arquivos usando comandos regulares como “ls”, necessitando a utilização do comando mais inclusivo “ls -A” seguido de “.
A modificação das permissões pode ocorrer quando um ficheiro é transferido de um dispositivo para outro ou criado no seu sistema atual. No entanto, o ajuste dessas configurações é fácil e pode ser feito imediatamente.
Verifique as permissões da sua chave pública
O ficheiro authorized\_keys é um ficheiro de texto que inclui as chaves públicas dos clientes a quem se deseja permitir o acesso à sua conta no sistema remoto. Para ver seus privilégios, basta usar o comando ’ls’ com a opção ‘-l’.
ls -l ~/.ssh/authorized_keys
A presente configuração apresenta os parâmetros de autorização aplicáveis ao proprietário, ao conjunto e aos utilizadores adicionais. É essencial examinar os últimos seis caracteres da etiqueta. A presença de um “w” significa que o coletivo ou indivíduos não especificados estão investidos de autoridade para o inscrever, tornando assim o dispositivo suscetível de riscos de segurança.
De modo a conceder a si próprio permissão para escrever num determinado ficheiro enquanto restringe o acesso a outros utilizadores tanto do mesmo grupo como de fora dele, pode utilizar o comando “chmod” no seu terminal. Isto permitir-lhe-á modificar as permissões do ficheiro em conformidade, assegurando que apenas indivíduos autorizados têm acesso ao ficheiro.
Existem duas formas: numericamente e simbolicamente.
Uma abordagem alternativa envolve a utilização de valores numéricos para representar permissões de ficheiros, o que requer a memorização da numeração octal para permissões específicas.
chmod 700 ~/.ssh/authorized_keys
O método simbólico é mais mnemônico:
chmod go-w ~/.ssh/authorized_keys
Copiar chaves com segurança usando o ssh-agent
A utilização do programa ssh-agent é altamente recomendada para proteger informações confidenciais, como chaves privadas usadas na autenticação SSH. Esse método elimina a necessidade de inserir manualmente comandos de linha de comando ou de se preocupar com possíveis problemas de permissão que podem surgir ao copiar e colar diretamente em arquivos de chave autorizados.
Para iniciar o ssh-agent, use este comando:
eval "$(ssh-agent-s)"
Para aceder a um servidor distante utilizando um agente SSH através da interface de linha de comandos, utilize a opção “-A” juntamente com o comando “ssh”.
ssh -A [email protected]
Verificar as definições sshd do servidor remoto
Caso as nossas recomendações anteriores não resolvam o problema, uma possível linha de ação envolve o ajuste das definições do servidor sshd no dispositivo remoto, desde que possua privilégios administrativos. No entanto, esta deve ser considerada uma medida de último recurso, uma vez que efetuar tais modificações pode potencialmente comprometer a segurança do seu sistema. Nos casos em que não é possível modificar a configuração diretamente, terá de procurar assistência junto do administrador do sistema designado para resolver quaisquer problemas persistentes relacionados com o estabelecimento de uma ligação SSH.
O ficheiro que contém as definições globais para o daemon SSH (sshd) está localizado em “/etc/ssh/sshd\_config”. É propriedade do utilizador root e requer privilégios administrativos para ser acedido ou modificado. Para fazer edições usando o editor de texto Vim, pode-se executar o comando “sudo vim /etc/ssh/sshd\_config” seguido de pressionar enter.
sudo vim /etc/ssh/sshd_config
Para que o sshd permita o login apesar de um ficheiro authorized\_keys acessível publicamente, é necessário configurar o ficheiro de configuração do servidor definindo o parâmetro “StrictModes” para “no”.
Guarde-o e reinicie o servidor SSH:
sudo systemctl restart sshd.service
Agora pode corrigir erros de permissões de chaves públicas SSH
Nos casos em que surgem problemas relacionados com chaves públicas SSH em sistemas externos, muitas vezes é suficiente verificar e ajustar as permissões do ficheiro para garantir a exclusividade da sua chave. Além disso, a utilização de um agente ssh pode fornecer segurança aprimorada durante os processos de conexão. No entanto, se necessário, o relaxamento da rigidez do servidor SSH pode ser considerado como um recurso final.