1

I am using Ngrok for having remote SSH access to my home computer without setting up port forwarding and stuff like that. After messing around with it for a little, I decided to set it up to start the client whenever the computer boots, just like the SSH client itself. It should be as easy as executing the following command:

/usr/bin/ngrok start --config=/opt/ngrok/ngrok-config.yml ssh &

However, I can't find a way to execute it before entering my username and password. I have tried using systemd services, I have tried using cronjobs and I have tried using autostart links in /usr/share/applications and /etc/xdg/autostart, but none of those options has been able to start the program before loging in.

Just to clarify, by "login in" I mean entering my username and password to log into my desktop (GNOME). What I want to do has to happen with just pressing the power button on my PC, without me having to interact with it, because I want to be able to remotely reboot the PC if needed and still have SSH access to it.

By researching on this same forum I have found out that the @reboot tag for cronjobs is useless for the time being, or so I have read.

I am running Parrot Sec OS 4.11, with a GNOME desktop. Linux Kernel 5.7.0 amd64

The command that I want to execute starts Ngrok's client, and it never exits, so I should have to make it run in the background. How can I have it be executed on the system startup just like the SSH client does?

This is the unit file:

[Unit]
Description=ngrok
Requires=network.target
After=network.target

[Service]
ExecStart=/bin/bash /opt/ngrok/start.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
IgnoreSIGPIPE=true
Restart=always
RestartSec=3
RuntimeDirectoryMode=0755
User=root

[Install]
WantedBy=multi-user.target

When I enable the service, this is printed out:

kolterdyx@kolterdyx-pc:~$ sudo systemctl enable ngrok.service
Created symlink /etc/systemd/system/multi-user.target.wants/ngrok.service → /etc/systemd/system/ngrok.service.

This are the contents of /opt/ngrok/start.sh:

#!/bin/bash
/usr/bin/pkill ngrok #This line ensures that no other ngrok instances are running
/usr/bin/ngrok start --config=/opt/ngrok/ngrok-config.yml ssh

After executing sudo systemctl start ngrok.service and then `sudo journalctl -xe´, this is what I get:

-- Journal begins at Tue 2021-04-13 01:15:26 CEST, ends at Wed 
[...]
ago 04 13:13:18 kolterdyx-pc wpa_supplicant[747]: wlan0: Trying to associate with 44:fb:5a:b2:d6:b4 (SSID='Cachuflos' freq=2462 MHz)
ago 04 13:13:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075598.4562] device (wlan0): supplicant interface state: associating -> associated
ago 04 13:13:18 kolterdyx-pc wpa_supplicant[747]: wlan0: Associated with 44:fb:5a:b2:d6:b4
ago 04 13:13:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075598.4563] device (p2p-dev-wlan0): supplicant management interface state: associating -> associated
ago 04 13:13:18 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
ago 04 13:13:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075598.5465] device (wlan0): supplicant interface state: associated -> 4way_handshake
ago 04 13:13:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075598.5465] device (p2p-dev-wlan0): supplicant management interface state: associated -> 4way_handshake
ago 04 13:13:18 kolterdyx-pc wpa_supplicant[747]: wlan0: WPA: Key negotiation completed with 44:fb:5a:b2:d6:b4 [PTK=CCMP GTK=TKIP]
ago 04 13:13:18 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-CONNECTED - Connection to 44:fb:5a:b2:d6:b4 completed [id=0 id_str=]
ago 04 13:13:18 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-SIGNAL-CHANGE above=0 signal=-50 noise=9999 txrate=1000
ago 04 13:13:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075598.5563] device (wlan0): supplicant interface state: 4way_handshake -> completed
ago 04 13:13:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075598.5566] device (p2p-dev-wlan0): supplicant management interface state: 4way_handshake -> completed
ago 04 13:14:16 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-SIGNAL-CHANGE above=1 signal=-49 noise=9999 txrate=117000
ago 04 13:15:01 kolterdyx-pc CRON[108374]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
ago 04 13:15:01 kolterdyx-pc CRON[108375]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
ago 04 13:15:01 kolterdyx-pc CRON[108374]: pam_unix(cron:session): session closed for user root
ago 04 13:15:07 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-SIGNAL-CHANGE above=1 signal=-50 noise=9999 txrate=104000
ago 04 13:15:10 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-SIGNAL-CHANGE above=1 signal=-49 noise=9999 txrate=117000
ago 04 13:17:01 kolterdyx-pc CRON[108414]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
ago 04 13:17:01 kolterdyx-pc CRON[108415]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
ago 04 13:17:01 kolterdyx-pc CRON[108414]: pam_unix(cron:session): session closed for user root
ago 04 13:18:18 kolterdyx-pc hostapd-wpe[905]: wlan0: STA 44:fb:5a:b2:d6:b4 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
ago 04 13:18:18 kolterdyx-pc kernel: wlan0: deauthenticated from 44:fb:5a:b2:d6:b4 (Reason: 6=CLASS2_FRAME_FROM_NONAUTH_STA)
ago 04 13:18:18 kolterdyx-pc kernel: wlan0: authenticate with 44:fb:5a:b2:d6:b4
ago 04 13:18:18 kolterdyx-pc kernel: wlan0: send auth to 44:fb:5a:b2:d6:b4 (try 1/3)
ago 04 13:18:18 kolterdyx-pc kernel: wlan0: authenticated
ago 04 13:18:18 kolterdyx-pc kernel: wlan0: associate with 44:fb:5a:b2:d6:b4 (try 1/3)
ago 04 13:18:18 kolterdyx-pc kernel: wlan0: RX AssocResp from 44:fb:5a:b2:d6:b4 (capab=0x431 status=0 aid=3)
ago 04 13:18:18 kolterdyx-pc kernel: wlan0: associated
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.6182] device (wlan0): supplicant interface state: completed -> authenticating
ago 04 13:18:18 kolterdyx-pc hostapd-wpe[905]: wlan0: STA 44:fb:5a:b2:d6:b4 IEEE 802.11: disassociated
ago 04 13:18:18 kolterdyx-pc hostapd[905]: wlan0: STA 44:fb:5a:b2:d6:b4 IEEE 802.11: deauthenticated due to inactivity (timer DEAUTH/REMOVE)
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.6183] device (p2p-dev-wlan0): supplicant management interface state: completed -> authenticating
ago 04 13:18:18 kolterdyx-pc hostapd[905]: wlan0: STA 44:fb:5a:b2:d6:b4 IEEE 802.11: disassociated
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.7256] device (wlan0): supplicant interface state: authenticating -> associating
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-DISCONNECTED bssid=44:fb:5a:b2:d6:b4 reason=6
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.7257] device (p2p-dev-wlan0): supplicant management interface state: authenticating -> associating
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: SME: Trying to authenticate with 44:fb:5a:b2:d6:b4 (SSID='Cachuflos' freq=2462 MHz)
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.7426] device (wlan0): supplicant interface state: associating -> associated
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: Trying to associate with 44:fb:5a:b2:d6:b4 (SSID='Cachuflos' freq=2462 MHz)
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.7427] device (p2p-dev-wlan0): supplicant management interface state: associating -> associated
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: Associated with 44:fb:5a:b2:d6:b4
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.8429] device (wlan0): supplicant interface state: associated -> 4way_handshake
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.8429] device (p2p-dev-wlan0): supplicant management interface state: associated -> 4way_handshake
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: WPA: Key negotiation completed with 44:fb:5a:b2:d6:b4 [PTK=CCMP GTK=TKIP]
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-CONNECTED - Connection to 44:fb:5a:b2:d6:b4 completed [id=0 id_str=]
ago 04 13:18:18 kolterdyx-pc wpa_supplicant[747]: wlan0: CTRL-EVENT-SIGNAL-CHANGE above=0 signal=-50 noise=9999 txrate=1000
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.8528] device (wlan0): supplicant interface state: 4way_handshake -> completed
ago 04 13:18:18 kolterdyx-pc NetworkManager[736]: <info>  [1628075898.8533] device (p2p-dev-wlan0): supplicant management interface state: 4way_handshake -> completed
ago 04 13:21:20 kolterdyx-pc sudo[108537]: pam_unix(sudo:auth): authentication failure; logname= uid=1000 euid=0 tty=/dev/pts/0 ruser=kolterdyx rhost=  user=kolterdyx
ago 04 13:21:25 kolterdyx-pc sudo[108537]: kolterdyx : TTY=pts/0 ; PWD=/home/kolterdyx ; USER=root ; COMMAND=/usr/bin/systemctl stop ngrok
ago 04 13:21:25 kolterdyx-pc sudo[108537]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
ago 04 13:21:25 kolterdyx-pc systemd[1]: Stopping ngrok...
░░ Subject: A stop job for unit ngrok.service has begun execution
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ A stop job for unit ngrok.service has begun execution.
░░ 
░░ The job identifier is 11536.
ago 04 13:21:25 kolterdyx-pc systemd[1]: ngrok.service: Succeeded.
░░ Subject: Unit succeeded
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ The unit ngrok.service has successfully entered the 'dead' state.
ago 04 13:21:25 kolterdyx-pc systemd[1]: ngrok.service: Unit process 940 (ngrok) remains running after unit stopped.
ago 04 13:21:25 kolterdyx-pc systemd[1]: Stopped ngrok.
░░ Subject: A stop job for unit ngrok.service has finished
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ A stop job for unit ngrok.service has finished.
░░ 
░░ The job identifier is 11536 and the job result is done.
ago 04 13:21:25 kolterdyx-pc systemd[1]: ngrok.service: Consumed 4min 7.504s CPU time.
░░ Subject: Resources consumed by unit runtime
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ The unit ngrok.service completed and consumed the indicated resources.
ago 04 13:21:25 kolterdyx-pc sudo[108537]: pam_unix(sudo:session): session closed for user root
ago 04 13:21:47 kolterdyx-pc sudo[108551]: kolterdyx : TTY=pts/0 ; PWD=/home/kolterdyx ; USER=root ; COMMAND=/usr/bin/systemctl start ngrok
ago 04 13:21:47 kolterdyx-pc sudo[108551]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
ago 04 13:21:47 kolterdyx-pc systemd[1]: ngrok.service: Found left-over process 940 (ngrok) in control group while starting unit. Ignoring.
ago 04 13:21:47 kolterdyx-pc systemd[1]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
ago 04 13:21:47 kolterdyx-pc systemd[1]: Started ngrok.
░░ Subject: A start job for unit ngrok.service has finished successfully
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ A start job for unit ngrok.service has finished successfully.
░░ 
░░ The job identifier is 11537.
ago 04 13:21:47 kolterdyx-pc sudo[108551]: pam_unix(sudo:session): session closed for user root
ago 04 13:22:05 kolterdyx-pc sudo[108593]: kolterdyx : TTY=pts/0 ; PWD=/home/kolterdyx ; USER=root ; COMMAND=/usr/bin/journalctl -xe
ago 04 13:22:05 kolterdyx-pc sudo[108593]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
ago 04 13:22:13 kolterdyx-pc sudo[108593]: pam_unix(sudo:session): session closed for user root
ago 04 13:22:19 kolterdyx-pc sudo[108602]: kolterdyx : TTY=pts/0 ; PWD=/home/kolterdyx ; USER=root ; COMMAND=/usr/bin/journalctl -xe
ago 04 13:22:19 kolterdyx-pc sudo[108602]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
4
  • you shouldn't be using that start.sh; pkill here is not the right way of doing things; also, there's nothing else that could start ngrok before, so... hm. sudo systemctl start ngrok.service together with journalctl -xe print anything interesting? Aug 4, 2021 at 11:08
  • @MarcusMüller I need to use the start.sh file because if I start ngrok directly, then I can't access a local server that it creates on 127.0.0.1:4040, and I need that to be accessible for another program. If I start it through a bash script, the ngrok is executed as a child process of bash, and the local server is accessible. I'll add the rest to the question Aug 4, 2021 at 11:22
  • that makes no sense, unless ngrok was already running before.. Aug 4, 2021 at 12:59
  • @MarcusMüller I don't know why that happens either, but I just know that in order for ngrok to start the local server successfully it has to be executed by bash. The reason for the start.sh file to have a pkill ngrok line is because sometimes when the service restarts, the ngrok process is still lingering and I can only have one process at the same time. Aug 5, 2021 at 11:47

1 Answer 1

1

You just need to make ngrok a service, and start it.

https://github.com/vincenthsu/systemd-ngrok describes one way of doing that. Honestly, all you have to do is write a "something.service" file, put it in /lib/systemd/system, and systemd enable it.

The ngrok.service file from that repo is particularly unspectacular:

[Unit]
Description=ngrok
After=network.target

[Service]
ExecStart=/opt/ngrok/ngrok start --all --config /opt/ngrok/ngrok.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
IgnoreSIGPIPE=true
Restart=always
RestartSec=3
Type=simple

[Install]
WantedBy=multi-user.target
8
  • I already tried creating a "something.service" file and enabling it, but I still had to log in manually for it to start. I tried installing the service from the repo and it didn't work either. It doesn't matter what I change, I can't seem to start the process without manually loging in. Aug 2, 2021 at 22:28
  • then something went wrong when enabling it, this is literally how the rest of things on your PC start. Aug 3, 2021 at 7:10
  • @Cirogarcia If the service starts automatically when you log in, then it sounds like you installed the service as a systemd user service, and not as a system service. Aug 3, 2021 at 7:43
  • Put the file in /etc/systemd/system/*.service, then sudo systemctl enable. Like @JohanMyréen says, it sounds like you put it in ~/.config/systemd/user/*.service. I don't know about this tool, but if you need to run it as a specific user (perhaps it needs to find your ssh keys), then add User=ciro to the [Service] section.
    – Stewart
    Aug 3, 2021 at 8:18
  • @Stewart I already have the file in /etc/systemd/system/ and I have set the User to root to see if that fixes anything but it hasn't. I have taken a peek at the sshd.service file, and it is almost the same kind of file, and it only adds some Exec statements. I have no idea what's happening but it just won't start the service until I log in to my desktop. Aug 3, 2021 at 13:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .