comment éviter qu'on me demande «Entrez la phrase secrète pour la clé» lorsque je fais l'opération ssh sur un hôte distant?

45

Je suis ssh dans un hôte distant (linux, fedora) et je veux y faire fonctionner 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 saisir 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, il ne me demandera pas de saisir la phrase secrète

lis
la source
1
Je ne l'ai pas utilisé mais il y a une commande ssh-add qui je pense est utilisée pour ce genre de chose
barlop

Réponses:

82

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

Avant d'utiliser Git, ajoutez votre clé à ssh-agent

Démarrez ssh-agent s'il n'est pas démarré:

$ eval `ssh-agent -s`

Ajoutez votre clé privée à l' aide de 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 de phrase secrète supplémentaires.

D'autres moyens

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

romain
la source
mais j'ai utilisé Git pour ajouter votre clé à ssh-agent, alors comment faire? merci
lily
@ Lily Désolé, je ne comprends pas votre question.
Roman
1
C'est la solution qui a fonctionné pour moi.
Skatox
2
Comment puis-je rendre cela persistant? Mettez-le simplement dans .bashrc?
oarfish
1
Pour info, le evalest nécessaire car il génère des commandes qui exportent les variables d'environnement comme SSH_AUTH_SOCK qui sont nécessaires. unix.stackexchange.com/questions/351725/…
wisbucky
21

Si vous avez déjà ssh-agentexécuté, vous pouvez ajouter la clé et vous devrez saisir 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 se trouve que c'est Linux & Gnome, l'application "Mots de passe et clés" (nom CLI:) seahorsepeut les gérer afin qu'ils soient déverrouillés lorsque vous vous connectez (pas de phrase secrète requise) . D'autres environnements de bureau Linux ont leurs propres gestionnaires. Je ne sais pas ce que les autres OS font ici.

ams
la source
3

La principale raison de la phrase secrète est que votre clé est cryptée, comparez les deux:

  • non crypté

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • chiffré

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Vous devez donc effectuer l'une des opérations suivantes:

  1. S'il est crypté, vous pouvez essayer de supprimer le cryptage .
  2. Vous utilisez une mauvaise clé. Si vous souhaitez utiliser une clé différente, spécifiez un autre fichier ou modifiez votre ~/.ssh/configet spécifiez un fichier d'identité différent ( IdentityFile).
  3. Exécutez ssh-add -lpour répertorier toutes vos identités (puis comparez avec votre local) et vérifiez avec Stash si vous utilisez les bonnes clés (elles existent dans la configuration de Stash).
  4. Si vous connaissez la phrase secrète 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 pullou avec GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) pour déboguer à nouveau votre commande.
  3. Vous pouvez essayer de contourner la demande de phrase secrète (qui la redirigera vers true), mais je ne pense pas que cela vous aidera. S'il le demande, il y a une raison à cela et c'est fondamentalement nécessaire.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    
Kenorb
la source
2

Le ssh-addprogramme 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 ... connexion à 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 cela, en exécutant un script qui

  • départs ssh-agent
  • départs ssh-add
  • ajoute votre clé
  • exécute la commande souhaitée.

Le point faible est la deuxième étape: vous seriez toujours invité à saisir la phrase secrète, sauf si vous affaiblissez votre sécurité en utilisant une clé qui n'a pas de phrase secrète . Certaines personnes font cela, la plupart des gens déconseillent.

Thomas Dickey
la source
ssh-addne démarre pas l'agent. Il se connecte à un agent déjà en cours d'exécution.
Ams
Merci - j'ai l'habitude de le faire dans des scripts séparés et j'ai ignoré la partie manquante.
Thomas Dickey
0

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) Deuxième invite, entrez l'ancienne phrase secrète Prochaine invite, appuyez simplement sur entrée pour annuler la phrase secrète

On dirait que c'est le moyen le plus simple!

Justin Samuel
la source
0

Vous obtiendrez toujours une invite de mot de passe pour déchiffrer la clé privée même si elle est chargée dansssh-agent jusqu'à ce que la clé publique SSH correspondante soit ajoutée dans la télécommande ~/.ssh/authorized_keys.

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 à distance serait suffisant dans ce cas.

Je peux supposer que cela empêche d'ajouter 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. Il s'agit de toute façon d'une procédure de connexion à distance.

uvsmtid
la source