cijoe seeks to be minimally intrusive, however, it does require the following to operate.
On your local system / dev box, ensure that you have:
Python 3 (>= 3.9)
pip3(matching Python >= 3.9)
That is, cli-tools installed via
pipxare readily available via
This is usually enabled by running:
python3 -m pipx ensurepath.
A SSH key-pair
The default filenames for a key-pair generated by
ssh-keygenare private key (
id_rsa) and the public-key (
An SSH client, and key-based authorization providing unprompted login from your dev box into your test-target.
Check that you have the required versions by running the following on your dev box:
python3 --version pip3 --version
On the remote end / test-target(s) you need:
An account to log into
A running SSH server
Providing remote login using your account from your dev box
The SSH server configured to allow key-based authorization for your account and keys setup to provide unprompted login
cijoe relies on SSH in order to use a remote test-target. To assist with the SSH setup then SSH Setup (required) provides a setup guide for unprompted login and verifying that the setup is ready to use with cijoe.
cjioe can run “locally”, that is, your dev box and test-target is the same machine. However, since most system development involves fiddling with the OS kernel, drivers, running destructive tests, and in general affect the test-target in ways that cause system panics and data-loss then the default assumption is that the test-target is another box accessible remotely via SSH.
SSH Setup (required)¶
SSH to run commands remotely. This section provides a couple
of setup notes which makes it a pleasant experience. Start with setting up
Unprompted Login, without it then each command executed will prompt you for
login which is counter-productive. In case you need to execute commands as
root on your test-target then you need to change your SSH daemon
configuration, see SSH as root for that.
Lastly, if you want to have remote access to your test-target file-system,
then sshfs (optional) provides an easy way of doing that using the
setup. You can of course also use it the other way around, e.g. have your
test-target mount your dev box.
The setup instructions provided here is primarily aimed at Linux/FreeBSD/MacOSX like systems. For an equivalent setup-guide and description of using OpenSSH client/server on Windows then see Microsoft Docs - OpenSSH in Windows.
Here is what we will do:
SSHkey-pair (private and public keys)
Add the private-key to your SSH-agent
Deploy the public-key to the target
Create a target configuration
Check the target configuration
Generate a Key-Pair¶
ssh-keygen -P "" -f $HOME/.ssh/cijoe.key
This will produce the following key-pair:
cijoe.key # This is your private key cijoe.key.pub # This is your public
Add the key to the ssh-agent:
Using an SSH-agent is convenient for keys that have passphrases, as you only have to provide the passphrase once, when you add the key to the agent, instead of each time they key is utilized.
Deploy the public-key¶
Deploy the public-key to remote host
ssh-copy-id -i $HOME/.ssh/cijoe.key.pub hostname
This is the last time you will be prompted for login information when
hostname as your user.
SSH as root¶
The default configuration of
sshd does not permit login using the
root user. Thus, in case you need to ssh into the remote target using
root then you need to change the
ssh daemon configuration.
On the target, edit:
/etc/ssh/sshd_config, changing the
Then reload the
sudo service ssh restart
It should now be ready for running
ssh-copy-id as described above.
The Secure-SHell File-System is a libfuse-based user space file-system which provides a very easy way to mount a remote file-system via SSH. Install it using your package-manager, e.g.:
# Install sshfs sudo apt install sshfs # Change fuse-configuration; enable user_allow_other echo 'user_allow_other' | sudo tee -a /etc/fuse.conf # Create a directory for mountpoints mkdir $HOME/sshfs
For the specific host that you have deployed keys to, create a mountpoint:
Mount it using:
sudo sshfs \ -o allow_other,default_permissions,IdentityFile=$HOME/.ssh/cijoe.key \ user@hostname:/ $HOME/sshfs/testbox
And unmount using:
sudo umount $HOME/sshfs/testbox