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.
- Make sure you have a GitHub account. If you don't, create one at github.com.
- Add your SSH public key to GitHub if you haven't already (GitHub Settings → SSH and GPG keys).
- 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. - 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
| Path | What'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.