Skip to content

SSH access to the comma device

How to SSH into your comma 3 or 3X running NAP, and what's where on the filesystem.

Updated June 11, 2026


SSH gives you a root shell on the comma device. Most owners never need it — the NAP settings panel handles configuration, and updates happen automatically. But if you're debugging, writing code, or just curious what's running, SSH is how you get in.

Setting up SSH keys

The comma device authenticates via your GitHub SSH keys. There's no password login.

  1. Make sure you have a GitHub account. If you don't, create one at github.com.
  2. Add your SSH public key to GitHub if you haven't already (GitHub Settings → SSH and GPG keys).
  3. On the comma device, go to Settings → Network → SSH Keys and enter your GitHub username. The device fetches your public keys from github.com/<username>.keys.
  4. Also make sure Settings → Network → Enable SSH is turned on.

The device only accepts keys tied to the GitHub account you entered — not a hardcoded key file, not a password.

Connecting

The device listens on port 8022, not the standard 22. Connect over WiFi; both your computer and the device need to be on the same network.

Find the device's IP address at Settings → Network (it shows the current WiFi IP).

ssh root@<device IP> -p 8022

If you've added a ~/.ssh/config entry for convenience:

Host comma
    HostName <device IP>
    Port 8022
    User root
    IdentityFile ~/.ssh/id_ed25519
    StrictHostKeyChecking no

Then just ssh comma. If your router supports DHCP reservations, assign the device a fixed IP so the address doesn't change.

What's on the filesystem

PathWhat's there
/data/openpilot/NAP's openpilot install — the Python car port, engagement logic, safety config
/data/openpilot/opendbc_repo/opendbc fork with the pre-AP car port, DBC, and panda safety mode
/data/params/d/Persistent settings — NAP config, dongle ID, SSH keys, etc.
/data/media/0/realdata/Drive segments (video + CAN logs) waiting to upload
/data/logs/System and process logs
/tmp/Runtime state, sockets, crash dumps

The main process is selfdrive/manager/manager.py — it's the supervisor that starts and monitors all the openpilot subprocesses. You can watch what's running with ps aux | grep python.

Before you edit anything

NAP uses the nap-release branch and keeps itself up to date automatically. Any file you edit under /data/openpilot/ will be overwritten the next time an update pulls. If you're experimenting, either:

  • Work on a local development machine and push to a branch you test from (see Contributing), or
  • Accept that your edits are temporary and document what you changed.

The params at /data/params/d/ survive updates — they're outside the openpilot git tree. Settings you configure in the NAP panel are stored there.

Checking logs

If the device is showing an alert or behaving unexpectedly, the most useful place to start is the manager log:

cat /data/logs/manager.log

For realtime output from the running processes, tmux is available on the device and most openpilot processes log to stdout when you run them manually.