Protonmail-Bridge CLI
Install Protonmail-Bridge on Ubuntu 22.04 with pass and gpg
Installing Protonmail-Bridge
Follow this instructions from Protonmail. I would suggest to alter the last command to
In addition we need pass
, screen
and gpg
.
Creating a seperate user for the Bridge
you can run the Bridge with your user, or with a seperate user. for example a user called protonmail
.
the user needs a home directory.
Setup pass and gpg
We need a key without a password and we are gonna create it with gpg. Somehow it doesnt work if we use script /dev/null
or just simply dont type in a password at the prompt. Thats why we use in this case --passphrase ''
.
Answer the questions like this:
>>> 1 #for RSA
>>> 4096 #for the keysize
>>> 0 #means key doesnt expire
>>> Real name: Your Name
>>> Email address: [email protected]
>>> Comment: Protonmail-Bridge-Key
>>> O #for Okay
#your need this part of the key for the next steps
...
gpg: key 871811C48A78BB8D marked as ultimately trusted
gpg: revocation certificate stored as '/home/protonmail/.gnupg/openpgp-revocs.d/4432E57B616ABCF257442B9F960900B39B69AA9F.rev'
public and secret key created and signed.
...
871811C48A78BB8D
.
Start and setup the Bridge
Now the Bridge can be started and we can add a account.
protonmail-bridge --cli
>>>> add #add your protonmail account to bridge
>>>> #enter your protonmail account email address
>>>> #enter your protonmail account password
>>>> list #list configured accounts
>>>> info #list SMTP credentials for configuring any local SMTP compatible service
>>>> help #get familiarized with the bridge options
>>>> exit #exit the bridge console which stops the local SMTP server created
Start the Bridge via script and systemd-service
In order to get the Bridge started even after a reboot, we create a script which starts the Bridge in screen
and can be controlled via systemd.
Stop/Start Script
sudo vim /usr/local/bin/protonmail.sh
...
#!/bin/bash
case "$1" in
start)
#will create an screen in detached mode (background) with name "protonmail"
screen -S protonmail -dm protonmail-bridge --cli
echo "Service started."
;;
status)
#that only lists the current user's screens with the name protonmail
result=$(screen -list | grep "[0-9].protonmail")
if [ $? == 0 ]; then
echo "Protonmail bridge service is ON."
else
echo "Protonmail bridge service is OFF."
fi
;;
stop)
#Will quit a screen called "protonmail" and therefore terminate the running protonmail-bridge process
screen -S protonmail -X quit
echo "Service stopped."
;;
*)
echo "Unknown command: $1"
exit 1
;;
esac
...
sudo chown protonmail:protonmail /usr/local/bin/protonmail.sh
sudo chmod +x /usr/local/bin/protonmail.sh
systemd-service
sudo vim /usr/lib/systemd/system/protonmailbridge.service
...
[Unit]
Description=Service to run the Protonmail bridge client
After=network.target
[Service]
Type=oneshot
User=protonmail
ExecStart=/usr/local/bin/protonmail.sh start
ExecStop=/usr/local/bin/protonmail.sh stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
...
sudo systemctl enable --now protonmailbridge.service
Check the status
check the Bridge via systemd-service, the script and via the open ports.
sudo -u protonmail /usr/local/bin/protonmail.sh status
...
Protonmail bridge service is ON.
...
sudo systemctl status protonmailbridge.service
...
protonmailbridge.service - Service to run the Protonmail bridge client
Loaded: loaded (/lib/systemd/system/protonmailbridge.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2023-03-18 01:44:26 CET; 12h ago
Process: 130372 ExecStart=/usr/local/bin/protonmail.sh start (code=exited, status=0/SUCCESS)
Main PID: 130372 (code=exited, status=0/SUCCESS)
Tasks: 25 (limit: 28554)
Memory: 69.4M
CPU: 24.805s
CGroup: /system.slice/protnmailbridge.service
├─130374 SCREEN -S protonmail -dm protonmail-bridge --cli
├─130376 protonmail-bridge --cli
└─130419 /usr/lib/protonmail/bridge/bridge --cli --launcher /usr/lib/protonmail/brid>
...
sudo ss -altenpo | grep bridge
...
LISTEN 0 4096 127.0.0.1:1042 0.0.0.0:* users:(("bridge",pid=130419,fd=8)) uid:1003 ino:1004774 sk:6 cgroup:/system.slice/protonmailbridge.service <->
LISTEN 0 4096 127.0.0.1:1143 0.0.0.0:* users:(("bridge",pid=130419,fd=9)) uid:1003 ino:1004775 sk:8 cgroup:/system.slice/protonmailbridge.service <->
LISTEN 0 4096 127.0.0.1:1025 0.0.0.0:* users:(("bridge",pid=130419,fd=10)) uid:1003 ino:1004776 sk:a cgroup:/system.slice/protonmailbridge.service <->
...