Portál AbcLinuxu, 30. dubna 2025 15:13
Tento zápisok je len ako take moje how-to ale možno sa hodi aj niekomu inému. Potreboval som na maline π spúšťať autossh, tak som sa pokúsil vydať cestou systemd a tu je môj výsledok.
Najprv potrebujem mat funkčné pripojenie k serveru cez ssh kľúče bez nutnosti zadávania hesla (k tomu už je nespočet návodov) a nastavenie tunelu som dal do $HOME/.ssh/config
Host mytunel
HostName my.server.ip
User me
Port 22222
RemoteForward 11122 localhost:22
RemoteForward 11180 localhost:80
Kedže autossh používa kľúče z môjho home adresára, tak som sa rozhodol že služba bude bežat pod mojim užívateľom. Vytvoril som systemd unit servis v domovskom adresári: $HOME/.config/systemd/user/autossh.service
Tiež som pridal monitoring port.
[Unit]
Description=AutoSSH tunnel service
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/autossh -M 11100 -f mytunel -N
[Install]
WantedBy=default.target
Po každom vloženi alebo úprave unitu musime reloadnuť:
$ systemctl --user daemon-reload
systemctl --user ...
je spúšťaný vždy pod užívateľom a nie cez sudo.
A možno ešte budeme potrebovať (v pripade minimálnej inštalacie debianu) doinštalovať balík libpam-systemd
Náš nový unit vyskúšame a skontrolujeme či beží:
Samozrejme v tomto bode by tunel mal byť funkčný, ale to ešte nieje všetko...
$ systemctl --user start autossh.service
$ systemctl --user status autossh.service
● autossh.service - AutoSSH tunnel service
Loaded: loaded (/home/me/.config/systemd/user/autossh.service; disabled)
Active: active (running) since Sat 2017-01-14 07:54:19 CET; 2sec ago
Process: 709 ExecStart=/usr/bin/autossh -M 11100 -f mytunel -N (code=exited, status=0/SUCCESS)
Main PID: 724 (autossh)
CGroup: /user.slice/user-1000.slice/user@1000.service/autossh.service
├─724 /usr/lib/autossh/autossh -M 11100 mytunel -N
└─725 /usr/bin/ssh -L 11100:127.0.0.1:11100 -R 11100:127.0.0.1:11101 -N mytunel
Musíme zabezpečiť aby sa servis spúšťal automaticky:
A to najdoležitejšie aby sa užívateľove servisy spúšťali aj keď užívateľ nebude prihlásený:
$ systemctl --user enable autossh.service
Inak by sa servis spustil vždy len po prihlasení užívatela a zastavil po jeho odhlásení, čo v prípade autossh je asi nežiaduce.
$ sudo loginctl enable-linger $USER
Vyskúšame to reštartom systému a kontrolou či autossh sa spustilo po štarte (ideálne kontrolou na serveri cez ktorý tunelujeme a to ešte skôr než sa po reštarte prihlásime na náš stroj aby sme si boli istý že linger funguje správne.
Zopár poznámok:
User=me
pretože systemd vie že servis patrí nám a vždy bude spúšťaný pod našim uid.
Type=forking
je nevyhnutné ak sa program forkuje, inak všetky forknuté procesy odstrelí akonáhe skončí ten hlavný.
WantedBy=default.target
a nie multi-user.target
ako v prípade systémových servisov.
Tak dúfam že som nič nezabudol.
Tiskni
Sdílej:
veci čo fungovali pred dvaciatimi rokmTřeba to, aby si mohl uživatel službu konfigurovat a spouštět sám a nepotřeboval k tomu roota/sudo?
-o "ExitOnForwardFailure yes"
- ak pri štarte ešte nie je sieť alebo server práve nie je dostupný
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.