web-dev-qa-db-fra.com

comment éviter de demander à "Entrez la phrase secrète de la clé" lorsque je fais l'opération ssh sur un hôte distant?

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.

35
lily

À mon avis, la meilleure façon d'utiliser ssh

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.

D'autres moyens

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-Prompt

70
Roman

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.

17
ams

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:

  1. Si c'est crypté, vous pouvez essayer de supprimer le cryptage .
  2. Vous utilisez la mauvaise clé. Si vous souhaitez utiliser une clé différente, spécifiez un autre fichier ou modifiez votre ~/.ssh/config et spécifiez un autre fichier d'identité (IdentityFile).
  3. Exécutez 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).
  4. 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:

  1. Vérifiez que votre agent SSH est en cours d'exécution (eval "$(ssh-agent -s)").
  2. Relancez git via: GIT_TRACE=1 git pull ou avec GIT_SSH_COMMAND="ssh -vv" (Git 2.3.0+) pour déboguer à nouveau votre commande.
  3. 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
    
3
kenorb

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

  • commence ssh-agent
  • commence ssh-add
  • ajoute ta clé
  • exécute la commande que vous voulez.

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.

2
Thomas Dickey

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!

0
Justin Samuel

Vous obtiendrez toujours le mot de passe Invite à déchiffrer la clé privée même si elle est chargée dans ssh-agentjusqu'à 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.

0
uvsmtid