Depuis que j'ai installé Ubuntu Desktop 16.10 Gnome (auparavant, j'avais 15.10), le fait que, chaque fois que j'essaie d'ajouter une clé SSH ou d'importer une clé GPG à l'aide d'un terminal, une fenêtre contextuelle GUI apparaît et demande le mot de passe.
Avec SSH, je résous ce problème en démarrant un nouvel agent sur le terminal, puis en essayant d’ajouter la clé. Et enfin, il me demande la phrase secrète dans TTY ou pas une interface graphique.
Avec GPG, je viens juste de commencer à l’apprendre, alors je ne sais pas trop comment contourner le problème.
Est-il possible de désactiver cette option et de leur demander de saisir la phrase secrète dans TTY lors d'un accès depuis TTY?
J'ai lu les réponses dans this question et il s'agit d'ubuntu 12.04 et les deux premières réponses n'ont pas fonctionné pour moi.
SSH et GPG utilisent des "agents" pour mettre en cache les clés privées déchiffrées, afin que les utilisateurs ne soient pas obligés de saisir leurs phrases de passe à tout moment. Par défaut, ils utilisent le programme pinentry
à cette fin.
Avant de continuer, assurons-nous qu'un exemple de programme de saisie de code confidentiel par ligne de commande est disponible sur votre système. Dans le référentiel Ubuntu, nous avons pinentry-curses
(depuis toujours) et pinentry-tty
(depuis Xenial) mais ils ne sont pas installés par défaut. Vous pouvez l'obtenir à partir du package du même nom:
Sudo apt install pinentry-curses
Vous pouvez ajuster le programme utilisé pour la saisie des broches de l'une des manières suivantes:
(par utilisateur) Définition de pinentry-program
dans votre ~/.gnupg/gpg-agent.conf
dans un programme d’entrée de code confidentiel de ligne de commande, e. g.:
pinentry-program /usr/bin/pinentry-curses
Vous devez soit redémarrer l'agent, soit le faire recharger sa configuration:
gpg-connect-agent <<< RELOADAGENT
(à l’échelle du système) Dans toutes les distributions Linux courantes, y compris Ubuntu, le programme pinentry
par défaut est en fait un lien symbolique vers le programme de saisie des broches. La cible de ce lien symbolique est gérée par le système update-alternatives
. Vous pouvez l’utiliser pour changer la cible du lien en un programme de saisie des broches en ligne de commande:
Sudo update-alternatives --config pinentry
L'inconvénient de ces deux méthodes est que vous ne pourrez pas utiliser une entrée de code confidentiel de ligne de commande si SSH ou GPG sont appelés à partir d'un programme exécuté sans terminal, e. g. un client SFTP graphique ou un agent d'utilisateur de messagerie. Une meilleure solution consiste à utiliser le programme de saisie graphique des broches uniquement lorsqu'un serveur X est disponible et qu'un terminal est un disponible. Pour ce faire, nous avons besoin d’un petit script qui analyse l’environnement avant de passer au programme de saisie des broches de droite.
Supposons que nous ayons le script shell exécutable suivant à ~/.local/bin/my-smart-pinentry
:
#!/bin/sh
set -eu
# Configuration -- adjust these to your liking
PINENTRY_TERMINAL='/usr/bin/pinentry-curses'
PINENTRY_X11='/usr/bin/pinentry-x11'
# Action happens below!
if [ -n "${DISPLAY-}" -a -z "${TERM-}" ]; then
exec "$PINENTRY_X11" "$@"
else
exec "$PINENTRY_TERMINAL" "$@"
fi
Pour utiliser ce wrapper comme entrée de programme "programme", vous pouvez utiliser la méthode par utilisateur mentionnée ci-dessus. Vous pouvez également l'ajouter à la base de données update-alternatives
.