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


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


136
2017-07-18 16:51


origine


On pourrait se demander si l'utilisation de ces clés ne nécessite pas de mot de passe. Pour éviter que quiconque s'empare de votre clé privée puisse en abuser, vous pouvez protéger la clé par un mot de passe. Bien sûr, on peut laisser ce mot de passe vide, mais il y a beaucoup de cas où cela ne serait pas recommandé. - Arjan
Sur le dernier Cygwin avec la dernière version de SSH, on me demandait si je devais changer ma ~/.ssh/config c'est maintenant nécessaire PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss* - HDave


Réponses:


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

Si vous utilisez GNOME, le hippocampe application ("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, exécutez ssh-keygen -t <type> pour générer une paire de clés. Les types de paire de touches valides sont les suivants:

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

Le programme vous demandera un mot de passe et un emplacement où enregistrer la nouvelle clé. L'utilisation du chemin par défaut suggéré est recommandée car tous les autres outils le chercheront ici.

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

Encore, hippocampe peut souvent le faire pour vous - en Mes clés personnelles, faites un clic droit sur votre clé SSH et choisissez Clé de configuration pour un shell sécurisé.

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

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

  1. Créez un répertoire (s'il n'existe pas déjà) nommé .ssh dans le répertoire personnel de l'utilisateur distant sur l'hôte distant.
  2. Dans ce répertoire, créez un fichier nommé authorized_keys (si ça n'existe pas déjà).
  3. Au cas où votre télécommande umask est plus libéral que d'habitude, rendre le fichier inscriptible par groupe: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Enfin, copiez (ajoutez) en quelque sorte le contenu de votre local. Clé publique (~/.ssh/id_rsa.pub) dans la télécommande ~/.ssh/authorized_keys fichier.

Chargez la clé dans l'agent ssh

Si vous chargez votre clé privée dans un ssh agent, il conservera la clé déchiffrée en mémoire. Nous voulons que cela évite de ressaisir le mot de passe chaque fois que nous effectuons un shell dans 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. Fonctionnement ssh-agent sur un terminal va générer 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. Alternativement, on pourrait 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-add et lui donner la phrase de passe.

Si vous utilisez GNOME, gnome-keyring-daemon fournit généralement la même fonctionnalité 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, en utilisant ssh utilisateur @ serveurne vous demandera pas de mot de passe. Si quelque chose ne va pas avec l'agent et non avec la clé, vous serez invité à saisir la phrase de passe de la clé et non le mot de passe du compte utilisateur.

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 faites-en usage.


Remarques:

  • Vous n'avez besoin que d'une clé SSHv2, car SSHv1 est très peu sécurisé et maintenant inutilisé.
  • Vous avez également besoin d'un seul type de clé - RSA ou DSA suffit. (ed25519 et ECDSA sont à la fois récents et donc non pris en charge partout).
  • Toutes ces étapes sont les mêmes pour les clés RSA et DSA. Si vous utilisez DSA, utilisez id_dsa au lieu de id_rsa, et ECDSA aura id_ecdsa.
  • Serveurs OpenSSH plus anciens que 3.0 utilisés authorized_keys2 - mais il est peu probable que vous trouviez quelque chose de plus ancien que 5.0.
  • Ces instructions ne concernent que OpenSSH version 3.0 et ultérieure. lsh, ssh.com, et d'autres serveurs SSH (Unix et non) ne sont pas inclus dans ce tutoriel.

Exemples:

  • Copie de 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 / authorized_keys 'ou ce
    
  • Enregistrement des variables d'agent pour réutilisation (exemple élaboré)
    ssh-agent> ~ / .ssh / agent de terminal croisé
    . ~ / .ssh / agent de terminal croisé
    

152



ah, vous devez dire "ssh-add {path-to-private-key-file}" et il vous demandera ensuite votre phrase secrète. Veuillez le rendre plus explicite dans votre message. Vous devriez également ajouter "Quatrièmement, lancez ssh". Une partie du problème avec la documentation avec ce genre de choses est qu’elle évite les étapes apparemment évidentes qui ne sont PAS évidentes pour les nouveaux venus, qui n’ont aucune idée de ce qui se passe et comment ces programmes fonctionnent ensemble. - Jason S
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 (qui est ~ / .ssh / id_rsa). Quoi qu'il en soit, mis à jour. - grawity
il y a une commande ssh-copy-id qui copie la clé publique sur l'hôte cible et définit automatiquement les autorisations. - hasen
Très bonne réponse! Il manque un peu des permissions sur les fichiers de clé - j'ai juste eu un problème à ce sujet aujourd'hui. Le fichier de clé privée ne doit être accessible que par moi et le fichier de clé publique ne doit être accessible en écriture que par moi. - ripper234
Bon mot: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address (remplacez juste username@server-ip-or-address). - totymedli


Vous n'avez pas spécifié sur quel Unix vous êtes, sur quel Unix vous vous connectez, quel shell vous utilisez, quelle variante SSH vous utilisez, etc. Ceci est basé sur des versions raisonnablement récentes d'OpenSSH, 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 la clé. Je vous suggère faire définir une phrase secrète sur cette clé, sinon il s'agit d'un problème de sécurité. "-t rsa" 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 utiliserez pour vous connecter et configure le contenu authorized_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 va démarrer un agent SSH qui peut contenir votre clé. Sur de nombreuses 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 lui parler. Les deux autres ont l'agent qui exécute un shell pour vous, de sorte que lorsque vous quittez le shell, l'agent se ferme.

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

Enfin:

ssh-add

Il demandera un mot de passe; donnez-lui celui que vous avez donné à ssh-keygen. Il y a aussi des façons de le faire graphiquement. Et vous pouvez placer les éléments ssh-agent et ssh-add dans vos scripts de connexion (la configuration est différente selon le shell que vous utilisez) pour automatiser cela, mais certaines variantes Unix (Linux Ubuntu actuel, par exemple) réalisent la plupart de ces tâches automatiquement. Il vous suffit de créer une clé et d’utiliser ssh-copy-id pour l’installer sur l’hôte distant.

À présent, "ssh username@server"devrait fonctionner sans demander aucune authentification. Dans les coulisses, il utilise une clé que le ssh-agent détient, et demande à l'agent de faire les tours de signature magiques pour cela.


18





Il est possible de le faire en Mastic sur Windows également.

Une fois que la paire de clés publique / privée est configurée (comme le montrent les autres réponses), exécutez PuttyGen. Ici, 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. De là, allez dans Connexion -> Données dans le volet de gauche, et dans "Nom d'utilisateur de connexion automatique" tapez le nom d'utilisateur pour ce serveur distant:

PuTTY username entry

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

PuTTY private key entry

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


11



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


D'une question très similaire sur ServerFault, Je recommande d'utiliser ssh-copy-id, qui effectue toutes les étapes nécessaires à la configuration des clés d’authentification pour vous:

ssh-copy-id est un script qui utilise ssh   se connecter à une machine distante   (probablement en utilisant un mot de passe de connexion, donc   l'authentification par mot de passe devrait être   activé, sauf si vous en avez fait   utilisation intelligente des identités multiples)

Il modifie également les autorisations du   la maison de l'utilisateur distant, ~ / .ssh, et   ~ / .ssh / authorized_keys pour supprimer un groupe   écriture (qui autrement serait   vous empêcher de vous connecter, si le   sshd distant a StrictModes défini dans son   configuration).

Si l'option -i est donnée alors le   fichier d'identité (par défaut à   ~ / .ssh / identity.pub) est utilisé,   indépendamment du fait qu'il y en ait   clés dans votre ssh-agent.

Tout ce que vous devez faire est simplement ceci:

ssh-copy-id user@host

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


3





En dehors de tout ce qui a déjà été dit sur la façon de définir les clés SSH, je recommande Porte-clés comme un ssh-agent interface de console qui vous permet de gérer un seul processus par système plutôt que par connexion.

Je sais qu'il existe déjà des outils GNOME et KDE qui font la même chose, mais si vous êtes le console junkie tapez this is great (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 coques):

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

3





http://linuxproblem.org/art_9.html

Votre but

Vous voulez 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 pas entrer de mots de passe, car vous voulez appeler ssh depuis un script shell.


2



L'acquisition n'était pas la mienne, mais cela ne me dérangerait pas que les gens suppriment leur réponse s'ils ont remarqué que quelqu'un avait posté une réponse presque similaire quelques instants plus tôt. - Arjan
Arjan: Pour la plupart, je suis d'accord avec vous, mais quand les postes ne sont séparés que de quelques secondes, je ne pense pas nécessairement qu'il soit juste de punir la personne en 2e position. Je ne dis pas que vous devez les récompenser en votant, mais le vote à distance donne l'impression que la réponse est fausse, au lieu de ne pas avoir le temps. - TheTXI


J'ai écrit ce très très court tutoriel après avoir été VRAIMENT vraiment VRAIMENT frustré par des tutoriels VRAIMENT très longs car c'est tellement 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

2





Mastic a un -pw option qui vous permet de créer un raccourci sur le bureau comme ceci:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

2





  1. Sur l'hôte de connexion, exécutez ssh-keygen. (Si cela vous dit que vous devez spécifier un type, faites ssh-keygen -t rsa.) Lorsqu'il vous demande un emplacement de fichier, prenez la valeur 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 dans ssh-keygen était, bien que vous deviez avoir un vraiment vieux ssh installer pour qu'il soit différent); copier la sortie dans votre presse-papiers.
  3. Connectez-vous normalement à l'hôte de destination en tant que compte auquel vous souhaitez vous connecter. Modifier le fichier ~/.ssh/authorized_keys (si ~/.ssh n'existe pas, slogin à quelque endroit; c'est le moyen simple et facile de le créer avec les autorisations appropriées. Collez votre presse-papier (contenant le id_rsa.pub de l'autre hôte) dans ce fichier.

1



-1 pour suggérer d'ajouter aucune phrase secrète. Sans mot de passe, toute personne lisant le fichier peut désormais se présenter comme utilisateur légitime. - bortzmeyer
D'abord, il a demandé de ne pas avoir à saisir son mot de passe; Je ne pensais pas vraiment que devoir saisir une phrase secrète à la place de son mot de passe serait une amélioration. Deuxièmement, vous avez tort. c'est pourquoi il y a une clé publique et une clé privée, donc 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 connexion. Correct? - Richard Hoskins
Les clés générées avec une phrase secrète exigent que la phrase secrète soit saisie chaque fois que la clé est utilisée. - chaos
Faux. Avec ssh-agent (voir la réponse acceptée), vous tapez le mot de passe une seule fois par session. - bortzmeyer


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_arbitraire

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

Ensuite, vous devez ajouter les autorisations aux fichiers authorized_keys et authorized_keys2.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_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 un mastic, quelqu'un ci-dessus a couvert cela).

Sur le boîtier de connexion

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

Host 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 a besoin de 700.

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


0