come evitare che mi venga chiesto "Inserisci la passphrase per la chiave" quando eseguo un'operazione ssh su un host remoto?


45

Sono ssh in un host remoto (linux, fedora) e voglio fare un'operazione ssh (git con bitbucket) lì. C'è ssh-agent in esecuzione su quella macchina,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

ma quando voglio git, mi richiede di inserire la passphrase

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Nota: se opero su quella macchina localmente, non mi chiederà di inserire la passphrase


1
Non l'ho usato ma c'è un comando ssh-add che penso sia usato per quel genere di cose
barlop

Risposte:


82

Secondo me il modo migliore di usare ssh

Prima di usare Git aggiungi la tua chiave a ssh-agent

Avviare ssh-agent se non avviato:

$ eval `ssh-agent -s`

Aggiungi la tua chiave privata usando ssh-add

$ ssh-add ~ / .ssh / id_rsa_key
Immettere la passphrase per /home/user/.ssh/id_rsa_key:
identità aggiunta: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Controlla se la chiave è stata aggiunta (il parametro è una L minuscola):

$ 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)

Prova a connetterti al tuo server Git:

$ ssh git.example.com

Ora puoi usare Git senza ulteriori richieste di passphrase.

Altri modi

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


ma ho usato Git aggiungere la tua chiave a ssh-agent, quindi come fare? grazie
giglio,

@lily Siamo spiacenti, non capisco la tua domanda.
Roman,

1
Questa è la soluzione che ha funzionato per me.
Skatox,

2
Come posso renderlo persistente? Mettilo semplicemente dentro .bashrc?
Remo

1
Cordiali saluti, evalè necessario perché genera comandi che esportano le variabili di ambiente come SSH_AUTH_SOCK che sono necessarie. unix.stackexchange.com/questions/351725/…
wisbucky

21

Se hai già in ssh-agentesecuzione, puoi aggiungere la chiave e dovrai inserire la passphrase una volta e una sola volta per quella sessione.

ssh-add ~/.ssh/id_rsa

Non dici quale sistema operativo stai utilizzando, ma se si tratta di Linux e Gnome, l'applicazione "Password e chiavi" (nome CLI:) seahorsepuò gestirle in modo che vengano sbloccate quando effettui l'accesso (non è richiesta la passphrase) . Altri ambienti desktop Linux hanno i loro gestori. Non sono sicuro di cosa facciano altri sistemi operativi qui.


3

Il motivo principale della richiesta di passphrase è che la tua chiave è crittografata, confronta questi due:

  • non crittografato

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

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

Quindi devi effettuare una delle seguenti operazioni:

  1. Se è crittografato, puoi provare a rimuovere la crittografia .
  2. Stai usando una chiave sbagliata. Se desideri utilizzare una chiave diversa, specifica un altro file o modifica il tuo ~/.ssh/confige specifica un altro file di identità ( IdentityFile).
  3. Esegui ssh-add -lper elencare tutte le tue identità (quindi confronta con il tuo locale) e ricontrolla con Stash se stai usando i tasti giusti (esistono nella configurazione Stash).
  4. Se conosci la passphrase e vuoi automatizzarla, prova la seguente soluzione alternativa:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Risoluzione dei problemi:

  1. Controlla che il tuo agente SSH sia in esecuzione ( eval "$(ssh-agent -s)").
  2. Rieseguire git tramite: GIT_TRACE=1 git pullo con GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) per eseguire nuovamente il debug del comando.
  3. Puoi provare a bypassare chiedendo la passphrase (che lo reindirizzerà in true), ma non credo che ti aiuterà. Se lo richiede, c'è una ragione per questo ed è sostanzialmente necessario.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

Il ssh-addprogramma avvia un agente che può contenere (e fornire) la tua passphrase. Il modo di usarlo da remoto è in un genitore della shell interattiva (in modo che l'agente non si fermi).

Ecco alcune domande correlate:

Ora ... connettendosi in remoto , di regola il tuo comando non accede come tale, quindi non si avvia ssh-add. Potresti aggirare questo, eseguendo uno script che

  • inizia ssh-agent
  • inizia ssh-add
  • aggiunge la tua chiave
  • esegue il comando desiderato.

Il punto debole è il secondo passo: verrai comunque richiesto per la passphrase, a meno che tu non indebolisca la tua sicurezza usando una chiave che non ha passphrase . Alcune persone lo fanno, molte persone sconsigliano.


ssh-addnon avvia l'agente. Si collega a un agente già in esecuzione.
am

Grazie - Sono abituato a fare questi in script separati e ho trascurato la parte mancante.
Thomas Dickey,

0

Puoi rimuovere facilmente la passphrase della tua chiave usando il seguente comando

ssh-keygen -p

Al primo prompt, immettere il percorso del file (o premere Invio per modificare l'impostazione predefinita) Secondo prompt, immettere la passphrase precedente Prompt successivo, basta premere invio per annullare la passphrase

Sembra che questo sia il modo più semplice!


0

Riceverai comunque la richiesta della password per decrittografare la chiave privata anche se viene caricatassh-agent fino a quando la chiave pubblica SSH corrispondente non viene aggiunta in remoto ~/.ssh/authorized_keys.

Per riprodurre:

# 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`.

Abbastanza confuso. In questo caso, la password di accesso SSH remoto sarebbe sufficiente.

Posso ipotizzare che ciò impedisce l'aggiunta della chiave pubblica (che è accoppiata con la chiave privata crittografata) senza conoscere la password di crittografia per la chiave privata corrispondente. È comunque una procedura di accesso una tantum per accesso remoto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.