Rilevamento dell'inoltro dell'agente SSH


19

Come posso sapere se è stata stabilita una connessione SSH con o senza inoltro agente?

Sto provando a fare quanto segue:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

e confrontare l'output, ma posso vedere solo sottili differenze.


1
Per riferimento, dai un'occhiata a questo bell'articolo: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add . Ti indica un bel repository GitHub con uno ssh-find-agentscript per trovare e usare gli agenti ssh esistenti, molto utile! Il repository ha alcuni esempi nel README. Potresti essere in grado di rilevare se ssh-agent è abilitato in questo modo, insieme all'ispezione dei file di configurazione SSH, piuttosto che guardare l'output SSH.
Trusktr,

Risposte:


21

Quando forward dell'agente ssh è abilitato sul client ( ForwardAgent yesattivo ~/.ssh/config) ed è abilitato anche sul server remoto AllowAgentForwarding yes, quando si accede al server remoto SSH_AUTH_SOCKdovrebbe esistere la variabile di ambiente . Quindi se accedi a un altro server (la tua chiave pubblica deve risiedere su questo terzo server) non dovresti ricevere alcuna password.

Chiarire:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$

1
Il ssh-addè quello che ha fatto il trucco per me. Ho lavorato per mesi senza saperlo. Quindi ho cambiato desktop da Unity a LXDE e l'inoltro della chiave dell'agente ha smesso di funzionare.
Mark Hudson,

@MarkHudson Per qualche motivo quando esegui LXDE devi eseguirlo ssh-addogni volta che apri una nuova finestra della console. Così ho aggiunto quella riga di comando alla fine di ~/.bash_profile, e ora l'inoltro dell'agente di autenticazione funziona sempre in modo trasparente!
Paul Bernal,

@PaulBernal Non dovresti davvero aver bisogno di farlo, immagino che tu non abbia ssh-agentimpostato correttamente. Vedi mah.everybody.org/docs/ssh
Michael Mrozek

1
m2c: il file in "${SSH_AUTH_SOCK}"è un socket, puoi provarlo conif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop

4

Controllare l'ambiente per SSH_AUTH_SOCKè buono per le connessioni dirette ssh.

Se usi i proxy ( proxy_command) potresti avere una connczione simile a:

local-> hostA-> hostB-> hostC->hostD

Se l'inoltro dell'agente è attivo su tutti quegli host, SSH_AUTH_SOCKverrà impostato e "contiene" la tua chiave ssh da localtutti gli host.

Supponiamo ora che l'inoltro dell'agente sia disabilitato hostBma attivato hostC. SSH_AUTH_SOCKverrà impostato hostDma sarà effettivamente "vuoto". Naturalmente l'agente viene inoltrato ma solo da hostCa hostD. La catena è rotta.

Ora per verificare se effettivamente il tasto è disponibile su hostDpuoi semplicemente chiamare ssh-add. In ogni caso uscirà con il codice 1, ma se la chiave non è disponibile lo mostrerà su stderr:

Impossibile aprire una connessione al tuo agente di autenticazione.

Quindi puoi controllare il SSH_AUTH_SOCKplus assicurandoti che ssh_addnon ci sia output.

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.