Set up SSH
The Docker context is controlled exclusively through SSH, as the
root
user. This requires setting up some keys to allow the pi
user
to access the root
user’s account.
Although you will not need to interact with the root
user’s shell
directly, the pi
user will be granted full access to root
via SSH.
graph LR; subgraph Raspberry Pi pi[User: pi] root[User: root] pi -->|Docker SSH context to root@localhost| root end RemoteComputer[Personal Workstation] -->|ssh pi@pi| pi
SSH is used here almost like sudo
. The pi
user should be treated
with the same respect as the root
user, as it will be granted full
root
access through SSH (to localhost).
Create a new SSH key
You need to create a new SSH key for the pi
user.
To connect to the Docker context requires that your SSH key be already decrypted.
There’s only two ways to do that:
- Create an unencrypted SSH key, so that no passphrase is ever required.
-or-
- Set up an ssh-agent to decrypt and load the unencrypted key into resident memory, so that your key can be used without requiring a passphrase.
For the sake of convenience, this guide will use the first method, and
create a new unencrypted SSH key, living in the pi user’s home
directory: /home/pi/.ssh/id_ed25519
. The security of this key
depends upon the physical and network security of the device
(including SD card). Any user gaining entry to the pi
user’s account
will have access to the key, and no passphrase is required to use the
key.
If you wish to enhance the security of your SSH key, please read the Arch Wiki article on SSH keys, which covers generating secure SSH keys, setting a passphrase, and setting up an ssh-agent with Keychain.
You may also protect the integrity of the SD card (at rest) with full disk encryption and remote unlock via SSH.
Create a new SSH key (without a passphrase):
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
Authorize the key of the pi user to connect as root
All interaction with Docker is done over SSH as the root
user, so
for the pi
user to control Docker, they need to be able to SSH to
localhost
as the root
user.
Add the pi
user’s key to the root user’s
/root/.ssh/authorized_keys
file:
cat ~/.ssh/id_ed25519.pub | sudo tee -a /root/.ssh/authorized_keys
Create a config named pi
in your ~/.ssh/config
:
cat <<EOF >> ~/.ssh/config
Host pi
User root
Hostname localhost
ControlMaster auto
ControlPersist yes
ControlPath /tmp/ssh-%u-%r@%h:%p
EOF
Test the connection is working:
ssh pi whoami
Accept the key fingerprint it offers:
The authenticity of host 'localhost (::1)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
If it worked, you should see the output of whoami
which should print
the username root
(which is the user configured by SSH).