gpg-agent can be used instead of ssh-agent to authenticate
against an SSH server, but in order to do so the GPG_TTY and
TERM environment variables need to be passed through.
For obvious reasons, we avoid doing that when no_tty=1 is found
in the connection URI.
https://bugs.debian.org/843863
https://gitlab.com/libvirt/libvirt/-/merge_requests/290
Thanks: Guilhem Moulin <guilhem(a)guilhem.org>
Thanks: Kunwu Chan <chentao(a)kylinos.cn>
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
src/rpc/virnetsocket.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
index b58f7a6b8f..151077c2dd 100644
--- a/src/rpc/virnetsocket.c
+++ b/src/rpc/virnetsocket.c
@@ -843,6 +843,11 @@ int virNetSocketNewConnectSSH(const char *nodename,
virCommandAddEnvPass(cmd, "OPENSSL_CONF");
virCommandAddEnvPass(cmd, "DISPLAY");
virCommandAddEnvPass(cmd, "XAUTHORITY");
+ if (!noTTY) {
+ /* Needed for gpg-agent's curses-based authentication prompt */
+ virCommandAddEnvPass(cmd, "GPG_TTY");
+ virCommandAddEnvPass(cmd, "TERM");
+ }
virCommandClearCaps(cmd);
if (service)
--
2.41.0