Je suis SSH dans un hôte distant (Linux, Fedora) et je veux y faire une opération SSH (git avec bitbucket). Il y a ssh-agent en cours d'exécution sur cette machine,
$ ps -e|grep sh-agent
2203 ? 00:00:00 ssh-agent
mais quand je veux git, il me faut entrer la phrase secrète
$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa':
Remarque: si j'opère sur cette machine localement, elle ne me demandera pas d'entrer la phrase secrète.
Avant d'utiliser Git, ajoutez votre clé à ssh-agent
Démarrer ssh-agent si non démarré:
$ eval
`ssh-agent -s`
Ajoutez votre clé privée utilisez ssh-add
$ ssh-add ~/.ssh/id_rsa_key
Entrez la phrase secrète pour /home/user/.ssh/id_rsa_key:
Identité ajoutée: /home/user/.ssh/id_rsa_key
(/ home/user/.ssh/id_rsa_key)
Vérifiez si la clé est ajoutée (le paramètre est un L minuscule):
$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f
/home/user/.ssh/id_rsa_key (RSA)
Essayez de vous connecter à votre serveur Git:
$ ssh git.example.com
Vous pouvez maintenant utiliser Git sans invites supplémentaires de phrase secrète.
Si vous avez déjà ssh-agent
en cours d'exécution, vous pouvez ajouter la clé et vous devrez entrer la phrase secrète une fois, et une seule fois pour cette session.
ssh-add ~/.ssh/id_rsa
Vous ne dites pas quel système d'exploitation vous utilisez, mais s'il s'agit de Linux & Gnome, l'application "Mots de passe et clés" (nom CLI: seahorse
) peut les gérer afin qu'elles soient déverrouillées lorsque vous vous connectez (aucune phrase secrète n'est requise). ). Les autres environnements de bureau Linux ont leurs propres gestionnaires. Je ne suis pas sûr de ce que les autres OS font ici.
La raison principale pour laquelle la phrase secrète est demandée est que votre clé est cryptée. Comparez ces deux éléments:
non crypté
$ head ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
crypté
$ head ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
Donc vous devez faire l’une des choses suivantes:
~/.ssh/config
et spécifiez un autre fichier d'identité (IdentityFile
).ssh-add -l
pour répertorier toutes vos identités (puis comparez-les avec votre identité locale) et revérifiez avec Stash si vous utilisez les bonnes clés (elles existent dans la configuration Stash).Si vous connaissez le mot de passe et que vous souhaitez l’automatiser, essayez la solution de contournement suivante:
PS="my_passphrase"
install -vm700 <(echo "echo $PS") $PWD/my_pass
DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
Dépannage:
eval "$(ssh-agent -s)"
).GIT_TRACE=1 git pull
ou avec GIT_SSH_COMMAND="ssh -vv"
(Git 2.3.0+) pour déboguer à nouveau votre commande.Vous pouvez essayer d'éviter de demander la phrase secrète (qui la redirigera dans true
), mais je ne pense pas que cela vous aidera. S'il en fait la demande, il y a une raison à cela et c'est essentiel.
DISPLAY= SSH_ASKPASS=/bin/true ssh-add
Le programme ssh-add
démarre un agent qui peut contenir (et fournir) votre phrase secrète. La façon de l'utiliser à distance est dans un parent de votre shell interactif (pour que l'agent ne s'arrête pas).
Voici quelques questions connexes:
Maintenant ... en vous connectant à distance , en règle générale, votre commande ne se connecte pas en tant que telle, elle ne démarre donc pas ssh-add
. Vous pouvez contourner ce problème en exécutant un script qui
ssh-agent
ssh-add
Le point faible est la deuxième étape: vous devez still être invité à saisir la phrase secrète, à moins que vous n'affaiblissez votre sécurité en utilisant une clé sans phrase secrète . Certaines personnes font cela, la plupart des gens déconseillent.
Vous pouvez facilement supprimer la phrase secrète de votre clé en utilisant la commande suivante
ssh-keygen -p
À la première invite, entrez le chemin du fichier (ou appuyez sur Entrée pour modifier la valeur par défaut). Seconde invite, entrez l'ancienne phrase secrète Invite suivante. Appuyez simplement sur Entrée pour supprimer la phrase secrète.
On dirait que c'est le moyen le plus simple!
Vous obtiendrez toujours le mot de passe Invite à déchiffrer la clé privée même si elle est chargée dans ssh-agent
jusqu'à ce que la clé publique SSH correspondante soit ajoutée dans le ~/.ssh/authorized_keys
distant.
Reproduire:
# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys
$ eval $(ssh-agent)
# Agent pid 9290
$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa:
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)
$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
# NOTE: See password Prompt for private key
# (and only then Prompt for remote login).
# Why? Isn't the private key is already loaded by `ssh-add`?
$ ssh-copy-id localhost
$ ssh localhost
# NOTE: No password for private key anymore.
# The key is served by `ssh-agent`.
Assez déroutant. Le mot de passe de connexion SSH distant suffirait dans ce cas.
Je peux supposer que cela empêche l'ajout de votre clé publique (qui est associée à une clé privée cryptée) sans connaître le mot de passe de cryptage pour la clé privée correspondante. C'est quand même une procédure de connexion unique par connexion à distance.