Dans nos articles précédents, nous avons expliqué comment configurer l'authentification basée sur la clé ssh pour exécuter ssh et scp sans mot de passe sous le trois scénarios suivants :
- OpenSSH vers OpenSSH
- OpenSSH vers SSH2
- SSH2 vers SSH2
Dans cet article, j'expliquerai comment exécuter ssh et scp de SSH2 (hôte local) à OpenSSH (hôte distant) sans mot de passe.
1. Identifier la version SSH de l'hôte local et de l'hôte distant
Dans cet exemple, l'hôte local exécute SSH2 et l'hôte distant exécute OpenSSH.
[local-host]$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu [remote-host]$ ssh -V OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2006
2. Générer une paire de clés d'authentification SSH2 sur l'hôte local à l'aide de ssh-keygen2
Sur SSH2, ssh-keygen sera un lien symbolique vers ssh-keygen2, comme indiqué ci-dessous.
[local-host]$ ls -l /usr/local/bin/ssh-keygen lrwxrwxrwx 1 root root 11 Jul 31 2006 /usr/local/bin/ssh-keygen -> ssh-keygen2 [local-host]$ ssh-keygen Generating 2048-bit dsa key pair 7 o.oOo..oOo.o Key generated. 2048-bit dsa, jsmith@local-host, Sun Oct 19 2008 14:49:42 -0700 Passphrase : [Enter the password here] Again : Private key saved to /home/jsmith/.ssh2/id_dsa_2048_a Public key saved to /home/jsmith/.ssh2/id_dsa_2048_a.pub
La clé publique et la clé privée sont stockées dans le dossier .ssh2 sous votre répertoire personnel. Dans cet exemple, il se trouve sous /home/jsmith/.ssh2.
Vous ne devez partager la clé privée avec personne.
Par défaut ssh-keygen2 génère une paire de clés DSA (Digital Signature Algorithm). Vous pouvez également générer une paire de clés RSA comme indiqué ci-dessous.
[local-host]$ ssh-keygen -t rsa
3. Copiez la clé publique SSH2 de l'hôte local vers l'hôte distant qui exécute OpenSSH
Copiez le fichier local-host:/home/jsmith/.ssh2/id_dsa_2048_a.pub vers remote-host:/home/jsmith/.ssh/id_dsa_1024_a.pub. Effectuez un vi /home/jsmith/.ssh/id_dsa_1024_b.pub sur l'hôte distant et copiez le contenu de la clé publique de l'hôte local.
[remote-host]$ vi /home/jsmith/.ssh/id_dsa_1024_a.pub ---- BEGIN SSH2 PUBLIC KEY ---- Subject: jsmith Comment: "2048-bit dsa, jsmith@local-host Sun Oct 19 2008 14:49:42 -070\0" 7ZTVd7H63VyVqBIqfmEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFDG0VQESj 5iGSvMtmBBj8wQxGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpghC97mIx tIxJA7ZTVd7H63VIqmzlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8COWQs t6jsP6RG/WrpHi5iGSvMtmBBj8wQGHddexkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnfLL7T RTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcdXFY 2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQci dko1pKuV1W9rOK3y19A2J2N6rSdWYb7Zyzw8Gr7kTMWX1TP5WhRGCUhNRYnjI+4wgZIZdC lfGdp8MGI3HBg9CAr702BOzRTMnW0aqsGjrbhcwhWaDgRymhBh++nGAhHxeWn4ApJ8F6kT 8HaAm3dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGi PQTrt9NAzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA== ---- END SSH2 PUBLIC KEY ----
4. Sur l'hôte local, créez le fichier ~/.ssh2/identification
Créez le fichier suivant sur l'hôte local.
$ vim ~/.ssh2/identification IdKey id_dsa_2048_a
5. Sur l'hôte distant, convertissez la clé publique SSH2 en clé publique OpenSSH
Cela doit être exécuté sur l'hôte distant qui exécute OpenSSH. Seul OpenSSH peut convertir les clés dans les deux sens entre les formats OpenSSH et SSH2.
[remote-host]$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > \ ~/.ssh/id_dsa_1024_a_openssh.pub
Copiez la clé publique OpenSSH convertie du fichier ~/.ssh/id_dsa_1024_a_openssh.pub vers le fichier authorized_keys comme indiqué ci-dessous.
[remote-host]$ vi ~/.ssh/authorized_keys ssh-dss 5iGSvMtmBBj8wQdegAEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFD G0VQESjq+YlVTWcXxStz0xGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpgh C97s143S8zBcTAGtdegte3IqmlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8 COWQst6jsP6RG/WrpHiI4QVDM6tZVZ4CnGjm1QPkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnf LL7TRTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcd XFY2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQ dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGiPQTrt9N AzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA==
6. Configurez l'autorisation appropriée sur l'hôte distant pour le répertoire .ssh
Sur l'hôte distant qui exécute openSSH, assurez-vous de configurer l'autorisation suivante. Sans cela, vous aurez toutes sortes de problèmes étranges avec ssh.
$ chmod 755 ~ $ chmod 755 ~/.ssh $ chmod 644 ~/.ssh/authorized_keys
7. Connectez-vous de l'hôte local à l'hôte distant à l'aide de l'authentification par clé SSH
Effectuez ssh de l'hôte local (SSH2) à l'hôte distant (OpenSSH) comme indiqué ci-dessous pour vérifier si l'authentification basée sur la clé fonctionne correctement.
[local-host]$ [You are on local-host here] [local-host]$ ssh -l jsmith remote-host Host key not found from database. Key fingerprint: bitaz-navun-gogus-mptop-ljilk-qwlem-ftrtm-llmak-topok-zuiof-bnmix You can get a public key's fingerprint by running % ssh-keygen -F publickey.pub on the keyfile. Are you sure you want to continue connecting (yes/no)? yes Host key saved to /home/jsmith/.ssh2/hostkeys/key_22_remote-host.pub host key for remote-host, accepted by jsmith Sun Oct 19 2008 15:06:42 -0700 Passphrase for key "/home/jsmith/.ssh2/id_dsa_2048_a" with comment "2048-bit dsa, jsmith@local-host, Sun Oct 19 2008 14:49:42 -0700":[Enter password] Last login: Sun Oct 19 14:01:48 2008 from 192.168.1.10 [remote-host]$ [You are on remote-host here]
Remarque :Si vous obtenez l'erreur suivante lors de l'exécution de ssh ou scp de l'hôte local à l'hôte distant, veuillez vous référer à Comment résoudre le problème d'échec de la négociation d'algorithme sur SSH, pour résoudre ce problème.
[local-host]$ ssh -l jsmith remote-host warning: Authentication failed. Disconnected; key exchange or algorithm negotiation failed (Algorithm negotiation failed.)
Il existe deux façons d'exécuter ssh et scp sans saisir le mot de passe :
- Aucune phrase secrète : Lors de la création de la paire de clés, laissez la phrase de passe vide. Utilisez cette option pour le traitement automatisé par lots. par ex. si vous exécutez une tâche cron pour copier des fichiers entre des machines, cette option est appropriée. Vous pouvez ignorer les étapes suivantes pour cette méthode.
- Utiliser la phrase secrète et l'agent SSH :Si vous utilisez ssh et scp de manière interactive à partir de la ligne de commande et que vous ne souhaitez pas utiliser le mot de passe à chaque fois que vous exécutez ssh ou scp, je ne recommande pas l'option précédente (pas de phrase secrète), car vous en avez éliminé une niveau de sécurité dans l'authentification basée sur la clé ssh. Au lieu de cela, utilisez la phrase secrète lors de la création de la paire de clés et utilisez l'agent SSH pour exécuter ssh et scp sans avoir à saisir le mot de passe à chaque fois, comme expliqué dans les étapes ci-dessous.
8. Démarrez l'agent SSH sur l'hôte local
L'agent SSH fonctionnera en arrière-plan pour conserver les clés privées et exécuter ssh et scp sans avoir à saisir plusieurs fois la phrase secrète.
[local-host]$ ssh-agent $SHELL
9. Charger la clé privée dans l'agent SSH sur l'hôte local
[local-host]$ ssh-add Adding identity: /home/jsmith/.ssh2/id_dsa_2048_a.pub Need passphrase for /home/jsmith/.ssh2/id_dsa_2048_a (2048-bit dsa, jsmith@local-host, Sun Oct 19 2008 14:49:42 -0700). Enter passphrase:[Enter your passphrase here]
10. Exécutez SSH ou SCP de l'hôte local à l'hôte distant sans entrer le mot de passe
[local-host]$ [You are on local-host here] [local-host]$ ssh -l jsmith remote-host Last login: Sun Oct 19 14:20:48 2008 from 192.168.1.10 [remote-host]$ [You are on remote-host here]
Si vous avez aimé cet article, merci de le partager sur delicious and Stumble it .