J'ai créé un nouveau compte utilisateur pour un ami sur Kubuntu 12.04. Quand il utilise, ssh
il obtient cette erreur:
Impossible d'ouvrir une connexion à votre agent d'authentification
Nous exécutons ssh
certains scripts bash.
Après avoir regardé la grande variété de choses qui peuvent conduire à cette erreur, je suis tombé sur cette solution:
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa
Il peut ensuite exécuter les ssh
commandes (et les scripts bash) comme prévu.
Avant d'exécuter ces deux commandes, les variables env ne sont pas définies dans un terminal:
$ echo $SSH_AGENT_PID
$ echo $SSH_AUTH_SOCK
$
Après avoir exécuté les commandes, les variables env sont définies comme prévu. Cependant, ils ne restent pas définis (par exemple, dans un autre shell ou après le redémarrage).
Je veux savoir comment configurer son ordinateur pour qu'il n'ait pas à exécuter ces deux commandes pour définir les variables env. Je n'ai pas besoin de les exécuter sur mon ordinateur (jamais). Jusqu'à présent, je ne vois pas ce qui est différent entre nos machines.
Je vois ces informations dans la page de manuel, mais cela ne me dit pas comment Ubuntu configure normalement l'agent automatiquement ou ce qui se passe sur la machine de mon ami afin que cela ne fonctionne pas pour lui.
Il existe deux façons principales de configurer un agent: La première est que l'agent démarre une nouvelle sous-commande dans laquelle certaines variables d'environnement sont exportées, par exemple ssh-agent xterm &. La seconde est que l'agent imprime les commandes shell nécessaires (la syntaxe sh (1) ou csh (1) peut être générée) qui peut être évitée dans le shell appelant, par exemple eval
ssh-agent -s
pour les shells de type Bourne tels que sh (1) ou ksh (1) et evalssh-agent -c
pour csh (1) et dérivés.
Après l'installation acct
et le redémarrage, voici la sortie de lastcomm
:
ssh-agent F newuser __ 0.12 secs Wed Aug 7 11:02
ssh-agent F newuser __ 0.00 secs Wed Aug 7 20:34
ssh-agent F newuser __ 0.02 secs Wed Aug 7 20:02
ssh-agent F newuser __ 0.01 secs Thu Aug 8 12:39
ssh-agent F newuser __ 0.02 secs Thu Aug 8 07:45
Depuis la page de manuel:
F - commande exécutée après un fork mais sans un exec suivant
Je ne sais pas si c'est important.
ssh-agent
est normalement démarré à partir de/etc/X11/Xsession.d/90x11-common_ssh-agent
. Cela peut être supprimé en supprimantuse-ssh-agent
de/etc/X11/Xsession
. Ces fichiers sont-ils corrects? L'agent est-il démarré puis tué ou n'a-t-il jamais commencé? (Installezacct
et exécutezlastcomm
après vous être connecté pour voir quels programmes ont été lancés.)X11/Xsession.options:use-ssh-agent
etX11/Xsession.d/90x11-common_ssh-agent:SSHAGENT=/usr/bin/ssh-agent
. J'essaieraiacct
etlastcomm
ensuite. Mercilastcomm
pour une session complète, pas seulement lessh-agent
processus. Il s'agit de voir dans quel ordre les différents programmes sont lancés.Réponses:
Vous avez mentionné que votre utilisateur se
ssh
connecte et ne se connecte pas localement. Ainsi , leuse-ssh-agent
en/etc/X11/Xsession.options
est un leurre: il ne sera pas exécuté sur les sessions SSH, uniquement lors de la connexion à un ordinateur de bureau GUI X11 localement (ou en utilisant une session de X11 virtuel comme sur VNC ou RDP).Au lieu de cela, vous devez vérifier si
libpam-ssh
est installé sur l'un ou l'autre système. Il peut être configuré pour authentifier un utilisateur à l'aide de phrases secrètes de clé privée SSH, mais cela est facultatif et vous devrez placer spécifiquement la clé~/.ssh/login-keys.d/
pour cette fonctionnalité.Son autre fonctionnalité, cependant, consiste à démarrer automatiquement un agent SSH sur n'importe quelle session de connexion et à ajouter automatiquement des clés privées SSH à l'agent si leur phrase secrète est la même que le mot de passe de connexion de l'utilisateur. Je pense que cela pourrait être la cause du comportement différent entre vos systèmes.
la source
Pour le
construire pour fonctionner lorsqu'il est placé dans un «script de démarrage», votre session, et finalement le terminal où vous attendez l'environnement, doivent être des descendants (par
fork
etexec
) de ce script. La raison en est que la sortie dessh-agent -s
, lorsqu'elle est évaluée, définit les variables d'environnement dans l'appel du shelleval
. Là-bas, ils peuvent être transmis et perdus en cours de route.Donc, si
ssh-agent
est exécuté par le script A quelque part lors de la connexion, mais que le terminal B dans lequel vous démarrez votre script shell n'est pas un descendant de A, vous ne pouvez pas voir l'environnement en B.Si vous avez
ssh-agent
démarré en tant quesystemd --user
service, vous devrez peut-être utiliser la convention à la place: ne laissez passsh-agent
spécifier les variables, mais utilisez des connaissances communes lors du démarrage de l'agent et lors du démarrage de la session. Par exemple, mon~/.config/systemd/user/ssh-agent.service
apparence ressemble à ceci:Et dans mon
~/.profile
j'ai la ligneNotez que
%t
dans le premier correspond à${XDG_RUNTIME_DIR}
dans le second.Remarque: je ne suis pas content de cela!
la source
J'ai trouvé la réponse ici:
http://www.bernatchez.net/userauth.html
Sur ubuntu, l'utilitaire ssh-add ne parvient pas à charger les fichiers de certificat. Cela se produit lorsque l'agent est celui implémenté par gnome-keyring. Le correctif consiste à cesser d'utiliser le composant ssh de gnome-keyring. Étant donné que le processus d'initialisation démarre réellement un véritable agent ssh puis lance gnome-keyring-ssh.desktop qui encombre AUTH_SOCKET pour le reprendre, nous pouvons revenir à l'agent ssh d'origine en désactivant gnome-keyring-ssh.desktop.
Désactivez gnome-keyring-ssh.desktop:
Ajoutez la ligne suivante au fichier du bureau et enregistrez-la, puis redémarrez:
la source
Vous avez mentionné que
fonctionne comme vous le souhaitez. Il vous suffit donc de les exécuter au bon moment, dans .bash_profile ou .xsession. Ajoutez des instructions de débogage comme
(date; env|sort) >> /tmp/log
pour vous aider à comprendre exactement quand elles s'exécutent.la source