J'ai rencontré ce problème plusieurs fois lors de la création de serveurs de génération avec authentification par clé.
Je me demandais si quelqu'un d'autre a déjà expérimenté cela. J'ai quelques clés pour mon utilisateur actuel qui peuvent se connecter à différentes machines. Laissez dire machine1 et machine2. J'ai collé ma clé publique dans leur fichier allowed_keys respectif. Le premier que j'ai nommé la première clé id_rsa et la deuxième clé bender.
Lorsque j'essaie de me connecter à Bender, la sortie suivante est fournie avec ma connexion ssh verbose
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).
Comme vous pouvez le voir ci-dessus, il n’offre que la clé id_rsa. Est-ce correct? Si oui, pourquoi? Comment puis-je l'obtenir pour offrir plus de clés? Je sais que c'est un problème que je vois par intermittence, car chez moi, j'ai plusieurs clés sans trop de peine.
J'apprécierais également un aperçu de la manière dont la clé publique et la clé privée interagissent avec le client et le serveur. Je pensais que j'avais une idée assez décente, mais apparemment, il me manque quelque chose.
S'il te plaît et merci.
Par défaut, ssh recherche les fichiers id_dsa
et id_rsa
. Les clés ne doivent pas obligatoirement être nommées ainsi, vous pouvez aussi le nommer mykey
name__, ou même le placer dans un autre répertoire. Cependant, si vous utilisez l'une de ces méthodes, vous devez explicitement référencer la clé dans la commande ssh comme suit:
ssh user@server -i /path/to/mykey
Si une commande n'accepte pas -i
, par exemple. sshfs
name__, utilisez l'option IdentityFile
name__:
sshfs -o IdentityFile=/path/to/mykey user@Host:/path/on/remote /mountpoint
Lors de la génération d'une clé, vous aurez deux fichiers: id_rsa
(clé privée) et id_rsa.pub
(clé publique). Comme leur nom l'indique, la clé privée doit rester secrète et la clé publique peut être publiée.
L'authentification par clé publique fonctionne avec une clé publique et une clé privée. Le client et le serveur ont leurs propres clés. Lors de l'installation de openssh-server
, les clés publique et privée du serveur sont générées automatiquement. Pour le client, vous devrez le faire vous-même.
Lorsque vous (client) vous connectez à un serveur, des clés publiques sont échangées. Vous recevrez les serveurs un, et le vôtre. La première fois que vous recevez la clé publique du serveur, il vous sera demandé de l’accepter. Si cette clé publique change au fil du temps, vous en serez averti car une éventuelle attaque MITM (homme au milieu) est en cours, interceptant le trafic entre le client et le serveur.
Le serveur vérifie si vous êtes autorisé à vous connecter (défini dans /etc/ssh/sshd_config
) et si votre clé publique est répertoriée dans le fichier ~/.ssh/authorized_keys
. Raisons possibles pour lesquelles la clé publique est refusée:
/etc/ssh/sshd_config
: AllowUsers
ou AllowGroups
est spécifié, mais votre utilisateur de serveur ne figure pas dans la liste des groupes ou des utilisateurs (par défaut, non défini, sans restriction pour les utilisateurs ou les groupes de se connecter).DenyUsers
ou DenyGroups
est spécifié et vous vous trouvez dans la liste des utilisateurs ou des groupes.PermitRootLogin
est défini sur No
(valeur par défaut yes
name__).PubkeyAuthentication
est défini sur No
(par défaut yes
name__).AuthorizedKeysFile
est défini sur un autre emplacement et les clés publiques ne sont pas ajoutées à ce fichier (valeur par défaut .ssh/authorized_keys
, relative à home dir)~/.ssh/authorized_keys
: votre clé publique n'est pas ajoutée dans ce fichier (notez que ce fichier est lu en tant qu'utilisateur root)Il n'est pas rare d'utiliser plusieurs clés. Au lieu d'exécuter ssh user@Host -i /path/to/identity_file
, vous pouvez utiliser un fichier de configuration, ~/.ssh/config
.
Les paramètres communs sont IdentityFile (les clés) et le port. La prochaine configuration vérifiera "id_dsa" et "bender" uniquement lors de la connexion avec ssh youruser@yourhost
:
Host yourhost
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/bender
Si vous omettez Host yourhost
, les paramètres s’appliqueront à toutes les connexions SSH. D'autres options peuvent également être spécifiées pour cette correspondance d'hôte, telles que User youruser
, Port 2222
, etc. Cela vous permettrait de vous connecter avec le raccourci ssh yourhost
au lieu de ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender
.
Ma méthode préférée permet la sélection automatique de la clé privée
IdentityFile ~/.ssh/%l_%r@%h_id_rsa
SSH remplacera% l par le nom de la machine locale,% r par le nom d'utilisateur distant et% h par l'hôte distant. Par conséquent, si je souhaite me connecter à partir de ma machine appelée foo pour interdire à un utilisateur, je lance:
ssh bar
Et ssh utiliserait automatiquement:
~/.ssh/foo_user@bar_id_rsa
Comme l'hôte local est également stocké, cela permet de créer des répertoires personnels partagés sur NFS (clé différente par machine!) Ou même d'identifier la machine sur laquelle la clé était censée être placée ...
Compte tenu du commentaire de StevenRoose selon lequel il faut plus de temps pour spécifier de nombreuses clés et que je joue avec beaucoup de clés, j'aimerais suggérer ma solution personnelle.
Je crée un lien symbolique vers la clé que je souhaite utiliser à ce moment-là, et comme cela ne change que rarement selon le projet sur lequel je travaille, j'en suis heureux.
Ici, j'ai lié à mes clés pour les machines fonctionnant sous virtualbox:
$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa
$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam 396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam 16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam 20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts
On pourrait aussi ajouter un script très rapide pour passer à un autre jeu sans avoir à taper à nouveau manuellement la commande ln.
Encore une fois, ce n'est pas une solution pour deux clés seulement, mais pour un plus grand nombre, cela pourrait être réalisable.