استفاده از کلید SSH برای بکاپ گرفتن اتوماتیک روی Synology NAS

امروز تصمیم گرفتم برای MySQL سرورها سیستم بکاپ اتوماتیک برای جلوگیری از «از دست رفتن اطلاعات» یا «نجات اطلاعات در برابر هکر های عزیز» راه بندازم.اول از همه استفاده از سرویس گوگل درایو به ذهنم رسید که خداروشکر بخاطر تحریم نمیشه ازش استفاده کرد و باید به موازین ملی پایبند بود. اینجا یخورده کارم سخت شد و چون از قبل رو سرورمون NAS سینولوژی داشتیم گفتم خب بزار از اون استفاده کنم، و چون از rsync استفاده میکردم که روی پروتکل Secure Shell (AKA SSH) هست نمیشد این کار رو از راه معمولیش اتوماتیک کرد. (به این دلیل که هربار موقع آپلود فایل پسورد رو باید دستی وارد کرد)، معمولا تو این مواقع SSH Key ها به کارمون میان و درواقع توی این آموزش قراره بهتون توضیح بدم که چجوری این کلید هارو روی NAS خودمون راه بندازیم:اول از همه این دوتا نکته رو توی ذهنتون داشته باشین:به طور پیشفرض نمیشه با root به سرور ssh زد، توی این آموزش با اکانتی که توی گروه ادمین هاست وارد میشیم و بعد از دستور sudo su برای گرفتن دسترسی root استفاده میکنیم.فقط کاربرانی که توی گروه ادمین ها هستن میتونن به سرور ssh بزنن، ولی استفاده از rsync برای همه کاربرها ممکن هست.مرحله اول اینه که بریم تنظیمات ورود با استفاده از کلید عمومی (public key) رو فعال کنیم:اول مطمئن بشید که سرویس SSH روی سرورتون روشنه، برای اینکار باید به مسیرControl panel > Terminal & SNMP برید و سرویس SSH رو روشن کنید.اگه از قبل اکانتی که توی گروه ادمین ها باشه ندارید باید یدونه بسازیم. توی این آموزش از اسم foaly استفاده میکنیم و داخل مسیرControl panel > User > foaly > Edit > User groupsاون رو به صورت موقت داخل گروه ادمین ها اون رو قرار میدیم.به SSH ،NAS میزنیم و برای گرفتن دسترسی root دستورsudo suرو تایپ میکنیم.با دستورvim /etc/ssh/sshd_configفایل کانفیگ SSH باز میشه، داخلش دوتا خط PubkeyAuthentication yes و AuthorizedKeysFile .ssh/authorized_keys رو از کامنت درمیاریم، حواستون باشه به چیز دیگه ای دست نزنین و گرنه ممکنه برای همیشه دسترسی SSH رو از دست بدین!بعد از این مرحله سرویس SSH رو از داخل پنل وب NAS یه بار خاموش و روشن میکنیم.اگه کاربری رو برای این کار داخل گروه ادمین ها گذاشتین الان میتونین از این گروه خارجش کنین.حالا احراز هویت با کلید عمومی (Public key) فعال شده، الآن باید کلید هارو داخل NAS و کلاینت مون قرار بدیم تا بدون پسورد کارمون انجام بشه (فرض میکنیم کلاینتمون میخواد خودشو با یوزر backup احراز کنه)کاربر backup رو توی گروه ادمین ها قرار میدیمبه کلاینتمون وصل میشیم و یک کلید میسازیم (اگه از قبل ندارین):ssh-keygen -t rsaکلیدی که ساختیم رو روی NAS کپی میکنیم (اینجا ازتون پسورد اکانت backup رو میخواد) :ssh-copy-id backup@[nas-ip]و این بخش مهمه که به NAS وصل بشیم و دستورات زیر رو تایپ کنیمchmod 0711 ~chmod 0711 ~/.sshchmod 0600 ~/.ssh/authorized_keysالان دیگه باید احراز هویت ـمون کار کنه، برای تستssh backup@nas-ipرو تایپ میکنیم و نباید پسورد بخوادو یادمون نره که یوزر backup رو اگه لازم نداریم از گروه ادمین ها خارج کنیمبرای فرستادن بکاپ ها به NAS هم میتونین کارهای زیر رو انجام بدین:مطمئن میشیم که سرویس rsync روی NAS فعاله (حواستون باشه تیک Enable rsync account رو نزنید)Control panel > File Services > rsync > Enable rsync serviceفولدر اشتراکی (Shared Folder) رو بسازید که بکاپ ها اونجا ریخته بشن (مثلا poshtibanha - در کل من پیشنهاد میکنم توی اینجور موارد از عبارات فینگلیش استفاده کنین که اگه آقای هکر به هر نحوی به NAS دسترسی پیدا کرد سخت تر بتونه فولدر های حساس و مهم رو پیدا کنه).و در نهایت از دستورrsync -az /var/www backup@[nas-ip]:/volume1/Backups/میتونین برای ارسال بکاپ ها استفاده کنیناین هم یه دستور پیچیده برای انجام یه کار تمیزتر:rsync -az -e &quotssh -p 23342&quot --backup --backup-dir=&quotrsync_bak_`date '+%F_%H-%M'`&quot --exclude 'tmp*' --exclude 'cache*' --exclude 'logs' /var/www backup@[nas-ip]:/volume1/Backups/توضیحات برای دستور بالا:اتصال به پورت رندوم 23342 برای NAS های که پشت فایروال یا NAT هستن (بیشتر برای گمراه کردن رباتها استفاده میشه)استفاده از تاریخ و ساعت در بکاپ که فایل جدید روی بکاپ قبلی overwrite نشه و از بکاپتون نسخه های مختلف داشته باشید.خارج کردن فولدر هایی که لازممون نمیشن از لیست ارسال.منبع: https://silica.io/using-ssh-key-authentification-on-a-synology-nas-for-remote-rsync-backups/ (اگه به مشکل برخوردید به نظرم یه نگاهی به کامنت های پست اصلی بندازید ? و اگر جوابی پیدا نکردین همینجا کامنت بزارین امیدوارم که بتونم کمکتون کنم)