section

Synology - SFTP přenos s SSH klíčem

15.10.2021 | Tag Linux

Synology NAS už od relativně starých verzí umožňuje přenos souborů pomocí SFTP a stejně tak umožňuje použití SSH klíčů. Tahle kombinace je skvělá jak pro běžné použití uživatelem, tak v rámci různých skriptů.

Uchodit tuhle kombinaci mě napadlo v souvislosti s psaním backup skriptu Networkcat webu. Už nějakou dobu se snažím vyhnout plaint text přenosovým protokolům, nicméně u SFTP ani SCP se nedá použít heslo jako parametr, což je pro skript trochu překážka. Ideální kombinace pro mě tedy byl zmíněný SFTP protokol a SSH klíč. Synology dokáže obojí. Nevím, jak jsou na tom novější verze (ani ne tak pro vlastní podporu, ale pro způsob konfigurace), ale protože mám k dispozici jen starší NASku s DSM 4.2, tak budu prezentovat na ní.

Na straně NAS je potřeba zajistit několik věcí. Zapnout SSH, SFTP a domovské adresáře pro uživatele. Třetí bod je dost možná variantně, ale přijde mi to jako nejlepší cesta, jak pro vícero uživatelů zajistit vlastní složku, do které uložit veřejnou část SSH klíče. I když bude klíč v této složce, uživatel se i tak dostane do dalších složek, ke kterým má oprávnění.

Přes Ovládací panel a Terminál se povolí SSH služba. Pod FTP se pak povolí SFTP služba. V kartě SFTP je možné službu přesměrovat na libovolný port, to je na rozvaze každého admina.

NAS02
NAS05

V Ovládacích panelech pod Uživatelem se povolí služba Složka uživatele, což následně vytvoří pro každého uživatele domovský adresář.

NAS03

Ve File Station bude nově vidět složka home.

NAS04

Následně je potřeba vytvořit SSH klíč, což jsem předváděla třeba v článku SSH klíče v Debianu a puttygenu. Popravdě, nedohledávala jsem podporované varianty klíče u Synology, radši jsem šla do RSA klíče s délkou 2048 bitů, což většinou funguje všude. Privátní část se uschová bokem, veřejnou část je potřeba dostat do NASky. Synology je v jádru Linux, proto se v tomto ohledu dá k NASce chovat jako ke standardnímu Linux serveru. Tj. nejsnazší metoda se mi zdá přihlásit se admin účtem přes SSH do NASky, vytvořit .ssh složku v domovském adresáři uživatele a do ní dát veřejnou část klíče jako authorized_keys soubor. Domovské adresáře jsou u Synology umístěné v cestě /var/services/homes/xxx. Je potřeba nastavit složce .ssh i souboru authorized_keys správné oprávnění, tak jako na serverech.

V mém případě se uživatel a jeho složka jmenuje bckw. Jde o standardního uživatele založeného v DSM.

NAS01

To bylo v mém případě na straně NASky vše. Když jsem si dohledávala informace na různých fórech, občas se objevila zmínka, že je potřeba upravit sshd konfiguraci NASky. Může to tak být, ale mně vše fungovalo bez zásahu do SSH konfigurace.

Když jsem se následně přihlásila pod uživatelem bckw přes WinSCP SSH klíčem, vše proběhlo v pořádku a měla jsem k dispozici všechny složky, ke kterým měl mít uživatel přístup. V defaultu se uživatel po přihlášení ocitne v rootu adresářové struktury, ale myslím, že lze nastavit, aby po přihlášení skončil ve své domovské složce.

NAS06

Důvod toho všeho byl, abych mohla ze serveru zálohu webu přenést pomocí SFTP příkazu s SSH klíčem jako parametrem, níže je tedy ukázka, jak by se příkaz na serveru volal. Argument -i je cesta k privátní části klíče.

NAS07

Nakonec ještě ukážu výsledný skript, který SFTP přenos na Synology používá. Jde o velice pitomou variantu bez jakýchkoliv ochran, ale známe to.. dokud vše funguje, problém neexistuje :). Skript zabalí vybranou složku do archivu, který přenese do úložiště a lokální kopii následně smaže. Cron tuto úlohu pouští jednou denně.

#!/bin/bash

datum="$(date '+%Y%m%d%H%M')"

tar -czf /opt/backup/wbck$datum.tar.gz /data/www/ >/dev/null 2>&1

echo "put /opt/backup/wbck$datum.tar.gz" | sftp -i /opt/backup/bckw bckw@x.x.x.x:/backupwww >/dev/null 2>&1

rm /opt/backup/wbck$datum.tar.gz

exit 0