<--

Some bits & bobs

Here lives some miscellaneous things I reference one or one hundred times and figure they should be gathered somewhere.

WPA Supplicant

Frequently forgotten usage of the wpa_cli tool
> scan
...
<3>CTRL-EVENT-SCAN-RESULTS
> scan_results # run once above event appears
bssid / freq / sig lvl / flags / ssid
...
> add_network
#
> set_network # ssid "network"
> set_network # psk "psswd"
# or if no password:
> set_network # key_mgmt NONE
> enable_network #
> save_config
    

GPG key signing with Git

Sometime ago I spent hours on this. When signing a commit, this error would appear
gpg: skipped "Foo Bar <Foo_Bar@baz>": No secret key[GNUPG:] INV_SGNR 9 Foo Bar <Foo_Bar@baz>[GNUPG:] FAILURE sign 17
gpg: signing failed: No secret key
    
After much searching I came up empty handed. Finally, one thing stood out. The name and email in ~/.gitconfig must match exactly to the name and email associated with the GPG key
$ gpg --list-secret-keys --keyid-format=long
/home/foo/.gnupg/pubring.kbx
-----------------------------
sec   rsa4096/FC53C827D09C7050 2019-03-24 [SC]
      ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
uid                 [ultimate] Foo Bar <Foo_Bar@baz>
ssb   rsa4096/2EE67124D597BB00 2019-03-24 [E]

$ head -n 4 .gitconfig
[user]
        name = Foo Bar
	email = Foo_Bar@baz
	signingkey = FC53C827D09C7050
    

SSH agent for password-less login

I have numerous machines I frequently log in to and from via SSH. Typing in a password every time is tiresome and a password-less key is not an option. A solution is an SSH agent running in the background, which prompts for a password once at log in, and stores it for the duration of the session (until reboot). The following can live in your shell's startup file (e.g. ~/.zshrc)
if [ ! -S ~/.ssh/ssh_auth_sock ]; then
  eval "$(ssh-agent)"
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
ssh-add -l > /dev/null || ssh-add
    
Then, just copy the needed key between machines with ssh-copy-id -i ~/.ssh/id_xxx.pub name@host

Configuration file manager

Across the aforementioned machines, I also have various configuration files that I like to keep track of for the sake of backing them up in case of data loss. I use yadm to achieve this. Mostly for it's ease of use (yadm is quite simply an alias for git) and minimal system footprint, which consists mostly of a git directory living out of sight in ~/.local/share/yadm/repo.git. Since it's just Git under the hood, a standard .gitignore file can be used to ignore which ever files you choose in your home directory. By default, yadm only manages files within your home directory. While not conventional, it can also be used to track system-level files by creating an alias like sysyadm="sudo yadm --yadm-dir /etc/yadm --yadm-data /etc/yadm/data", then used like normal.
# sysyadm init -w /
# sysyadm add foo.conf
# sysyadm commit -m "foo"