Comment puis-je enregistrer de façon permanente une clé SSH protégée par mot de passe?

9

J'utilise Awesome Window Manager

Comment puis-je ajouter définitivement des clés privées avec mot de passe?

Inspiré par la réponse ici, j'ai ajouté les clés privées dans ~ / .ssh / config

Contenu de ~ / .ssh / config:

IdentityFile 'private key full path'

Autorisations de ~ / .ssh / config: 0700

Mais ça ne marche pas pour moi.

Si j'ajoute manuellement la clé à chaque session, cela fonctionne mais je cherche une manière plus élégante (pas en .bashrc)

MODIFIER :

  • Utilisation de la version classique de Gnome (sans effets).

Après avoir ajouté la clé SSH avec ssh-copy-ifà l'hôte distant, je reçois l'invite suivante dans le terminal (GNOME Terminal 3.0.1) lorsque je me connecte:

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • Utilisation du gestionnaire de fenêtres Awesome v3.4.10. Je l'avais déjà gnome-keyring-dameonfait, j'ai donc tué l'autre pid et exécuté gnome-keyring-daemon --start | grep SOCK(je l'ai également ajouté dans .profile) la sortie (grep):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

J'ai suivi exactement les mêmes étapes et, de même, je n'ai aucune boîte de dialogue d'ajout de ssh à l'interface graphique.

EDIT 2 :

J'ai créé une nouvelle clé protégée par mot de passe à partir de la machine virtuelle Ubuntu 11.10 sur l'unité et je ne parviens toujours pas à obtenir d'invite de mot de passe.

EDIT 3 : Il semble que cela ne puisse pas fonctionner dans le gestionnaire de fenêtres Awesome :( et peut-être d'autres ..

pl1nk
la source
1
Quel est l'intérêt d'ajouter une clé SSH protégée par mot de passe? Cela va à l'
encontre
3
@Syzygy Eh bien saisissez-vous toujours les mots de passe de différents services et applications ou utilisez-vous un porte-clés pour déverrouiller votre mot de passe avec votre mot de passe de connexion?
pl1nk
Avez-vous d'autres réflexions / questions, pl1nk? La période de grâce Bounty expire VRAIMENT bientôt :-)
ish
@izx J'ai vérifié tout ce que vous avez mentionné et tout est comme prévu. Comme je l'ai mentionné dans ma mise à jour, j'avais également utilisé Gnome. Dois-je déposer un bug?
pl1nk
Vous pourriez trouver des indices ici . Il semble que l'ordre dans lequel les choses commencent est important, et pour gnome-keyring-daemon, accéder au dbus est également important.
John S Gruber

Réponses:

2

Si vous utilisez Unity ou un gestionnaire de session qui démarre gnome-keyring-daemon, vous pouvez simplement utiliser Seahorse (mots de passe et clés) pour établir une clé, définir son utilisation, définir une phrase secrète et distribuer sa clé publique à la ordinateur que vous allez utiliser avec ssh. Aucune commande de terminal n'est nécessaire.

Vous créez le mot de passe en:

  1. en sélectionnant Fichier-> Nouveau et sélectionnez Clé Secure Shell. Appuyez sur Continuer.

  2. Saisissez un nom descriptif et sélectionnez Create and set up.

  3. Vous serez invité à saisir une phrase clé deux fois (la deuxième fois pour vérifier que vous ne l'avez pas mal saisie la première fois.

  4. Entrez l'ordinateur sur lequel la clé publique doit être utilisée et le nom d'utilisateur sur cet ordinateur pour lequel vous utiliserez la clé. La clé publique sera copiée sur cet autre ordinateur, vous invitant à saisir votre mot de passe sur cet ordinateur si nécessaire.

Maintenant, l' My Personal Keysonglet affichera la clé.

En supposant que gnome-keyring-daemon a été démarré correctement lorsque vous vous êtes connecté à Lightdm, et à nouveau par votre gestionnaire de session, lorsque vous utilisez la clé avec ssh pour la première fois, vous serez invité à saisir la phrase clé. Dans cette boîte de dialogue, vous pouvez fournir la phrase clé, sélectionner le Detailscontrôle et demander que le trousseau soit déverrouillé chaque fois que vous êtes connecté - en fournissant automatiquement cette clé. presseOK

Vous ne pouvez pas être invité de cette manière si une autre clé est disponible pour vous connecter à l'ordinateur distant.

Après cela, le premier onglet Seahorse Passwordsaffichera une "entrée de déverrouillage du mot de passe" pour le nom de la clé. Cliquez sur le triangle avant " Mots de passe: Connexion" pour le voir.

John S Gruber
la source
Donc, cette fonctionnalité ne fonctionne pas avec Awesome WM. Je voudrais continuer à utiliser Awesome donc je continuerai à utiliser ma solution de contournement.
pl1nk
19

Faire en sorte qu'une clé SSH protégée par mot de passe persiste entre les sessions et les redémarrages

C'est probablement ce que vous voulez: entrer une fois la phrase de passe clé la rend disponible à tout moment lorsque vous êtes connecté. Cela fonctionnera pour la plupart des utilisateurs qui utilisent les bureaux Unity ou Gnome.

  • Lorsque vous vous connectez après avoir ajouté la clé publique au serveur distant, vous obtenez la boîte de dialogue GUI ssh-add:

    entrez la description de l'image ici

  • Développez les "Détails" en cliquant sur le triangle, et vous obtiendrez le ci-dessous. La valeur par défaut est "verrouiller le trousseau de clés lorsque je me déconnecte", ce qui vous oblige à saisir le mot de passe une fois par session:

    entrez la description de l'image ici

  • Changez-le en Déverrouiller automatiquement ... chaque fois que je suis connecté , ce qui signifie que cela fonctionnera chaque fois que vous vous serez connecté à votre session - il est "contrôlé" par votre mot de passe utilisateur. Il persistera lors des redémarrages.

    entrez la description de l'image ici

  • Saisissez une fois la phrase secrète de la clé et c'est tout - la clé est authentifiée via la connexion initiale réussie à votre environnement de bureau.


Si vous utilisez AwesomeWM

Testé avec une nouvelle installation d'AwesomeWM dans un nouvel ID utilisateur

  • Par défaut, AwesomeWM utilise ssh-agent:

    $ export | grep SSH
    déclarer -x SSH_AGENT_PID = "5479"
    declare -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • Pour que les étapes ci-dessus fonctionnent, vous devez utiliser gnome-keyring-daemoncomme démon d'authentification SSH, pas ssh-agent. Lorsque vous vous connectez à l'aide de lightdm, PAM démarre gnome-keyring-daemonqui essaiera de déverrouiller une clé de connexion avec votre mot de passe de déverrouillage, mais vous devez ajouter à votre configuration pour qu'elle continue à fonctionner et à l'utiliser.

  • Ajoutez ce qui suit à la fin de votre ~/.xprofile:

      #! / bin / bash
      eval $ (gnome-keyring-daemon --start)
      exporter SSH_AUTH_SOCK
      exporter GNOME_KEYRING_PID
      exporter GNOME_KEYRING_CONTROL
    

Les commandes du ~/.xprofilefichier seront exécutées par xsession avant de démarrer le gestionnaire de fenêtres génial et le lieront au gnome-keyring-daemon --loginprocessus démarré par PAM via les variables d'environnement ci-dessus.

  • Déconnectez-vous de nouveau sur lightdm et reconnectez-vous, et maintenant ssh user@host, vous devriez obtenir les fenêtres contextuelles ci-dessus - utilisez-les pour décoder vos clés privées dans ~ / .ssh / et enregistrer vos clés privées dans le trousseau de connexion de gnome-keyring.

La solution générale pour tout gestionnaire de fenêtres / environnement de bureau

  • est d'utiliser à la gnome-keyring-daemonplace de ssh-agent. Pour cela, vous devez être en cours d'exécution gnome-keyring-daemon et l' initialiser et le faire après le ssh-agentdémarrage ou ne pas démarrer ssh-agentdu tout.

  • ssh(en fait ssh-add) décide quel agent d'authentification appeler en fonction de la valeur de la SSH_AUTH_SOCKvariable d'environnement, qui peut être vérifiée en tapantexport | grep SOCK

  • c'est du formulaire SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130pour ssh-agent (PAS ce que vous voulez pouvoir sauvegarder votre clé)

  • mais du formulaire SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"pour gnome-keyring-daemon (que vous voulez)

  • vérifiez donc la valeur, et vérifiez avec ps aux | grep keyringce gnome-keyring-daemon est en cours d'exécution, et si oui, initialisez-le avec les résultats degnome-keyring-daemon --start

  • vous pouvez ensuite vérifier les identités enregistrées associées dans la console en tapant ssh-add -l- s'il affiche "aucun agent", vous avez fait une erreur lors de la configuration de gnome-keyring-daemon.

ish
la source
Et bien je n'ai pas vu ça! Quelle commande puis-je utiliser ou encore mieux quelle commande cette boîte de dialogue appelle?
pl1nk
@izx lors de l'utilisation est-il nécessaire d'utiliser ssh-add?
John S Gruber
@JohnSGruber Non, tant que les clés privées sont en place ~/.ssh, il n'est pas nécessaire d'utiliser ssh-add- la boîte de dialogue apparaîtra lors de la première utilisation. Notez que cela ne fonctionne que dans Unity / Gnome - j'ai découvert dans le chat que l'OP utilise AwesomeWM , où cela ne fonctionne pas!
ish
1
@ pl1nk: veuillez consulter la solution mise à jour pour AwesomeWM vers la fin de la réponse.
ish
@izx - Merci pour votre soutien global, consultez ma question mise à jour.
pl1nk
2

La solution à votre problème consiste à utiliser l'agent ssh. Il vous suffit de déverrouiller le mot de passe de votre clé une fois, après quoi il est conservé en mémoire par l'agent et utilisé automatiquement

  • Générez une paire de clés privée / publique avec ssh-keygen -t dsa
  • Copiez la clé publique sur la machine distante, généralement c'est ~ / .ssh / authorized_keys (utilisez ssh-copy-idpour cela)
  • Exécutez ssh-addavant de vous connecter au système distant, cela vous demandera votre phrase secrète et la stockera
  • Connectez-vous au système distant, aucun mot de passe nécessaire

ssh-agent est bien décrit sur le .net, par exemple ici:

Un autre avantage de ssh-agent est que si vous vous connectez au système distant avec ssh -A [email protected]vous pouvez faire passer ssh de l’ordinateur domain.name à un troisième ordinateur contenant votre clé publique sans chaque copie de votre clé privée vers l’ordinateur domain.name (et il ne voit votre clé privée, seulement le défi / réponse unique).

Floyd
la source
Comment puis je faire ça? Ce n'est pas clair d'après les instructions que vous avez envoyées. De plus, est-ce lié à Ubuntu?
pl1nk
J'ai édité mon article avec des instructions détaillées
Floyd
Votre solution stocke le mot de passe par session, en plus dans mon cas, cela semble être un conflit avec gnome-keyring comme vous pouvez le voir dans ma réponse.
pl1nk
@ pl1nk: vous avez donc besoin que le mot de passe soit stocké entre les sessions - c'est-à-dire, demandé une seule fois pour chaque démarrage?
ish
oui, vous devez fournir le mot de passe une fois par session. C'est l'idée derrière les clés ssh protégées par mot de passe, pour fournir une autre couche de sécurité au-delà de la possibilité d'accéder au fichier de clé privée après la connexion.
Floyd
-1

vous pouvez utiliser

ssh-add 'filename or fullpath'

on vous demandera la phrase secrète si votre clé en a une

alors vous pouvez vous connecter sans mot de passe

eyadof
la source
1
Comme je l'ai mentionné à ma question, je cherche une manière plus élégante.
pl1nk
-2

Si vous souhaitez travailler avec des clés privées, procédez comme suit:

ssh-keygen -t rsa -N ''

Alors:

copier .ssh/id_rsa.pubvers la destination de la machine .ssh/authorized_keysvia scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

Terminé.

Connectez-vous à la machine distante sans mot de passe:

ssh user@remote_machine

Et nous n'avons pas d'invite de mot de passe.

Octávio Filipe Gonçalves
la source
Cela me demandera toujours le mot de passe clé à chaque fois.
pl1nk
1
Probablement parce que lorsque vous exécutez ssh-keygen -t rsa -N '', vous mettez un mot de passe. Ainsi, lorsque vous exécutez la commande ci-dessus, ne mettez pas de mot de passe, appuyez uniquement sur la touche "ENTRÉE".
Octávio Filipe Gonçalves
Eh bien, je voudrais avoir des clés avec mot de passe. J'ai mis à jour ma question
pl1nk
1
Ok, je ne vois pas pourquoi tu veux faire ça avec un mot de passe. Normalement, ce concept est utilisé uniquement pour établir des connexions avec des machines distantes qui peuvent reconnaître la machine client sans authentification. Donc, si vous ne voulez pas de ce scénario, il vous suffit d'exécuter une connexion ssh normale. droite?
Octávio Filipe Gonçalves
1
Dire aux gens de copier leur clé publique sur les touches autorisées sur une machine distante est un peu brutal ... Il vaut mieux utiliser la commande ssh-copy-id user @ remotemachine, qui, comme pour un mot de passe, se connectera la première fois, puis APPEND pas écraser la clé.
Floyd