Não é possível fazer o ssh mesmo com a chave pública adicionada às chaves autorizadas

14

Eu tenho uma gota do Digital Ocean à qual estou tentando me dar acesso ssh. Não tenho certeza do que foi feito anteriormente. Tentei adicionar minha chave pública por meio da interface do usuário do Digital Ocean. Isso não funcionou, eu continuei entendendo permission denied (publickey).

Eu acessei o servidor através do console digital do oceano e adicionei manualmente minha chave pública a /root/.ssh/authorized_keys. Eu tentei ssh usando ssh [email protected]. Isso não funcionou (permissão negada).

Então, tentei adicionar um novo usuário, criei o /home/me/.sshdiretório com permissões 700no .sshpróprio diretório e 600no authorized_keysarquivo. Então eu tentei ssh [email protected]. Isso também não funcionou.

Reiniciar o daemon ssh também não muda nada.

o que estou perdendo?

Editar:

Aqui está a saída detalhada do ssh.

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

Edição 2:

LogLevel DEBUG3 resultado:

insira a descrição da imagem aqui

Jeff
fonte
Poste o log detalhado da conexão, seu conteúdo de sshd_config e os possíveis erros relacionados ao ssh no log do servidor.
Jakuje 14/01
@Jakuje Adicionei a saída ... Eu não notei o seu comentário antes.
Jeff
A chave é rejeitada. Verifique o log do servidor para possíveis problemas (possivelmente com LogLevel DEBUG3in sshd_config). Suspeito que estes sejam problemas de permissão, mas pode haver várias razões para isso.
Jakuje 21/01
Ele diz[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff
Quais são as permissões do arquivo allowed_keys? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Para o detalhado log do servidor modificar o arquivo mencionado acima, o serviço ssh reiniciar, ligar novamente e postar o log (deve ser também auth.log.
Jakuje

Respostas:

19

Configuração do Cliente

Configuração ~/.ssh/config

A configuração de entradas do host sshé realmente fácil e poupa muitos problemas. Aqui está um exemplo:

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

Neste exemplo, a configuração nós digitaloceanboxe githube github.compara que possamos fazer os seguintes comandos:

  1. ssh github
  2. ssh digitaloceanbox

Se quisermos fazer login como um usuário diferente daquele especificado no arquivo de configuração, basta colocar user@no início:

  • ssh user@digitaloceanbox

Gerando sshchaves

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

Observe que eu especifiquei o caminho completo da chave privada que desejo gerar quando solicitado ssh-keygen. Também defini o comment ( -C), que permite identificar facilmente chaves em máquinas remotas.

Isso criará dois arquivos:

  1. .ssh/digitalocean-rsa
    • Tecla PRIVADA . Nunca compartilhe isso .
  2. .ssh/digitalocean-rsa.pub
    • Chave pública. É isso que você armazena no servidor para autenticar.

Quando você fornecer sua sshchave, verifique se é a .pubversão !! Ao adicionar à sua ~/.ssh/config, certifique-se de adicionar a chave privada correta que corresponde à chave pública que você adicionou ao sistema.


Configuração do servidor

A maioria das instalações vem com a autenticação de chave pública ativada. No entanto, se você começar a fazer as coisas à toa, poderá ter alguns problemas. No local em que o OP está com problemas, eu recomendo que o OP exclua o /root/.ssh/diretório para recomeçar.

Não é recomendável usar sshpara acessar o usuário root no sistema remoto. É recomendável que você faça sshoutro usuário e, em seguida, passe para o root usando sua senha ( sudo su -).

Adicione chaves ao host usando ssh-copy-id

Independentemente de você decidir criar outro usuário e usá-lo sshcomo usuário root, é a maneira recomendada de colocar sshchaves em um servidor:

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

Isso permite sshdcriar o diretório e os arquivos necessários com as permissões necessárias. Isso significa que não há chance de você atrapalhar as permissões ou precisar se lembrar dos detalhes. Basta usar a ferramenta para fazer upload das chaves.

Desativar autenticação de senha

Dito isto, depois de se autodeclarar e verificar se você pode se conectar usando as chaves, é recomendável desabilitar a autenticação por senha sshde reiniciar o serviço:

  1. Editar /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

E os novos usuários?

Se você desabilitar a autenticação por senha, como pode inserir novos usuários? Uma maneira é adicionar arquivos de modelo ao /etc/skeldiretório. Depois de digitar um usuário, faça o seguinte:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. Edite todos os arquivos encontrados /etc/skel/.ssh/para que fiquem em branco, a menos que você deseje se autodefinir automaticamente para cada usuário recém-criado.

Quando você cria novos usuários sudo useradd -m newuser, esse usuário terá o .ssh/authorized_keys, que você pode editar e terá as permissões apropriadas.

Depuração

Você pode assistir ao sshdarquivo de log para ver por que as conexões falham ou são recusadas:

  1. sudo tail -f /var/log/auth.log

Enquanto você estiver executando este comando, use outro terminal para tentar um logon. Muitas vezes as mensagens fornecidas são boas o suficiente para ajudar a identificar o problema ou encontrar uma solução online.

earthmeLon
fonte
1
A etapa de depuração funcionou para mim. O diretório raiz tinha as permissões erradas (precisava ser 700)
naisanza
12

O Ssh é bastante exigente quanto à propriedade, permissões de arquivos e diretórios com as teclas ssh.

~ / .ssh / deve pertencer ao proprietário e ter 700 permissões. ~ / .ssh / allowed_keys deve pertencer ao proprietário e ter 600 permissões.

Então, para root:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

Para o usuário me:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

E então tente novamente.

Obviamente, você também deve verificar em / etc / ssh / sshd_config se o root tem permissão para fazer login, ou apenas com as teclas ssh.

Se você tem :

PasswordAuthentication no

então você pode definir:

PermitRootLogin yes

E, em seguida, reinicie o sshd:

/etc/init.d/sshd restart

e tente novamente.

Observe que, com o ssh, o daemon sshd pode ser reiniciado mesmo ao usar uma sessão ssh para isso. Openssh foi projetado para lidar com isso.

Olhando para os snippets de arquivos de log enviados, parece que você está usando o MacOSX? Você poderia criar uma nova chave ssh lá?

Além disso, descobri no passado que, quando tenho mais de uma chave ssh privada no meu computador local para o meu usuário, isso às vezes impossibilita o login remotamente com o ssh. Ajudou bastante fazer entradas no computador local no arquivo ~ / .ssh / config, para resolver isso. Por exemplo :

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

Depois disso, tente na linha de comando no seu computador local:

ssh -v my-vps

Ao usar chaves ssh, bem como nenhuma chave ssh para alguns outros logins, você pode, além das entradas com chaves ssh, também definir um login ssh sem o uso da chave ssh no arquivo ~ / ssh / config, por exemplo:

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

Este trabalho é bom para mim. Também é possível definir qual chave usar na linha de comando:

ssh -v [email protected] -i .ssh/id_rsa

Isso pode facilitar a depuração e, na linha de comando, isso sempre deve funcionar no computador local.

albert j
fonte
Além dessa solução, eu tive que alterar as permissões da minha pasta pessoal também, para obter o SSH funcionando:sudo chmod 700 /home/me/
Rg90
Você é um salva-vidas, @ albert-j! A IdentityFilelinha me tirou de uma rotina de uma hora.
zev 17/01/19
4

Verifique novamente a configuração do daemon ssh (deve estar /etc/ssh/sshd_config) e verifique:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Verifique também o arquivo de configuração para ver se AllowUsers ou AllowGroups foi definido, pois eles agem como listas brancas de usuários e grupos, respectivamente.

Além disso, notei que você está tentando adicionar uma chave ao usuário root. Por padrão, o login raiz deve estar desativado, mas você também pode alterar isso através do campo PermitRootLogin .

TLin
fonte
Nenhum destes estão trabalhando: / Eu ainda obterPermission denied (publickey)
Jeff
3

De acordo com os logs que você vinculou, acho que você tem problemas no lado do cliente ao não encontrar o arquivo de chave privada .

  • Primeiro verifique se o arquivo ~/.ssh/id_rsaexiste na sua máquina local e se está correto _ (se você tiver mais).

  • Verifique as .sshpermissões da pasta (deve ser drwx------, se não for executada sudo chmod 700 ~/.ssh) e seu conteúdo (deve ser -rw-------, se não for executada sudo chmod 600 ~/.ssh/*) . Aplique as mesmas permissões para a máquina remota também.

Além disso, você pode tentar forçar o uso da chave privada desejada , fornecendo-a diretamente sshcom o -iparâmetro

Você pode obter mais informações na página de manual do ssh (executada man sshno seu terminal) .

Lembre-se também de que, se você deseja fazer login como rootusuário, sua conta root deve ser ativada antes do login, criando uma senha para ele sudo passwd rootou sua ferramenta de administração do servidor (o Ubutntu possui a conta root desativada por padrão) . Você pode obter mais informações no Ubuntu Wiki .

Espero que ajude.

dgonzalez
fonte
3

Acabei reinstalando, openssh-servercorrigindo o problema. As soluções dadas são ótimas, mas não funcionaram para mim. Não tenho idéia do que estava causando o problema, mas acho que o desenvolvedor anterior pode ter mexido com a configuração e estragado as coisas muito mal.

Duvido que haja alguém com um problema tão específico quanto o meu. No entanto, se você tiver uma gota do Digital Ocean, não poderá obter acesso SSH e nenhuma das soluções fornecidas funcionar, reinstale o servidor SSH executando esses comandos no console do Digital Ocean. Cuidado: este é um processo destrutivo e apagará os arquivos de configuração antigos/etc/ssh/ (não no seu .sshdiretório).

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

Supondo que suas chaves / cliente ssh estejam em ordem, você poderá fazer o SSH no seu servidor.

Jeff
fonte
1

Este problema apareceu para mim usando a imagem do Debian no Digital Ocean. De alguma forma, durante o breve processo de configuração, provavelmente quando eu definir a senha root, o proprietário /rootfoi alterado para o usuário debian. Eu vi o seguinte em /var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

A simples execução chown root:root -R /rootresolveu o problema.

HTH

Sean Brady
fonte
0

Só tive um problema muito semelhante. Isso funcionou para mim - Adicione esta linha ao / etc / ssh / sshd_config

AuthorizedKeysFile %h/.ssh/authorized_keys 

Em seguida, reinicie o ssh da maneira usual.

bodycheetah
fonte