Ich habe dein Problem mal mit eigenen Rechnern nachvollzogen.Der Rechner, der einen Tunnel aufbauen soll, ist in meinem Fall ein Laptop, dessen Netzwerkverbindung über WLAN hergestellt wird, das wiederum erst nach dem Login des Benutzers und Eingabe des Keyring-Paßworts zur Verfügung steht.
Was passiert, wenn du dein Skript
sshtunnel.sh in der Konsole ausführst?
Der Aufruf
ssh sshtunnel -p22 -fCN -D 5560 kann vereinfacht werden:
ssh sshtunnel -fCN -D 5560, Port 22 ist sowieso der Default und -p22 kann man sich sparen. Es empfiehlt sich auch, bei skriptgesteuerten Aufrufen, den Benutzer, unter dem die Verbindung aufgebaut werden soll, mitzugeben, also:
ssh benutzer@sshtunnel -fCN -D 5560. Ferner kommt es bei eine SSH-Verbindung immer zu einer Paßwortabfrage, die natürlich bei einem Start aus systemd nie den Benutzer erreicht. Man kann sich behelfen, indem man mit
ssh-keygen ein Schlüsselpaar ohne Paßphrase generiert, das man dem Aufruf von ssh mitgeben muß:
ssh-keygen -t rsa -C username@sshtunnel -f username.rsa
Generiert ein Schlüsselpaar, von dem der öffentliche Schlüssel (username.rsa.pub) auf dem Zielsystem unter ~benutzer/.ssh an die Datei authorized_keys angehängt werden:
cat username.rsa.pub >> ~benutzer/.ssh/authorized_keys
Der private Schlüssel (username.rsa) muß auf der Quellmaschine unter ~benutzer/.ssh abgelegt werden. Es empfiehlt sich, auf beiden Maschinen mit
chmod 400 username.rsa bzw.
chmod 400 authorized_keys die Dateiberechtigungen einzuschränken, sonst nörgelt ssh.
Ich mußte auch noch den -f Parameter entfernen. Der Auruf in deinem Skript in seinerr vollen "Schönheit" ist also:
ssh benutzer@sshtunnel -CN -i /home/benutzer/.ssh/benutzer.rsa -D 5560
Wenn du nun das Skript ausführst, sollte der Tunnel aufgebaut werden und kein Paßwort verlangen.
So, nun zum systemd.service.
Die Datei
/lib/systemd/system/sshtunnel.service hat bei mir folgenden Inhalt:
Code: Alles auswählen
[Unit]
Description=ssh_tunnel_skript
After=network.target
After=NetworkManager.service
[Service]
Type=simple
Restart=always
RestartSec=15
User=benutzer
ExecStart=/home/benutzer/bin/sshtunnel.sh
ExecReload=/home/benutzer/bin/sshtunnel.sh
KillMode=process
[Install]
WantedBy=multi-user.target
Hoffentlich hilft dir das weiter.