Better support GPG migrations
After yet another unpleasant experience starting up GPG on a new system, I decided to encode my learnings and mistakes as aliases, functions, scripts, hoping to protect my future me from myself. Fingers crossed!
This commit is contained in:
parent
e774ce5d1c
commit
eaf42b68c2
5 changed files with 64 additions and 21 deletions
44
README.md
44
README.md
|
@ -58,15 +58,12 @@ $ DOTFILES="$(pwd)" make install
|
|||
|
||||
# SSHFS
|
||||
|
||||
TODO: add explanation about `unison`, `rsync`, etc.
|
||||
|
||||
SSHFS enables seamless file transfers from your local machine to a remote
|
||||
machine.
|
||||
|
||||
To install, run:
|
||||
|
||||
```bash
|
||||
$ brew cask install osxfuse
|
||||
$ brew install sshfs
|
||||
```
|
||||
## Usage
|
||||
|
||||
Assuming your remote machine is configured in your `~/.ssh/config` (see above),
|
||||
you can mount your remote machine's home directory on your local machine like
|
||||
|
@ -78,34 +75,39 @@ $ sshfs ec2:/home/ubuntu ~/ec2 -o reconnect,follow_symlinks
|
|||
```
|
||||
|
||||
Now your remote machine's home directory can be accessed using the `~/ec2`
|
||||
directory. This directory can be transparently treated as if it were an ordinary
|
||||
local directory. To illustrate how easy it is to use, let's install `Vundle`, a
|
||||
Vim package manager, on our remote machine.
|
||||
directory. This directory can be treated as if it were an ordinary local
|
||||
directory. To illustrate how easy it is to use, let's install `Vundle` onto our
|
||||
remote machine.
|
||||
|
||||
```bash
|
||||
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/ec2/.vim/bundle/Vundle.vim
|
||||
```
|
||||
|
||||
Voila! We now have `Vundle` installed on our ec2 instance without needing to SSH
|
||||
into that machine ourselves. That's all there is to it.
|
||||
Voila! We now have `Vundle` installed on our ec2 instance without needing to
|
||||
manually SSH into that machine.
|
||||
|
||||
|
||||
# GnuPG
|
||||
|
||||
1. Download public key from keyserver. `gpg --receive-keys [KEY_ID]`
|
||||
2. Transfer backed-up private key information from secure disk
|
||||
3. Create `[E]` encrypting and `[S]` signing subkeys for personal computer
|
||||
|
||||
## Commentary
|
||||
|
||||
By default `gpg2` interfaces with `gpg-agent`. `gpg` does not unless
|
||||
`--use-agent` is specified. I suggest using `gpg2`, but if you must use `gpg`,
|
||||
add the following entry to `~/.gnupg/gpg.conf`:
|
||||
Entering a new system?
|
||||
|
||||
```bash
|
||||
$ ./configs/shared/gpg/.gnupg/import.sh path/to/directory
|
||||
```
|
||||
use-agent
|
||||
|
||||
Leaving an old system? TODO: create a job that runs this periodically.
|
||||
|
||||
```bash
|
||||
$ ./configs/shared/gpg/.gnupg/export.sh [directory]
|
||||
```
|
||||
|
||||
## Reference
|
||||
|
||||
- sec: secret key
|
||||
- pub: public key
|
||||
- ssb: secret sub-key
|
||||
- sub: public sub-key
|
||||
|
||||
## GnuPG + Git
|
||||
|
||||
1. Register newly created `[S]` signing subkey as `signingkey`
|
||||
|
|
21
configs/shared/gpg/.gnupg/export.sh
Executable file
21
configs/shared/gpg/.gnupg/export.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
# Run this script to export all the information required to transport your GPG
|
||||
# information.
|
||||
# Usage: ./export.sh [directory]
|
||||
# TODO: run this periodically as a job.
|
||||
|
||||
destination="${1:-$(mktemp -d)}"
|
||||
|
||||
if [ ! -d "$destination" ]; then
|
||||
echo "$destination does not exist. Creating it..."
|
||||
mkdir -p "$destination"
|
||||
fi
|
||||
|
||||
gpg --armor --export >"$destination/public.asc"
|
||||
gpg --armor --export-secret-keys >"$destination/secret.asc"
|
||||
gpg --armor --export-ownertrust >"$destination/ownertrust.txt"
|
||||
|
||||
echo $(realpath "$destination")
|
13
configs/shared/gpg/.gnupg/import.sh
Normal file
13
configs/shared/gpg/.gnupg/import.sh
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
# Run this script to import all of the information exported by `export.sh`.
|
||||
# Usage: ./export.sh path/to/directory
|
||||
|
||||
gpg --import "$1/public.asc"
|
||||
gpg --import "$1/secret.asc"
|
||||
gpg --import-ownertrust "$1/ownertrust.txt"
|
||||
|
||||
# Run this at the end to output some verification
|
||||
gpg --list-keys
|
|
@ -49,6 +49,12 @@ alias mdg="mix deps.get"
|
|||
alias mdu="mix deps.update"
|
||||
alias mdup="mix docker.up"
|
||||
|
||||
# GPG
|
||||
alias gpged='gpg --edit-key wpcarro@gmail.com'
|
||||
alias gpge='gpg --encrypt'
|
||||
alias gpgd='gpg --decrypt'
|
||||
alias gpgls='gpg --list-keys'
|
||||
|
||||
# Git
|
||||
alias g="git"
|
||||
alias glp='git log --graph --pretty=format:"%Cred%h%Creset -%Cblue %an %Creset - %C(yellow)%d%Creset %s %Cgreen(%cr)%Creset" --abbrev-commit --date=relative'
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
export TERMINAL=urxvtc
|
||||
export EDITOR=emacsclient
|
||||
export ALTERNATE_EDITOR=nvim
|
||||
export GPG_TTY=$(tty) # "It is important that this environment variable always reflects the output of the tty command". Source: https://gnupg.org/documentation/manuals/gnupg-devel/Invoking-GPG_002dAGENT.html
|
||||
|
||||
BROWSER=google-chrome
|
||||
NIXIFY="$HOME/programming/nixify"
|
||||
|
|
Loading…
Reference in a new issue