2015-04-12 1 views
0

Quand j'écris .bashrc script pour tenir passphrase pubkey, le plus important commandement est:Pourquoi nohup n'a pas réussi à maintenir le processus ssh-agent hors de la session?

eval `ssh-agent -s` 

Le problème est, si les sorties de session, ssh-agent sera automatiquement fermé qui conduit à la nécessité de passphrase entrée encore à la prochaine session. Ce que je veux, c'est définir une phrase secrète seulement une fois jusqu'à ce que le système redémarre. Par conséquent, je tente:

eval `nohup ssh-agent -s` 

ssh-agent Hope peut vivre de la session à partir comme les autres processus de longue. Cependant, cela ne fonctionne PAS ... Pourquoi? Et comment atteindre mon objectif?

Merci d'avance.

Pour votre information, le script entier est:

ssh-reagent() { 
    for agent in $TMPDIR/ssh-*/agent.*; do 
    export SSH_AUTH_SOCK=$agent 
    if ssh-add -l &> /dev/null; then 
     echo "Found working SSH Agent:" 
     ssh-add -l 
     return 
    else 
     rm -rf $(dirname ${SSH_AUTH_SOCK}) 
     export SSH_AUTH_SOCK= 
    fi 
    done 
    eval `ssh-agent -s` # <-- How to keep ssh-agent alive when logout? 
    ssh-add ~/.ssh/id_rsa 
} 
ssh-reagent 

Répondre

0

Non! Mauvaise approche! Au lieu de cela, il suffit de faire attention vous démarrez l'agent ssh. Vous ne devriez pas le faire pour chaque shell que vous démarrez, mais seulement une fois pour le shell de connexion. Celui-ci engendre tous les autres processus d'un utilisateur, de sorte que l'agent sera disponible dans tous jusqu'à ce que l'utilisateur se déconnecte à nouveau.

endroits typiques sont:

  • /etc/X11/xdm/sys.xsession ou ~/.xsession pour une connexion graphique
  • /etc/profile, ~/.profile ou ~/.bash_profile pour un shell de connexion normale

Cela dépend un peu de votre distribution et votre personnel préférences.

+0

Désolé pour la confusion. En fait, mon code provient du script de ré-agent. Laissez-moi montrer le tout dans mon message. – ShenLei

+0

Désolé, mais le script que vous avez ajouté à la question est _not_ le script ssh-reagent, c'est une version modifiée. L'original vient sans l'appel de 'ssh-agent', où vous présentez le problème. Ma réponse s'applique toujours, je dirais. Tout comme la documentation l'explique: l'agent ssh devrait déjà exister, seulement alors vous pouvez vous y attacher à nouveau. Renouveler une nouvelle à chaque fois n'a tout simplement aucun sens. – arkascha

+0

Oh, je vois la différence. Je devrais mettre la ligne ssh-agent dans ~/.bash_profile et mettre ssh-reagent dans ~/.bashrc. Ai-je raison? – ShenLei