Utilizzare una specifica chiave inoltrata da SSH-agent?

Diciamo che ho una chiave per Github, insieme ad altre chiavi. Ho aggiunto molte chiavi al mio agente ssh ( ssh-add -L restituisce un sacco di righe) nel mio computer di casa A. Nella mia .ssh/config ho impostato quale chiave da usare con quale host, per esempio

 ssh -T -vvv git@github.com 2>&1 | grep Offering 

 debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github 

Solo una chiave viene offerta, come previsto. Ma poi ssh-ing a qualche host B con ForwardAgent yes e ripetendo lo stesso command, ottengo

 debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2 debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github 

il che significa che cerca tutte le mie chiavi. Questo è problematico poiché solo un numero limitato di chiavi può essere provato prima che i server restituiscano Too many authentication failures . Così ho provato a modificare .ssh/config sull'host B per includere

 Host github.com IdentityFile /Users/doxna/.ssh/id_rsa.github IdentitiesOnly yes 

ma poi non ho più offerte chiave, ma piuttosto

 debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil)) 

che presumo significa che la chiave non è stata trovata (?) E dopo tutto, la chiave si trova al mio computer di casa A, non l'host B, quindi la domanda è come farne riferimento all'host B? Spero di riuscire a spiegare la domanda.

  • Il modo più veloce per copiare la cartella che contiene molti file tramite SSH
  • Come SSH port inoltrare l'utente git a gitserver?
  • ssh "AVVERTENZA: L'IDENTIFICAZIONE DELL'HOST REMOTE HA CAMBATO!"
  • SSH hosts.deny e hosts.allow
  • SSH con chiave DSA 2048 bit
  • SFTP con chroot a seconda della chiave pubblica di connessione dell'utente
  • scp user1 @ host1: qualche file user2 @ host2: somefile
  • Il modo migliore per eseguire il command remoto SSH che richiede root, ma non come root
  • 2 Solutions collect form web for “Utilizzare una specifica chiave inoltrata da SSH-agent?”

    Hai la giusta idea. L'unica parte che manca è che il file indicato da IdentityFile deve esistere. Non ha bisogno di contenere una chiave privata, solo la chiave pubblica disponibile è sufficiente.

    In host B è ansible estrarre la chiave pubblica dall'agente digitando ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pub ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pub e quindi puntare a quel file da ~/.ssh/config

    Bella risposta da @Kasperd, ma nota anche che se l'host B è compromesso o se non ti fidi di tutti quelli con privilegi di root, allora stai ancora esponendo tutte le tue chiavi per abusare finché sei stato registrato in su quel padrone.

    Quindi un approccio migliore potrebbe essere quello di inoltrare solo le chiavi necessarie. Forse provare ssh-agent-filter che si trova in debian / repository di Ubuntu, o da github .

    EDIT: Ho installato su ssh-ident piuttosto che ssh-agent-filter per spedire le chiavi selettivamente, anche se non è un'esperienza più semplice come si potrebbe sperare.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.