This post will go over setting up Split GPG, then setting up Split SSH with the same PGP keys, emulating what you can do with a PGP smartcard on QubesOS.
## Split GPG
Follow the official Qubes OS [documentation](https://www.qubes-os.org/doc/split-gpg/) to set this up.
Note that if you already have a PGP key with a passphrase, you can remove it by installing `pinentry-gtk` to `vault`'s TemplateVM, then do `gpg2 --edit-key <key_id>` and `passwd` to set an empty passphrase. The default non-graphical pinentry will just make an infinite loop and will not allow you to set an empty passphrase.
## Split SSH
This part is based on the Qubes Community's [guide](https://github.com/Qubes-Community/Contents/blob/master/docs/configuration/split-ssh.md); however, I will deviate from it to use the PGP keys for SSH instead of generating a new key pair.
In `dom0`:
- Create `/etc/qubes-rpc/policy/qubes.SshAgent` with `@anyvm @anyvm ask,default_target=vault` as the content. Since the keys ar not passphrase protected, you should **not** set the policy to allow.
In `vault` AppVM:
- Add `enable-ssh-support` to the end of `~/.gnupg/gpg-agent.conf`
In `vault`'s TemplateVM:
- Create `/etc/qubes-rpc/qubes.SshAgent` with the following content:
```bash
#!/bin/sh
# Qubes App Split SSH Script
# Activate GPG Agent and set the correct SSH socket
- Restart `ssh-client` and confirm if it's working with `ssh-add -L`.
### Limitations:
A malicious `ssh-client` AppVM can hold onto the ssh-agent connection for more than one use until it is shut down. While your private key is protected, a malicious actor with access to the AppVM can still abuse the ssh-agent to log into your servers.