Adott egy Raspberry pi, ami egy belső hálózaton csücsül, dinamikus ip-vel kapcsolódik és nincs mód kiengedni a világ felé.
A most következő módszernek a hátulütője, hogy szükség van egy kívülről elérhető szerverre, amire SSH-n keresztül csatlakozhat a pi és mi a köztes szerveren keresztül a pi-re.

A távoli hozzáféréshez nincs másra szükség, mint az SSH-ban található Port Forward beállítására. A külső szerverre csatlakozás során be kell állítani, hogy a lokális 22 port a távoli szerveren legyen elérhető például a 6666 porton. A folyamatos kapcsolathoz telepíteni kell az autossh programot és hogy az újraindítással se legyen gond, kell egy systemd service.

Autossh telepítés

Ubuntu


sudo apt-get install autossh

Arch


sudo pacman -S autossh

Távoli ssh csatlakozás jelszó nélkül

Az automatikus csatlakozáshoz elengedhetetlen, hogy ne kelljen mindig beírni a távoli felhasználó jelszavát.
Az itt leírtak alapján generáljunk hozzáférést. A kulcshoz tartozó passprhase legyen üres.

Autossh script

A könnyeb hivatkozásért készítsünk egy bash scriptet az autossh futtatáshoz.



# !/bin/bash

autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i ~/.ssh/id_rsa -R 6666:localhost:22 user@example.com

Az utolsó paramétert le kell cserélni a tényleges felhasználónévre és a szerver címére.

Systemd service

Hogy ne kelljen minden indítás után bejelentkezni és elindítani a scriptet, készítsünk egy systemd service-t:


[Unit]
Description=AutoSSH

Wants=network.target
After=syslog.target network-online.target

[Service]
Type=simple
User=user
ExecStart=/bin/bash /home/user/.scripts/autossh.sh
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target
 

Az User és ExecStart-ban le kell cserélni a felhasználót a megfelelőre.

A fájl legyen futtatható:


chmod +x home/user/.scripts/autossh.sh

Engedélyezzük, hogy automatikusan induljon és indítsuk el:


sudo systemctl enable autossh
sudo systemctl start autossh

Csatlakozás

A csatlakozáshoz vagy két lépcsőben először bejelentkezünk a köztes szerverre és onnan a másikra vagy használhatjuk a következő parancsot:


ssh -o ProxyCommand="ssh -W %h:%p user@example.com" -p 6666 user@localhost