web-dev-qa-db-fra.com

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?

146
Richard Hoskins

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

Si vous utilisez GNOME, le seahorse application ("Mots de passe et clés de cryptage") peut le faire pour vous: Fichier -> Nouveau -> Secure Shell Key.

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 clés valides sont:

  • 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 où enregistrer la nouvelle clé. L'utilisation du chemin par défaut suggéré est recommandée 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 My Personal Keys, cliquez avec le bouton droit de la souris 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-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 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. Si votre variable umask est plus libérale que d’habitude, ne créez pas le fichier en écriture de groupe: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Enfin, copiez (ajoutez) le contenu de votre clé publique locale (~/.ssh/id_rsa.pub) dans le fichier ~/.ssh/authorized_keys distant.

Charger la clé dans l'agent ssh

Si vous chargez votre clé privée dans un ssh agent, 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 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. L'exécution de ssh-agent sur un terminal générera des commandes permettant d'affecter et de 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-add et à lui 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. 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, utiliser ssh user@server 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.

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 utilisent cette fonction.


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 id_dsa au lieu de id_rsa et ECDSA aura id_ecdsa.
  • Les serveurs OpenSSH antérieurs à la version 3.0 utilisaient 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.com et 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 mon compte @ 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 réutilisation (exemple détaillé)
     ssh-agent> ~/.ssh/cross-terminal-agent 
    . ~/.ssh/cross-terminal-agent 
    
159
grawity

Vous n'avez pas précisé sur quel système Unix vous êtes, à quel logiciel vous vous connectez, quel shell 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 d'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 le nom par défaut pour le nom de clé. Je suggère que vous do définissez une phrase secrète sur cette clé, sinon c'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 contenu 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, 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 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 actuel, par exemple) le font automatiquement 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.

22
freiheit

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

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:

PuTTY username entry

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

PuTTY private key entry

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

A partir d'une question très similaire sur ServerFault , je vous conseillerais 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!

3
Chris Bunch

En plus de tout ce qui a déjà été dit sur la façon de définir les clés ssh, je recommande Porte-clé en tant que ssh-agent console qui vous permet de gérer un seul processus système 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 le console junkie type, c'est très bien (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 shells):

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
scetoaux

PuTTY a une option -pw 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
2
Genc Hosting

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
2
samthebest

http://linuxproblem.org/art_9.html

Votre 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 souhaitez entrer aucun mot de passe, car vous souhaitez appeler ssh à partir d'un script Shell.

2
TheTXI
  1. Sur l'hôte se connectant, exécutez ssh-keygen. (S'il vous dit de spécifier un type, faites ssh-keygen -t rsa.) Lorsqu'il vous demande un emplacement pour le 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 par défaut du fichier dans ssh-keygen, bien que vous ayez besoin d'une installation vraiment old ssh 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 (si ~/.ssh n'existe pas, slogin quelque part; c'est le moyen simple et facile de le créer avec les bonnes autorisations). Collez votre presse-papiers (contenant le id_rsa.pub de l'autre hôte) dans ce fichier.
1
chaos

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 du {} sont des options, utilisez rsa ou dsa et choisissez la taille du 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 le boîtier de connexion est basé sur Unix, un fichier de configuration peut être nécessaire (dans PuTTY, une personne ci-dessus l'a couvert).

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

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

0
nerdwaller