Come posso inoltrare una chiave ssh già inoltrata a tmux?


15

Mi sto collegando tramite SSH da una macchina in cui sono memorizzate le mie chiavi, inoltro a una seconda macchina, quindi provo a utilizzare le chiavi da tmux. Mi sembra di "perdere" l'inoltro quando si entra in tmux. Come posso "inoltrare di nuovo" in modo da poter usare le mie chiavi da tmux?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)

Confermo che se avvii un agente condiviso tra tutte le sessioni, funziona. La documentazione su bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > Configura processo ssh-agent spiega un metodo per ottenere questo risultato.
Dereckson,

Risposte:


12

Se si allega una sessione tmux già esistente, la shell non eredita le variabili di ambiente dalla shell di accesso. In particolare, non erediterà le variabili di ambiente dell'agente ssh.

Prova questa correzione :

  1. Crea questo script e inseriscilo in $ HOME / .ssh / saveagent

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. Aggiungilo allo script di avvio della shell. Ad esempio se usi bash:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. Dopo aver collegato il tmux, eseguire . $HOME/.ssh/latestagent

Vedi anche Come posso eseguire uno script immediatamente dopo la connessione tramite SSH? e Allega alla sessione tmux ed esegui un comando


1
Invia a .profile forse, se stai cercando di essere compatibile con altre shell sh.
Dereckson,

2
Bella risposta! Alcuni problemi mi sono imbattuto in: a - alcuni dei variabili di ambiente contengono spazi, in modo che la linea prima ultimo in saveagentscript dovrebbe essere: echo "export $var=\"$(eval echo '$'$var)\"". b - lo latestagentscript dovrebbe essere chiamato con sourceinvece di sh, quindi l'impostazione delle variabili influenzerà la shell chiamante. c - la chiamata latestagentautomatica dello script dopo aver collegato tmux può essere eseguita tramite il metodo descritto qui: unix.stackexchange.com/questions/86925/…
Joe

Grazie @Joe, ho modificato la mia risposta per includere i tuoi miglioramenti.
GnP,

0

A meno che non si desideri creare uno script contenente tutte le variabili necessarie in ogni shell che si genera ulteriormente in qualsiasi nuova shell generata dalle stesse tmuxsessioni del server, è probabile che si desideri dire tmuxdi inserire le variabili nella sessione o negli ambienti globali con il set-environmentcomando. Ad esempio come questo (per bash):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

ricordati di aggiungere il -gflag se lo desideri anche in altre sessioni e di usarlo -t <session>se lo stai eseguendo all'esterno di tmux.


0

Dopo aver letto le altre risposte qui, ho deciso di copiare la mia coppia di chiavi pubblica / privata sul server remoto, in modo da non dovermi più preoccupare dell'inoltro dell'agente.

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.