Impossible de SSH même avec la clé publique ajoutée aux clés autorisées


16

J'ai une gouttelette Digital Ocean à laquelle j'essaie de me donner un accès ssh. Je ne sais pas ce qui a été fait auparavant. J'ai essayé d'ajouter ma clé publique via l'interface utilisateur de Digital Ocean. Ça n'a pas marché, j'ai continué permission denied (publickey).

J'ai accédé au serveur via la console Digital Ocean et ajouté manuellement ma clé publique à /root/.ssh/authorized_keys. J'ai ensuite essayé d'utiliser ssh ssh root@x.x.x.x. Cela n'a pas fonctionné (autorisation refusée).

J'ai donc essayé d'ajouter un nouvel utilisateur, créé le /home/me/.sshrépertoire avec des autorisations 700sur le .sshrépertoire lui-même et 600sur le authorized_keysfichier. Alors j'ai essayé ssh me@x.x.x.x. Cela n'a pas fonctionné non plus.

Le redémarrage du démon ssh ne change rien non plus.

Qu'est-ce que je rate?

Éditer:

Voici la sortie ssh détaillée.

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

Modifier 2:

LogLevel DEBUG3 production:

entrez la description de l'image ici


Publiez le journal détaillé de la connexion, votre contenu de sshd_config et les erreurs possibles liées à ssh dans le journal du serveur.
Jakuje

@Jakuje J'ai ajouté la sortie ... Je n'ai pas remarqué votre commentaire avant.
Jeff

La clé est rejetée. Vérifiez le journal du serveur pour d'éventuels problèmes (éventuellement avec LogLevel DEBUG3in sshd_config). Je soupçonne que ce sont des problèmes d'autorisation, mais il peut y avoir plusieurs raisons à cela.
Jakuje

Il dit[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff

Quelles sont les autorisations du fichier authorized_keys? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? Pour le journal détaillé du serveur modifier le fichier mentionné ci - dessus, le service ssh restart, connectez -vous à nouveau et après le journal ( qui devrait être aussi auth.log.
Jakuje

Réponses:


20

Configuration du client

Installer ~/.ssh/config

La configuration des entrées d'hôte pour sshest vraiment facile et vous évitera beaucoup de problèmes. Voici un exemple:

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

Dans cet exemple, nous configurons digitaloceanboxet githubet github.comafin de pouvoir exécuter les commandes suivantes:

  1. ssh github
  2. ssh digitaloceanbox

Si nous voulons nous connecter en tant qu'utilisateur différent de celui spécifié dans le fichier de configuration, nous mettons juste user@au début:

  • ssh user@digitaloceanbox

Génération de sshclés

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

Notez que j'ai spécifié le chemin complet de la clé privée que je veux générer lorsque vous y êtes invité ssh-keygen. J'ai également défini le commentaire ( -C) qui me permet d'identifier facilement les clés sur les machines distantes.

Cela va créer deux fichiers:

  1. .ssh/digitalocean-rsa
    • Clé PRIVÉE . Ne partagez jamais cela .
  2. .ssh/digitalocean-rsa.pub
    • Clé publique. C'est ce que vous stockez sur le serveur pour vous authentifier.

Lorsque vous fournissez votre sshclé, assurez-vous que c'est la .pubversion !! Lorsque vous ajoutez à votre ~/.ssh/config, assurez-vous d'ajouter la bonne clé privée qui correspond à la clé publique que vous avez ajoutée au système.


Configuration du serveur

La plupart des installations seront livrées avec l'authentification par clé publique activée. Si vous commencez à faire les choses à volonté, vous risquez cependant de rencontrer quelques problèmes. À l'endroit où l'OP se trouve dans leur problème, je recommande que l'OP supprime le /root/.ssh/répertoire pour recommencer.

Il n'est pas recommandé d'utiliser sshpour accéder à l'utilisateur root sur le système distant. Il est recommandé de vous sshconnecter à un autre utilisateur, puis de passer à root en utilisant votre mot de passe ( sudo su -).

Ajouter des clés à l'hôte à l'aide ssh-copy-id

Que vous décidiez de créer un autre utilisateur et de l'utiliser en sshtant qu'utilisateur ou utilisateur root, voici la méthode recommandée pour placer les sshclés sur un serveur:

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

Cela permet sshdde créer le répertoire et les fichiers nécessaires avec les autorisations nécessaires. Cela signifie qu'il n'y a aucune chance pour vous de gâcher les autorisations ou de devoir vous souvenir des détails. Utilisez simplement l'outil pour télécharger les clés.

Désactiver l'authentification par mot de passe

Cela étant dit, une fois que vous avez saisi vous-même la clé et vérifié que vous pouvez vous connecter à l'aide des clés, il est recommandé de désactiver l'authentification par mot de passe sshdet de redémarrer le service:

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

Et les nouveaux utilisateurs?

Si vous désactivez l'authentification par mot de passe, comment pouvez-vous saisir de nouveaux utilisateurs? Une façon consiste à ajouter des fichiers de modèle au /etc/skelrépertoire. Une fois que vous avez saisi un utilisateur, procédez comme suit:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. Modifiez tous les fichiers trouvés /etc/skel/.ssh/afin qu'ils soient vides, sauf si vous souhaitez vous saisir automatiquement pour chaque utilisateur nouvellement créé.

Lorsque vous créez de nouveaux utilisateurs avec sudo useradd -m newuser, cet utilisateur aura le .ssh/authorized_keys, que vous pouvez modifier et aura les autorisations appropriées.

Débogage

Vous pouvez regarder le sshdfichier journal pour voir pourquoi les connexions échouent ou sont refusées:

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

Pendant que vous exécutez cette commande, utilisez un autre terminal pour tenter une connexion. Plusieurs fois, les messages fournis sont assez bons pour aider à identifier le problème ou à trouver une solution en ligne.


1
L'étape de débogage a fonctionné pour moi. Le répertoire racine avait les mauvaises autorisations (devait être 700)
naisanza

12

Ssh est assez pointilleux sur la propriété, les autorisations de fichiers et de répertoires avec les clés ssh.

~ / .ssh / devrait appartenir au propriétaire et disposer de 700 autorisations. ~ / .ssh / authorized_keys doit appartenir au propriétaire et disposer de 600 autorisations.

Donc, pour root:

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

Pour l'utilisateur moi:

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

Et puis réessayez.

Bien sûr, vous devez également vérifier dans / etc / ssh / sshd_config si root est autorisé à se connecter, ou simplement avec les clés ssh.

Si tu as :

PasswordAuthentication no

alors vous pouvez définir:

PermitRootLogin yes

Et puis redémarrez sshd:

/etc/init.d/sshd restart

et essayez à nouveau.

Notez qu'avec ssh, le démon sshd peut être redémarré même lorsque vous utilisez une session ssh pour cela.Openssh est conçu pour gérer cela.

En regardant vos extraits de fichier journal téléchargés, il semble que vous utilisez MacOSX? Pourriez-vous créer une nouvelle clé ssh là-bas?

De plus, j'ai découvert par le passé que lorsque j'ai plus d'une clé ssh privée sur mon ordinateur local pour mon utilisateur, cela rend parfois impossible la connexion à distance avec ssh. Cela a beaucoup aidé à faire des entrées sur l'ordinateur local dans le fichier ~ / .ssh / config, pour résoudre ce problème. Par exemple :

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

Après cela, essayez sur la ligne de commande sur votre ordinateur local:

ssh -v my-vps

Lorsque vous utilisez des clés ssh, ainsi que pas de clés ssh pour certaines autres connexions, vous pouvez, en plus des entrées avec des clés ssh, également définir une connexion ssh sans utilisation de clé ssh dans le fichier ~ / ssh / config, par exemple:

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

Cela fonctionne bien pour moi. Il est également possible de définir quelle clé utiliser sur la ligne de commande:

ssh -v root@10.111.111.254 -i .ssh/id_rsa

Cela pourrait faciliter le débogage, et sur la ligne de commande, cela devrait toujours fonctionner sur l'ordinateur local.


En plus de cette solution, j'ai également dû changer les autorisations pour mon dossier de départ, pour que SSH fonctionne:sudo chmod 700 /home/me/
Rg90

Vous êtes une bouée de sauvetage, @ albert-j! La IdentityFileligne m'a sorti d'une ornière d'une heure.
zev

4

Vérifiez à nouveau la configuration du démon ssh (qui devrait l'être /etc/ssh/sshd_config) et vérifiez:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Vérifiez également le fichier de configuration pour voir si AllowUsers ou AllowGroups a été défini, car ils agissent respectivement comme des listes blanches pour l'utilisateur et les groupes.

J'ai également remarqué que vous essayez d'ajouter une clé à l'utilisateur root. Par défaut, la connexion root doit être désactivée, mais vous pouvez également la modifier via le champ PermitRootLogin .


Rien de tout cela ne fonctionne: / Je reçois toujoursPermission denied (publickey)
Jeff

3

Selon les journaux que vous avez liés, je pense que vous avez des problèmes côté client pour ne pas trouver le fichier de clé privée .

  • Vérifiez d'abord que le fichier ~/.ssh/id_rsaexiste sur votre ordinateur local et qu'il est le bon _ (si vous en avez plus).

  • Vérifiez les .sshautorisations du dossier (devrait être drwx------, sinon exécuté sudo chmod 700 ~/.ssh) et son contenu (devrait être -rw-------, sinon exécuté sudo chmod 600 ~/.ssh/*) . Appliquez également les mêmes autorisations pour la machine distante.

De plus, vous pouvez essayer de forcer l' utilisation de votre choix clé privée , donnant directement sshavec le -iparamètre.

  • Vous pouvez exécuter quelque chose comme les éléments suivants:

    ssh -i /path/to/your/private-key root@X.X.X.X

    ou

    ssh -i ~/.ssh/id_rsa myRemoteUser@X.X.X.X

Vous pouvez obtenir plus d'informations sur la page de manuel ssh (exécutée man sshsur votre terminal) .

Gardez également à l'esprit que si vous souhaitez vous connecter en tant rootqu'utilisateur, votre compte root doit être activé avant la connexion, en créant un mot de passe pour celui-ci avec sudo passwd rootou votre outil d'administration de serveur (Ubutntu a le compte root désactivé par défaut) . Vous pouvez obtenir plus d'informations sur Ubuntu Wiki .

J'espère que cela aide.


3

J'ai fini par réinstaller openssh-serverce qui a résolu le problème. Les solutions proposées sont toutes excellentes, mais elles n'ont pas fonctionné pour moi. Je n'ai aucune idée de la cause du problème, mais je pense que le développeur précédent peut avoir gâché la configuration et gâché les choses assez mal.

Je doute qu'il y aura quelqu'un avec un problème aussi spécifique que le mien. Cependant, si vous disposez d'un droplet Digital Ocean, vous ne pouvez pas obtenir d'accès SSH, et aucune des solutions données ne fonctionne, réinstallez le serveur SSH en exécutant ces commandes via la console Digital Ocean. Attention, il s'agit d'un processus destructeur qui effacera les anciens fichiers de configuration/etc/ssh/ (pas votre .sshrépertoire).

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

En supposant que vos clients / clés ssh sont en ordre, vous devriez pouvoir SSH dans votre serveur.


1

Ce problème est apparu pour moi en utilisant l'image Debian sur Digital Ocean. D'une manière ou d'une autre pendant le bref processus de configuration, probablement lorsque j'ai défini le mot de passe root, le propriétaire de a /rootété remplacé par l'utilisateur debian. J'ai vu ce qui suit dans /var/log/auth.log:

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

La simple exécution a chown root:root -R /rootrésolu le problème.

HTH


0

Je viens d'avoir un problème très similaire. Cela a fonctionné pour moi - Ajoutez cette ligne à / etc / ssh / sshd_config

AuthorizedKeysFile %h/.ssh/authorized_keys 

Redémarrez ensuite ssh de la manière habituelle.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.