web-dev-qa-db-fra.com

Comment ajouter de manière permanente une clé privée avec ssh-add sur Ubuntu?

J'ai une clé privée protégée par un mot de passe pour accéder à un serveur via SSH.

J'ai 2 machines Linux (Ubuntu 10.04) et le comportement de la commande ssh-add est différent dans les deux cas.

Sur une machine, une fois que j’ai utilisé "ssh-add .ssh/identity" et saisi mon mot de passe, la clé a été ajoutée de manière permanente, c’est-à-dire chaque fois que je mets l'ordinateur hors tension et que je me reconnecte, la clé est déjà ajoutée.

Dans l'autre, je dois ajouter la clé à chaque fois que je me connecte.

Autant que je me souvienne, j'ai fait la même chose pour les deux. La seule différence est que la clé a été créée sur celle qui est ajoutée de manière permanente.

Est-ce que quelqu'un sait comment l'ajouter en permanence à l'autre machine?

426
duduklein

Une solution serait de forcer la conservation permanente des fichiers de clés en les ajoutant dans votre fichier ~/.ssh/config:

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

Si vous n'avez pas de fichier 'config' dans le répertoire ~/.ssh, vous devriez en créer un. Il n'a pas besoin de droits root, donc simplement:

nano ~/.ssh/config

... et entrez les lignes ci-dessus selon vos besoins.

Pour que cela fonctionne, le fichier doit avoir chmod 600. Vous pouvez utiliser la commande chmod 600 ~/.ssh/config.

Si vous voulez que tous les utilisateurs de l'ordinateur utilisent la clé, mettez ces lignes dans /etc/ssh/ssh_config et la clé dans un dossier accessible à tous.

De plus, si vous souhaitez définir la clé spécifique à un hôte, vous pouvez procéder comme suit dans votre ~/.ssh/config:

Host github.com
    User git
    IdentityFile ~/.ssh/githubKey

Cela présente l’avantage, lorsque vous avez de nombreuses identités, qu’un serveur ne vous rejette pas parce que vous avez d’abord essayé les fausses identités. Seule l'identité spécifique sera essayée.

559
daminetreg

Cela ne répondait pas au même problème pour moi sous Mac OS X Lion. J'ai fini par ajouter:

ssh-add ~/.ssh/id_rsa &>/dev/null

Pour mon .zshrc (mais .profile serait bien aussi), qui semble l'avoir corrigé.

(Comme suggéré ici: http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )

110
Aaron

J'ai résolu ce problème sur Mac OSX (10.10) en utilisant l'option -K pour ssh-add:

ssh-add -K ~/.ssh/your_private_key

Pour macOS 10.12 et les versions ultérieures, vous devez également modifier votre configuration ssh comme décrit ci-dessous: https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain

103
totas

Ajoutez simplement le trousseau, comme indiqué dans Ubuntu Quick Tips https://help.ubuntu.com/community/QuickTips

Quoi

Au lieu de démarrer constamment ssh-agent et ssh-add, il est possible d'utiliser un trousseau pour gérer vos clés ssh. Pour installer le trousseau, vous pouvez simplement cliquer ici ou utiliser Synaptic pour effectuer le travail ou utiliser apt-get à partir de la ligne de commande.

Ligne de commande

Un autre moyen d'installer le fichier consiste à ouvrir le terminal (Application-> Accessoires-> Terminal) et à taper:

Sudo apt-get install keychain

Éditer le fichier

Vous devez ensuite ajouter les lignes suivantes à votre $ {HOME} /. Bashrc ou /etc/bash.bashrc:

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
31
Christian Saiki

J'ai essayé la solution de @ Aaron et elle n'a pas fonctionné, car elle rajoutait mes clés chaque fois que j'ouvrais un nouvel onglet dans mon terminal. Alors je l'ai un peu modifié (notez que la plupart de mes clés sont également protégées par un mot de passe, je ne peux donc pas simplement envoyer la sortie à/dev/null):

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi

Cela permet de vérifier le résultat de ssh-add -l (qui répertorie toutes les clés ajoutées) pour une clé spécifique. S'il ne la trouve pas, il l'ajoute ensuite avec ssh-add.

Maintenant, la première fois que j'ouvre mon terminal, on me demande les mots de passe de mes clés privées. On ne me demande plus avant de redémarrer (ou de me déconnecter - je n'ai pas vérifié) mon ordinateur.

Comme j'ai un tas de clés, je stocke la sortie de ssh-add -l dans une variable pour améliorer les performances (du moins, je suppose, cela améliore les performances :))

PS: Je suis sur Linux et ce code est allé dans mon fichier ~/.bashrc. Si vous utilisez Mac OS X, je suppose que vous devez l’ajouter à .zshrc ou .profile.

EDIT: Comme l'a souligné @Aaron dans les commentaires, le fichier .zshrc est utilisé à partir du shell zsh - donc si vous ne l'utilisez pas (si vous n'êtes pas sûr, alors très probablement, vous utilisez bash à la place), ce code devrait aller dans votre fichier .bashrc.

18

Dans mon cas, la solution était:

Les autorisations sur le fichier de configuration doivent être 600. chmod 600 config

Comme mentionné dans les commentaires ci-dessus par generalopinion

Pas besoin de toucher le contenu du fichier de configuration.

11
erezmta

J'ai eu le même problème sur Ubuntu 16.04: certaines clés ont été ajoutées de façon permanente, pour d'autres, j'ai dû exécuter ssh-add à chaque session. J'ai découvert que les clés ajoutées de manière permanente avaient à la fois des clés privées et publiques situées dans ~/.ssh et que les clés oubliées à chaque session n'avaient que des clés privées dans ~/.ssh dir. La solution est donc simple: vous devez copier les deux clés privée et publique sur ~/.ssh avant d'exécuter ssh-add.

4
NShiny

Je lance Ubuntu avec deux clés id_rsa. (une personnelle pour le travail). ssh-add mémoriserait une clé (personnelle) et oublierait la société à chaque fois.

En vérifiant la différence entre les deux, j'ai vu que ma clé personnelle avait 400 droits, tandis que celle de la société en avait 600. (eu u + w). Supprimer le droit d’écriture de l’utilisateur de la clé d’entreprise (avec w ou défini sur 400) a résolu mon problème. ssh-add se souvient maintenant des deux clés.

3
Fholst

Sur Ubuntu 14.04 (peut-être plus tôt, peut-être encore), vous n'avez même pas besoin de la console:

  • lancez seahorse ou lancez ce que vous trouvez en recherchant "clé"
  • créer une clé SSH ici (ou en importer une)
    • pas besoin de laisser la phrase secrète vide
    • il vous est même proposé de pousser la clé publique sur un serveur (ou plus)
  • vous allez vous retrouver avec un agent ssh en cours d'exécution et cette clé chargée, mais verrouillée
  • utiliser ssh récupérera l'identité (c'est-à-dire la clé) par l'intermédiaire de l'agent
  • lors de la première utilisation au cours de la session, la phrase secrète sera vérifiée
    • et vous avez la possibilité de déverrouiller automatiquement la clé lors de la connexion
    • cela signifie que l'authentification de connexion sera utilisée pour envelopper la phrase secrète de la clé
  • remarque: si vous souhaitez transférer votre identité (c'est-à-dire, le transfert d'agent), invoquez votre ssh avec -A ou faites-le par défaut
    • sinon vous ne pouvez pas vous authentifier avec cette clé sur une machine à laquelle vous vous connecterez plus tard à une troisième machine
3
Robert Siemer

L'ajout des lignes suivantes dans "~/.bashrc" a résolu le problème pour moi. J'utilise le bureau Ubuntu 14.04.

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"
2
reynoldpj

Cela a fonctionné pour moi.

ssh-agent /bin/sh
ssh-add /path/to/your/key
2
Jaseem Abbas

très simple ^ _ ^ deux étapes

1. votre trousseau d'installation

2.ajouter du code ci-dessous à .bash_profile

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
2
LawrenceLi

Pour ceux qui utilisent Fish Shell, vous pouvez utiliser la fonction suivante puis l’appeler dans ~/.config/fish/config.fish. Toutes les clés commençant par id_rsa seront chargées dans le ssh-agent.

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

Si vous voulez que le ssh-agent auto démarre automatiquement lorsque vous ouvrez un terminal, vous pouvez utiliser tuvistavie/fish-ssh-agent pour le faire.

1
frederickjh