[pkg-gnupg-maint] Bug#834368: gpg-agent's ssh-agent functionality
brian m. carlson
sandals at crustytoothpaste.net
Wed Aug 31 01:44:43 UTC 2016
On Tue, Aug 30, 2016 at 02:14:12AM -0400, Daniel Kahn Gillmor wrote:
> On Mon 2016-08-29 21:59:30 -0400, brian m. carlson wrote:
> > genre ok % gpg-connect-agent 'getinfo std_startup_env' /bye
> > OK
>
> interesting that this is empty for you. I'm assuming that your agent is
> started as a systemd user service, right?
>
> that is, can you show me:
>
> systemctl --user status gpg-agent
> gpg-connect-agent 'getinfo pid' /bye
>
> To verify that we're seeing the same pid?
Yup. Both show the same PID.
> > # Saving a passphrase here makes this work automatically when run for a
> > # second time.
> > genre ok % env -i DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS pinentry <<EOF
> > option allow-external-password-cache
> > setkeyinfo testkey-for-pinentry
> > getpin
> > EOF
> >
> > OK Pleased to meet you
> > OK
> > OK
> > D 123456
> > OK
>
> I'm assuming that the second time here produces an "S
> PASSWORD_FROM_CACHE" status line as well, right?
Yes, there is.
> So, if you do:
>
> gpg-connect-agent updatestartuptty /bye
>
> and then:
>
> gpg-connect-agent 'getinfo std_startup_env' /bye
>
> do you see some results?
I see output after this, but my SSH agent still doesn't work:
genre ok % gpg-connect-agent updatestartuptty /bye
OK
genre ok % gpg-connect-agent 'getinfo std_startup_env' /bye
D GPG_TTY=/dev/pts/19
D TERM=screen-256color
D DISPLAY=:0
D XAUTHORITY=/home/bmc/.Xauthority
D DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-cuRTQOMM9V,guid=13a091ac51e469798129363057c4e491
OK
genre ok % git push def HEAD
sign_and_send_pubkey: signing failed: agent refused operation
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
> > I don't have dbus-user-session installed.
> >
> > Based on the description of the package, I don't think I want it
> > installed, either.
>
> You are trying to use gpg-agent with your login session as ssh-agent,
> and you want gpg-agent to be able to talk to the gnome-keyring part of
> your login session, which is done over dbus.
>
> AIUI, you also want gpg-agent to be started when you need it for ssh.
>
> you don't say why you don't want dbus-user-session installed -- do you
> want multiple X11 sessions to run concurretly that are isolated from one
> another?
I want my TTY sessions to be completely isolated from my X11 session.
If I'm logging into a non-X11 session, my system is in a bad state and
I'm trying to fix it. Shared state is not helpful there, and I
certainly don't want D-Bus involved at all in a TTY session.
Also, philosophically, init should start and stop services, not manage
IPC, run cron jobs, handle NTP, or other unrelated tasks.
> If you don't want or need multiple X11 sessions to run separately from
> each other, I see two options here:
>
> a) if you don't care about gpg-agent being shut down when you log out,
> and you don't mind having gpg-agent running well before need it,
> then you should disable the systemd user service, and ensure that
> your X11 login process invokes:
>
> gpg-connect-agent updatestartuptty /bye
>
> b) install dbus-user-session
Can we have gpg-agent ship an entry in /etc/xdg/autostart that starts it
automatically (e.g. gpg-connect-agent /bye)? That seems to be the most
robust solution. The systemd solution seems too brittle. Specifically,
we want gpg-agent to inherit all of the user's environment, and systemd
wants desperately to isolate processes from it.
This would work equally well with the dbus-user-session model, and a lot
better for the single-X11-session model.
What I'm doing now is this in my .zshenv (which is revolting and clearly
the wrong place, but it works):
setup_ssh_agent () {
local i
is_ssh_session && return
grep enable-ssh-support ~/.gnupg/gpg-agent.conf 2>/dev/null | \
grep -qsv '^#' || return
gpg-connect-agent /bye >/dev/null 2>&1
for i in "$(gpgconf --list-dirs | grep '^agent-socket:' | cut -d: -f2)" \
"$HOME/.gnupg/S.gpg-agent" \
"/run/user/$(id -u)/gnupg/S.gpg-agent"
do
[[ -S "$i.ssh" ]] && export SSH_AUTH_SOCK="$i.ssh"
done
}
My .Xsession invokes (roughly) zsh -c mate-session.
--
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | https://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: https://keybase.io/bk2204
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-gnupg-maint/attachments/20160831/4a96e8be/attachment-0001.sig>
More information about the pkg-gnupg-maint
mailing list