Comment configurer SSH pour ne pas avoir à taper mon mot de passe?

153

Comment configurer SSH pour ne pas avoir à taper mon mot de passe lors de la connexion à un hôte?

Richard Hoskins
la source
On pourrait discuter si l'utilisation de telles clés ne nécessite pas de mot de passe. Pour éviter que quiconque s'empare de votre clé privée ne puisse en abuser, vous pouvez protéger la clé par un mot de passe lui-même. Bien sûr, on peut laisser ce mot de passe vide, mais dans de nombreux cas, cela ne serait pas recommandé.
Arjan
Sur le dernier Cygwin avec le dernier SSH, je fus invité à nouveau parce que je devais apporter un changement à mon compte ~/.ssh/configqui est maintenant requis PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
HDave

Réponses:

164

Générer une clé SSH (si vous n'en avez pas)

Si vous utilisez GNOME, l’ application Seahorse ("Mots de passe et clés de cryptage") peut le faire pour vous: Fichier -> Nouveau -> Clé de shell sécurisée .

Si vous préférez le terminal, lancez pour générer une paire de clés. Les types de paire de clés valides sont:ssh-keygen -t <type>

  • rsa: la valeur par défaut
  • dsa: plus ou moins équivalent sauf les clés 1024 bits limitées
  • ecdsa: même sécurité avec des clés plus petites, mais relativement nouveau et assez rare dans les logiciels SSH.
  • ed25519: Haute sécurité (plus résistant aux attaques par canaux latéraux et aux générateurs de nombres aléatoires faibles). Génération de signature très rapide. Tout nouveau. Uniquement disponible dans OpenSSH> = 6.5 .

Le programme vous demandera une phrase secrète et un emplacement pour enregistrer la nouvelle clé. Il est recommandé d'utiliser le chemin par défaut suggéré, car tous les autres outils le rechercheront.

Télécharger la clé publique sur le serveur distant

Encore une fois, Seahorse peut souvent le faire pour vous - dans Mes clés personnelles , cliquez avec le bouton droit sur votre clé SSH et choisissez Configurer la clé pour un shell sécurisé .

Ou, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-hostdans le terminal.

Ou, complètement manuellement, étape par étape:

  1. Créez un répertoire (s'il n'existe pas déjà) nommé .sshdans le répertoire de base de l'utilisateur distant sur l'hôte distant.
  2. Dans ce répertoire, créez un fichier nommé authorized_keys(s'il n'existe pas déjà).
  3. Dans le cas où votre télécommande umaskest plus libéral que d' habitude, rendre le fichier non-groupe inscriptibles: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Enfin, copiez (ajoutez) le contenu de votre clé publique locale ( ~/.ssh/id_rsa.pub) dans le ~/.ssh/authorized_keysfichier distant .

Charger la clé dans l'agent ssh

Si vous chargez votre clé privée dans un agent ssh , la clé déchiffrée sera conservée en mémoire. Nous voulons que cela évite de ressaisir le mot de passe chaque fois que nous envoyons un shell sur un serveur.

Tout d'abord, l'agent doit être démarré ou le chemin d'un socket de communication lancé doit être chargé dans une variable. L'exécution de ssh-agent sur un terminal générera des commandes pour affecter et définir les variables de l'agent. Ces commandes peuvent être enregistrées dans un fichier pour être utilisées dans un autre terminal. Sinon, vous pouvez exécuter ces commandes et oublier de réutiliser le même agent dans un autre terminal. par exemple: eval $(ssh-agent).

Le chargement de la clé consiste simplement à exécuter ssh-addet à donner la phrase secrète.

Si vous utilisez GNOME, gnome-keyring-daemon fournit généralement les mêmes fonctionnalités d'agent SSH que ssh-agent. Vous n'avez donc pas besoin de démarrer quoi que ce soit. GNOME chargera et déverrouillera automatiquement la clé lors de la connexion.

Shell dans le serveur distant sans mot de passe

Si tout a été fait correctement, using ne vous demandera pas de mot de passe. Si quelque chose ne va pas avec l'agent et non avec la clé, il vous sera demandé de saisir la phrase secrète de la clé et non le mot de passe du compte d'utilisateur.ssh user@server

Tout ce qui utilise ssh pour la communication fonctionnera sans entrer le mot de passe du compte utilisateur lorsque la clé correcte est chargée dans l'agent. Des programmes tels que scp , sftp et rsync l' utilisent.


Remarques:

  • Vous n'avez besoin que d'une clé SSHv2, car SSHv1 n'est pas très sécurisé et est maintenant inutilisé.
  • De plus, vous n'avez besoin que d'un seul type de clé: RSA ou DSA suffit. (ed25519 et ECDSA sont tous deux récents et ne sont donc pas pris en charge partout).
  • Toutes ces étapes sont les mêmes pour les clés RSA et DSA. Si vous utilisez DSA, utilisez à la id_dsaplace de id_rsa, et ECDSA en aura id_ecdsa.
  • Les serveurs OpenSSH antérieurs à la version 3.0 sont utilisés authorized_keys2- mais il est très peu probable que vous utilisiez une version antérieure à la version 5.0.
  • Ces instructions s'appliquent uniquement à OpenSSH version 3.0 et plus récente. lsh, ssh.comet d’autres serveurs SSH (Unix et non) ne sont pas inclus dans ce tutoriel.

Exemples:

  • Copier la clé publique sur un hôte distant:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this
    
    cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / registered_keys '# ou this
    
  • Enregistrement des variables d'agent pour une utilisation ultérieure (exemple détaillé)
    ssh-agent> ~ / .ssh / cross-terminal-agent
    . ~ / .ssh / cross-terminal-agent
    
grawity
la source
7
ah, vous devez dire "ssh-add {chemin-à-fichier-clé privée}" et ensuite il vous demandera votre phrase secrète. Veuillez rendre ceci plus explicite dans votre message. Vous devez également ajouter "Quatrième, exécutez ssh". Une partie du problème de la documentation avec ce matériel est qu’elle dissimule des étapes apparemment évidentes qui ne sont PAS évidentes pour un débutant dans le processus qui n’a aucune idée de ce qui se passe et de la manière dont ces programmes fonctionnent ensemble.
Jason S
1
Jason: ssh-add -l doit vérifier si un agent est en cours d'exécution. ssh-add sans arguments ajoutera la clé à partir de l'emplacement par défaut (~ / .ssh / id_rsa). Quoi qu'il en soit, mis à jour.
Grawity
4
Une commande ssh-copy-idcopie la clé publique sur l'hôte cible et définit automatiquement les autorisations.
Hassen
1
Très bonne réponse! Il manque un peu d'informations sur les autorisations de fichier des fichiers de clé - je viens d'avoir un problème relatif à cela aujourd'hui. Le fichier de clé privée ne devrait être accessible que par moi et le fichier de clé publique ne devrait être accessible en écriture que par moi.
ripper234
1
Une doublure: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address(il suffit de remplacer username@server-ip-or-address).
totymedli
22

Vous n'avez pas précisé sur quel Unix vous êtes, à quel UNIX vous vous connectez, quel shell que vous utilisez, quelle variante SSH vous utilisez, etc. Il faudra donc peut-être ajuster légèrement certains éléments; Ceci est basé sur des versions raisonnablement récentes de OpenSSH, qui sont utilisées sur beaucoup de variantes Unix.

Tout cela provient de votre système de bureau local.

ssh-keygen

Assurez-vous d'utiliser la valeur par défaut pour le nom de clé. Je vous suggère de faire définir un mot de passe sur cette touche, sinon il est un problème de sécurité. "-trsa" ne serait pas une mauvaise idée, mais n'est probablement pas nécessaire.

ssh-copy-id username@server

Cela vous demandera le mot de passe que vous utiliseriez pour vous connecter, et configurera le matériel allowed_keys pour vous. (pas besoin de le faire à la main)

Ensuite ceci:

`ssh-agent`

ou peut-être ceci:

exec ssh-agent sh

ou:

exec ssh-agent bash

Cela démarrera un agent SSH pouvant contenir votre clé. Sur beaucoup de variantes Unix modernes, si vous êtes connecté graphiquement, cela aura déjà eu lieu. La première variante (avec les backticks) place un agent ssh en arrière-plan et configure les variables d'environnement pour qu'il puisse communiquer avec lui. Les deux autres font que l'agent exécute un shell pour vous. Ainsi, lorsque vous quittez le shell, l'agent se ferme.

De nombreuses variantes Unix modernes auront déjà un agent en cours d'exécution pour vous, surtout si vous vous êtes connecté graphiquement. Vous pouvez essayer " ps aux | grep ssh-agent" ou " ps -ef | grep ssh-agent"; si quelque chose fonctionne déjà, utilisez-le.

Finalement:

ssh-add

Il vous demandera un mot de passe. donnez-lui celui que vous avez donné à ssh-keygen. Il y a aussi des façons de le faire demander graphiquement. Et vous pouvez insérer les éléments ssh-agent et ssh-add dans vos scripts de connexion (la configuration varie en fonction du shell utilisé) pour automatiser cette opération, mais certaines variantes d'Unix (Ubuntu Linux actuel, par exemple) effectuent la plupart de ces tâches automatiquement. que tout ce que vous avez à faire est de créer une clé et d’utiliser ssh-copy-id pour la configurer sur l’hôte distant.

Maintenant, " ssh username@server" devrait fonctionner sans demander d'authentification. En coulisse, il utilise une clé détenue par l'agent ssh et demande à l'agent de faire les tours de signature magiques.

freiheit
la source
11

Il est également possible de faire cela dans PuTTY sous Windows.

Une fois que vous avez la paire de clés publique / privée configurée (comme le montrent d’autres réponses ici), exécutez PuttyGen. Là, chargez la clé privée existante que vous avez déjà configurée, puis enregistrez-la en tant que clé privée PuTTY (ppk).

Ensuite, dans PuTTY, cliquez simplement sur la session enregistrée à laquelle vous souhaitez vous connecter automatiquement et cliquez sur Charger. À partir de là, allez dans Connexion -> Données dans le volet de gauche, et dans "Nom d'utilisateur avec connexion automatique", entrez le nom d'utilisateur de ce serveur distant:

Entrée du nom d'utilisateur PuTTY

Après cela, allez dans Connection -> SSH -> Auth, et recherchez le ppk que vous avez créé dans PuttyGen:

Entrée de la clé privée PuTTY

Revenez ensuite à la page de session et sauvegardez la session que vous avez précédemment chargée.

matthews
la source
Le premier lien d'image, "Entrée du nom d'utilisateur PuTTY", semble être rompu.
Peter Mortensen
2
PuTTY inclut sa propre version de ssh-agent; ça s'appelle Pageant. Il fonctionne dans la barre d'état système et contient votre clé pour vous. Vous n'avez pas besoin de lancer ssh-agent, cochez simplement "Autoriser le transfert d'agent" dans les options de PuTTY dans la section Auth, et la connexion de Pageant sera transmise à l'extrémité distante pour que votre agent de clé soit disponible.
Kevin Panko
3

À partir d'une question très similaire sur ServerFault , je vous recommanderais d'utiliser ssh-copy-id , qui effectue toutes les étapes nécessaires à la configuration des clés d'authentification:

ssh-copy-id est un script qui utilise ssh pour se connecter à une machine distante (vraisemblablement en utilisant un mot de passe de connexion, l'authentification par mot de passe doit donc être activée, à moins que vous n'ayez utilisé intelligemment plusieurs identités).

Il modifie également les autorisations du domicile de l'utilisateur distant, ~ / .ssh et ~ / .ssh / allowed_keys pour supprimer l'aptitude du groupe à l'écriture (ce qui vous empêcherait de vous connecter si le sshd distant a StrictModes défini dans sa configuration).

Si l'option -i est donnée, le fichier d'identité (par défaut, ~ / .ssh / identity.pub) est utilisé, qu'il y ait ou non des clés dans votre agent ssh.

Tout ce que vous avez à faire est simplement ceci:

ssh-copy-id user@host

Tapez votre mot de passe une fois, et vous êtes prêt à partir!

Chris Bunch
la source
3

En plus de tout ce qui a déjà été expliqué sur la façon de définir les clés ssh, je recommande Keychain comme interface frontale de la console ssh-agent, qui vous permet de gérer un seul processus système par processus au lieu de chaque connexion.

Je sais qu'il existe déjà des outils GNOME et KDE qui font la même chose, mais si vous êtes du type junkie sur console, c'est génial (et peut être utilisé sur la plupart des systèmes Unix).

Pour l'utiliser, ajoutez simplement ce qui suit à votre ~/.bashrc(similaire pour les autres coquilles):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
Fran
la source
2

http://linuxproblem.org/art_9.html

Ton objectif

Vous souhaitez utiliser Linux et OpenSSH pour automatiser vos tâches. Par conséquent, vous avez besoin d'une connexion automatique de l'hôte A / utilisateur a à l'hôte B / utilisateur b. Vous ne voulez entrer aucun mot de passe, car vous voulez appeler ssh depuis un script shell.

TheTXI
la source
1
Le vote par voix basse n’était pas le mien, mais je voudrais bien que les gens suppriment leur réponse s’ils remarquaient que quelqu'un d'autre avait posté une réponse presque similaire quelques instants plus tôt.
Arjan
2
Arjan: Je suis pour l'essentiel d'accord avec vous, mais lorsque les postes ne sont séparés que par quelques secondes, je ne pense pas nécessairement qu'il soit juste de punir la personne à la 2e place. Je ne dis pas que vous devez les récompenser en votant à la hausse, mais en votant vers le bas, vous avez l'impression que la réponse est fausse, et non pas à temps
TheTXI
2

J'ai écrit ce tutoriel très très court après avoir été VRAIMENT VRAIMENT frustré par des tutoriels VRAIMENT VRAIMENT longs parce que c'est vraiment si simple :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub
meilleur
la source
2

Putty a une -pwoption qui vous permet de créer un raccourci sur le bureau comme ceci:

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
Enes Genç
la source
1
  1. Sur l'hôte en cours de connexion, exécutez ssh-keygen. (S'il vous indique que vous devez spécifier un type, faites-le ssh-keygen -t rsa.) Lorsqu'il vous demande un emplacement de fichier, prenez le paramètre par défaut. Lorsqu'il vous demande une phrase secrète, appuyez sur Entrée pour ne pas utiliser de phrase secrète.
  2. cat ~/.ssh/id_rsa.pub(ou quel que soit l'emplacement du fichier par défaut ssh-keygen, bien que vous ayez besoin d'une très ancienne sshinstallation pour que ce soit différent); copiez la sortie dans votre presse-papier.
  3. Connectez-vous normalement à l'hôte de destination en tant que compte auquel vous souhaitez vous connecter. Editez le fichier ~/.ssh/authorized_keys(s'il ~/.sshn'existe pas, sloginquelque part; c'est un moyen simple et facile de le créer avec les bonnes autorisations). Collez votre presse-papiers (contenant le id_rsa.pubde l’autre hôte) dans ce fichier.
le chaos
la source
3
-1 pour suggérer de ne pas ajouter de phrase secrète. Sans mot de passe, toute personne lisant le fichier peut désormais se faire passer pour un utilisateur légitime.
bortzmeyer
2
Tout d'abord, il a demandé à ne pas avoir à taper son mot de passe; Je ne pensais pas vraiment que le fait de taper une phrase secrète à la place de son mot de passe constituerait une amélioration. Deuxièmement, vous avez tort. C'est pourquoi il existe une clé publique et une clé privée, de sorte que la clé publique peut être dans le monde.
chaos
Le mot de passe en question est saisi lors de la génération de la clé, pas à chaque fois que vous vous connectez. Correct?
Richard Hoskins
Non. Les clés générées avec une phrase secrète nécessitent la saisie de la phrase secrète chaque fois que la clé est utilisée.
chaos
2
Faux. Avec ssh-agent (voir la réponse acceptée), vous ne tapez le mot de passe qu'une fois par session.
bortzmeyer
0

Si vous voulez tout faire dans le terminal sous Linux:

Sur l'hôte

cd ~ / .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "du texte de commentaire si vous voulez" -f id_ArbitraryName

Les éléments dans {} sont des options, utilisez rsa ou dsa et choisissez la taille de bit (plus gros est sécurisé)

Ensuite, vous devez ajouter les autorisations aux fichiers allowed_keys et allowed_keys2.

cat id_ArbitraryName.pub >>keke_autorisées

cat id_AribtraryName.pub >> registered_keys2

Ensuite, téléchargez le fichier id_AribtraryName dans la boîte à partir de laquelle vous voulez ssh. Si la boîte de connexion est basée sur Unix, un fichier de configuration peut être nécessaire (dans le mastic, quelqu'un ci-dessus l'a couvert).

Sur la boite de connexion

Dans votre fichier de configuration - vim ~ / .ssh / config

Hôte example.host.com # ou le nom de votre ordinateur

Nom d'utilisateur

IdentityFile ~ / .ssh / id_ArbitraryName

Le fichier de configuration nécessite des autorisations de 600. Le dossier SSh en a besoin de 700.

J'espère que cela vous aidera si vous rencontrez un problème de configuration qui est souvent omis.

nerdwaller
la source