J'ai une gouttelette Digital Ocean que j'essaie de m'offrir un accès SSH. Je ne suis pas sûr de ce qui a été fait auparavant. J'ai essayé d'ajouter ma clé publique via l'interface utilisateur Digital Ocean. Cela n'a pas fonctionné, j'ai continué à avoir 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é de ssh en utilisant ssh [email protected]
. Cela n'a pas fonctionné (permission refusée).
J'ai donc essayé d'ajouter un nouvel utilisateur, de créer le répertoire /home/me/.ssh
avec les autorisations 700
sur le répertoire .ssh
et de 600
dans le fichier authorized_keys
. Ensuite, j'ai essayé ssh [email protected]
. Cela n'a pas fonctionné non plus.
Redémarrer le démon ssh ne change rien non plus.
Qu'est-ce que je rate?
Modifier:
Voici la sortie ssh verbeuse.
https://Gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9
Edit 2:
LogLevel DEBUG3
output:
J'ai fini par réinstaller openssh-server
qui a résolu le problème. Les solutions proposées sont excellentes, mais elles n’ont pas fonctionné pour moi. Je ne sais pas du tout ce qui était à l'origine du problème, mais je pense que le développeur précédent a peut-être gâché la configuration et mal gâché le travail.
Je doute qu'il y ait quelqu'un avec un problème aussi spécifique que le mien. Toutefois, si vous disposez d'un droplet Digital Ocean, vous ne pouvez pas obtenir d'accès SSH et aucune des solutions fournies ne fonctionne, réinstallez le serveur SSH en exécutant ces commandes via la console Digital Ocean. Attention, il s’agit d’un processus destructif qui effacera les anciens fichiers de configuration de /etc/ssh/
(et non votre répertoire .ssh
).
apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server
En supposant que votre client/clé ssh soit en ordre, vous devriez être capable de SSH sur votre serveur.
~/.ssh/config
Configurer les entrées de l'hôte pour ssh
est très simple et vous épargnera pas mal d'ennuis. 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 digitaloceanbox
et github
et github.com
afin que nous puissions exécuter les commandes suivantes:
ssh github
ssh digitaloceanbox
Si nous voulons nous connecter en tant qu'utilisateur différent de celui spécifié dans le fichier de configuration, il suffit de mettre user@
au début:
ssh user@digitaloceanbox
ssh
clésssh-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 je suis invité par ssh-keygen
. J'ai également défini le commentaire (-C
) qui me permet d'identifier facilement les clés sur des machines distantes.
Cela créera deux fichiers:
.ssh/digitalocean-rsa
.ssh/digitalocean-rsa.pub
Lorsque vous fournissez votre clé ssh
name__, assurez-vous qu'il s'agit bien de la version .pub
! Lorsque vous ajoutez à votre ~/.ssh/config
, veillez à ajouter la clé privée appropriée correspondant à la clé publique que vous avez ajoutée au système.
L’authentification de la clé publique sera activée pour la plupart des installations. Si vous commencez à faire des choses comme vous le souhaitez, vous pourriez toutefois rencontrer quelques problèmes. À l'endroit où l'OP est dans son problème, je recommande que l'OP supprime le répertoire /root/.ssh/
pour recommencer.
Il n'est pas recommandé d'utiliser ssh
pour accéder à l'utilisateur root sur le système distant. Il est recommandé de vous ssh
en un autre utilisateur, puis de passer à root en utilisant votre mot de passe (Sudo su -
).
ssh-copy-id
Que vous décidiez ou non de créer un autre utilisateur et d'utiliser ssh
comme utilisateur ou utilisateur racine, voici la méthode recommandée pour placer les clés ssh
sur un serveur:
ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox
Cela permet à sshd
de créer le répertoire et les fichiers nécessaires avec les autorisations nécessaires. Cela signifie qu'il n'y a aucune chance que vous perdiez des autorisations ou que vous deviez vous souvenir des détails. Utilisez simplement l'outil pour télécharger les clés.
Ceci étant dit, une fois que vous avez saisi la clé et vérifié que vous êtes en mesure de vous connecter à l'aide des clés, il est recommandé de désactiver l'authentification par mot de passe dans sshd
et de redémarrer le service:
/etc/ssh/sshd_config
PasswordAuthentication no
Sudo systemctl restart sshd
Si vous désactivez l'authentification par mot de passe, comment pouvez-vous entrer de nouveaux utilisateurs? Une solution consiste à ajouter des fichiers de modèle au répertoire /etc/skel
. Une fois que vous avez saisi un utilisateur, procédez comme suit:
Sudo cp -r .ssh/ /etc/skel/
ls /etc/skel/.ssh
/etc/skel/.ssh/
afin qu'ils soient vides, à moins que vous ne souhaitiez vous saisir automatiquement pour chaque nouvel utilisateur créé.Lorsque vous créez de nouveaux utilisateurs avec Sudo useradd -m newuser
, cet utilisateur aura le .ssh/authorized_keys
, que vous pourrez modifier et bénéficier des autorisations appropriées.
Vous pouvez consulter le fichier journal sshd
pour savoir pourquoi les connexions échouent ou sont refusées:
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 à cerner le problème ou à trouver une solution en ligne.
Ssh est assez pointilleux sur les droits de propriété, de fichiers et de répertoires avec les clés ssh.
~/.ssh/devrait appartenir au propriétaire et disposer de 700 autorisations. ~/.ssh/registered_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 devriez également vérifier dans/etc/ssh/sshd_config si la racine est autorisée à se connecter, ou simplement avec les clés ssh.
Si tu as :
PasswordAuthentication no
alors vous pouvez définir:
PermitRootLogin yes
Et 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 si 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 utilisiez MacOSX? Pourriez-vous créer une nouvelle clé SSH ici?
De plus, j’ai découvert par le passé que lorsque j’ai plus d’une clé privée ssh sur mon ordinateur local pour mon utilisateur, cela rend parfois impossible la connexion à distance avec ssh. Cela a beaucoup aidé de 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 un login ssh sans utilisation de la 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 [email protected] -i .ssh/id_rsa
Cela pourrait faciliter le débogage et, sur la ligne de commande, cela devrait toujours fonctionner sur l'ordinateur local.
Selon les journaux que vous avez liés, je pense que vous rencontrez des problèmes du côté du client qui ne trouve pas le fichier clé privée.
Commencez par vérifier que le fichier ~/.ssh/id_rsa
existe sur votre ordinateur local et qu’il est correct _ (si vous en avez plus).
Vérifiez les autorisations de dossier .ssh
[devrait être drwx------
, si ce n'est pas exécuté Sudo chmod 700 ~/.ssh
) et son contenu (devrait être -rw-------
, si ce n'est pas exécuté Sudo chmod 600 ~/.ssh/*
). Appliquez également les mêmes autorisations pour la machine distante.
En outre, vous pouvez essayer de forcer l’utilisation de votre clé privée souhaitée, en l’attribuant directement à ssh
avec le paramètre -i
.
Vous pouvez exécuter quelque chose comme ce qui suit:
ssh -i /path/to/your/private-key [email protected]
ou
ssh -i ~/.ssh/id_rsa [email protected]
Vous pouvez obtenir plus d’informations sur la page de manuel ssh (exécutez man ssh
sur votre terminal).
Rappelez-vous également que si vous souhaitez vous connecter en tant qu'utilisateur root
, votre compte root doit être activé avant la connexion, en créant un mot de passe avec Sudo passwd root
ou votre outil d'administration du serveur (Ubutntu a un compte root désactivé par défaut). Vous pouvez obtenir plus d’informations sur buntu Wiki .
J'espère que ça aide.
Vérifiez la configuration du démon ssh (devrait être dans /etc/ssh/sshd_config
) et vérifiez:
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Consultez également le fichier de configuration pour voir si AllowUsers ou AllowGroups a été défini, car ils agissent respectivement en tant que listes blanches pour les utilisateurs et les groupes.
De plus, j'ai 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.
Ce problème est apparu en utilisant l'image Debian sur Digital Ocean. D'une manière ou d'une autre, au cours du bref processus de configuration, probablement lorsque j'ai défini le mot de passe root, le propriétaire de /root
a é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
Exécuter simplement chown root:root -R /root
a résolu le problème.
HTH
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
Puis redémarrez ssh de la manière habituelle.