Ubuntu 20.04

نحوه استفاده از Ansible برای خودکارسازی تنظیمات اولیه سرور در اوبونتو 20.04

معرفی

اتوماسیون سرور در حال حاضر به دلیل ماهیت یکبار مصرف محیط های کاربردی مدرن، نقش اساسی در مدیریت سیستم ایفا می کند. ابزارهای مدیریت پیکربندی مانند Ansible معمولاً برای ساده‌سازی فرآیند نصب خودکار سرور با ایجاد رویه‌های استاندارد برای سرورهای جدید و همچنین کاهش خطای انسانی مرتبط با تنظیمات دستی استفاده می‌شوند.

Ansible یک معماری ساده ارائه می دهد که نیازی به نرم افزار خاصی برای نصب روی گره ها ندارد. همچنین مجموعه ای قوی از ویژگی ها و ماژول های داخلی را ارائه می دهد که نوشتن اسکریپت های اتوماسیون را تسهیل می کند.

این راهنما نحوه استفاده از Ansible را برای خودکارسازی مراحل موجود در راهنمای نصب اولیه سرور برای سرورهای اوبونتو 20.04 توضیح می‌دهد.

پیش نیازها

برای اجرای تنظیمات خودکار ارائه شده توسط playbook در این راهنما، به موارد زیر نیاز دارید:

  • یک گره کنترلی Ansible: یک دستگاه اوبونتو 20.04 با Ansible نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo و فایروال فعال است، همانطور که در راهنمای راه اندازی سرور اولیه ما توضیح داده شده است. برای راه اندازی Ansible، لطفاً راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید.
  • یک سرور راه دور با نصب تمیز اوبونتو 20.04: هیچ تنظیمات قبلی در این سرور مورد نیاز نیست، اما باید از گره کنترل Ansible که در بالا ذکر شد به این سرور دسترسی SSH داشته باشید. این سرور به یک سرور از راه دور میزبان Ansible تبدیل می شود که برای تامین خودکار توسط گره کنترل Ansible هدف قرار می گیرد.

این کتاب بازی چه کاری انجام می دهد؟

این کتاب بازی Ansible جایگزینی برای اجرای دستی از طریق روش مشخص شده در راهنمای راه اندازی اولیه سرور اوبونتو 20.04 و راهنمای تنظیم کلیدهای SSH در اوبونتو 20.04 هر بار که سرور را راه اندازی می کنید ارائه می دهد. یک بار کتاب پخش خود را تنظیم کنید و بعد از آن برای هر سرور از آن استفاده کنید.

اجرای این playbook اقدامات زیر را روی میزبان Ansible شما انجام می دهد:

  • aptitude را نصب کنید که توسط Ansible به عنوان جایگزینی برای مدیر بسته apt ترجیح داده می شود.
  • یک کاربر sudo جدید ایجاد کنید و sudo بدون رمز عبور را راه اندازی کنید.
  • یک کلید عمومی SSH محلی را کپی کنید و آن را در فایل authorized_keys برای کاربر مدیریت جدید در میزبان راه دور قرار دهید.
  • غیرفعال کردن احراز هویت مبتنی بر رمز عبور برای کاربر اصلی.
  • بسته های سیستمی را نصب کنید.
  • فایروال UFW را طوری پیکربندی کنید که فقط به اتصالات SSH اجازه دهد و هر درخواست دیگری را رد کند.

پس از اتمام اجرای کتاب پخش، کاربر جدیدی خواهید داشت که می توانید از آن برای ورود به سرور استفاده کنید.

برای شروع، وارد یک کاربر دارای sudo در سرور گره کنترل Ansible خود شوید.

مرحله 1 – گره کنترل Ansible خود را آماده کنید

در سرور گره کنترل Ansible، IP سرور راه دور میزبان Ansible خود را به فایل موجودی Ansible خود اضافه کنید. استفاده از ویرایشگر متن دلخواه شما:

sudo nano /etc/ansible/hosts

با این کار فایل موجودی Ansible شما باز می شود. IP سرور راه دور میزبان Ansible خود را به بلوک [سرورها] اضافه کنید:

/etc/ansible/hosts
[servers]
server1 ansible_host=your_remote_server_ip

. . .

اکنون اتصال SSH خود را بین این گره کنترلی Ansible و سرور از راه دور میزبان Ansible خود آزمایش و احراز هویت خواهید کرد:

ssh root@your_remote_server_ip

درخواست احراز هویت را بپذیرید و در صورت درخواست رمز عبور خود را وارد کنید. هنگامی که اتصال SSH را تأیید کردید، CTRL+D را فشار دهید تا اتصال بسته شود و به گره کنترل خود بازگردید.

مرحله 2 – آماده کردن Playbook خود

فایل playbook.yml جایی است که تمام وظایف شما در آن تعریف می شود. یک کار کوچکترین واحد عملی است که می توانید با استفاده از کتاب بازی Ansible به طور خودکار انجام دهید. اما ابتدا، فایل playbook خود را با استفاده از ویرایشگر متن دلخواه خود ایجاد کنید:

nano playbook.yml

با این کار یک فایل YAML خالی باز می شود. قبل از اضافه کردن وظایف به کتاب بازی خود، با افزودن موارد زیر شروع کنید:

playbook.yml
---
- hosts: all
  become: true
  vars:
    created_username: sammy

با خیال راحت نام کاربری را با یکی از دلخواه خود جایگزین کنید.

تقریباً هر کتاب بازی که با آن روبرو می شوید با اعلان هایی مشابه این شروع می شود. hosts اعلام می کند که گره کنترل Ansible کدام سرورها را با این کتاب بازی هدف قرار می دهد. تبدیل وضعیت می کند که آیا همه دستورات با امتیازات ریشه افزایش یافته انجام می شوند یا خیر.

vars به شما امکان می دهد داده ها را در متغیرها ذخیره کنید. اگر تصمیم به تغییر این نام کاربری در آینده دارید، فقط باید همین خط را در فایل خود ویرایش کنید.

مرحله 3 – یک کار نصب Aptitude به Playbook خود اضافه کنید

به طور پیش فرض، وظایف به صورت همزمان توسط Ansible به ترتیب از بالا به پایین در کتاب بازی شما اجرا می شوند. این بدان معناست که ترتیب کارها مهم است، و شما می توانید با خیال راحت فرض کنید که اجرای یک کار قبل از شروع کار بعدی به پایان می رسد.

همه وظایف موجود در این کتاب بازی می توانند به تنهایی بایستند و مجدداً در سایر کتاب های بازی شما مورد استفاده قرار گیرند.

اولین کار خود یعنی نصب aptitude را اضافه کنید، ابزاری برای ارتباط با مدیر بسته لینوکس:

playbook.yml
  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

در اینجا، شما از ماژول داخلی apt Ansible برای هدایت Ansible برای نصب aptitude استفاده می کنید. ماژول ها در Ansible میانبرهایی برای اجرای عملیاتی هستند که در غیر این صورت باید به عنوان دستورات bash خام اجرا می شدند. در صورتی که استعداد در دسترس نباشد، Ansible با خیال راحت دوباره به گزینه نصب بسته‌ها می‌رود. بنابراین در حالی که این مرحله از نظر فنی اختیاری است، Ansible از نظر تاریخی استعداد را ترجیح داده است.

مرحله 4 – اضافه کردن Sudo User Setup Tasks به Playbook خود

عمل خوبی است که از استفاده گسترده از کاربر ریشه خودداری کنید. می‌توانید ایجاد کاربری را که دارای امتیازات sudo است با اضافه کردن:

playbook.yml
    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s' 

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

شما از ماژول lineinfile Ansible برای هدف گیری و جایگزینی یک خط خاص در یک فایل استفاده می کنید. در این مورد، شما از regex برای هدف قرار دادن یک خط خاص در فایل sudoers استفاده می‌کنید و سپس آن را تغییر می‌دهید تا امکان استفاده بدون رمز عبور از sudo را فراهم کنید. شما همچنین از visudo برای تأیید تغییرات خود استفاده می کنید تا از شکستن هر چیزی جلوگیری کنید.

برای استفاده از این مزیت، یک کاربر جدید با ماژول کاربر اضافه می‌کنید. Ansible اطمینان حاصل می کند که اگر این کاربر قبلاً وجود نداشته باشد، ایجاد شده است، که کاربر به گروه sudo تعلق دارد در حالی که از گروه های دیگر حذف نمی شود، و یک فهرست خانه ایجاد می شود.

مرحله 5 – اضافه کردن SSH Key Setup و غیرفعال کردن وظایف رمز عبور ریشه به Playbook شما

Ansible با این فرض عمل می کند که از کلیدهای SSH استفاده می کنید. جفت کردن استفاده از کلید SSH با غیرفعال کردن احراز هویت رمز عبور ریشه اکیداً توصیه می شود و به طور کلی تمرین خوبی است. برای خودکار کردن این، اضافه کنید:

playbook.yml
    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

اگر نام کاربری و مکان کلید را وارد کنید، ماژول authorized_key قابل استفاده است. در اینجا، مسیر به سمت کلید شما با استفاده از تابع جستجوی Ansible ساخته می شود.

ماژول lineinfile برای جستجو و جایگزینی یک خط در sshd_config به منظور غیرفعال کردن احراز هویت رمز عبور برای ریشه، محدود کردن دسترسی به امتیازات آن برای افزایش امنیت استفاده می‌شود.

مرحله 6 – یک کار نصب بسته را به Playbook خود اضافه کنید

Ansible می تواند اطمینان حاصل کند که بسته های خاصی همیشه روی سرور شما نصب می شوند. به جای فراخوانی apt install بر روی هر بسته جداگانه، یا تقسیم آن به چندین کار، می‌توانید تمام بسته‌های مورد نظر خود را فهرست کنید:

playbook.yml
    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

می توانید بسته ها را به دلخواه خود اضافه یا حذف کنید. این اطمینان حاصل می کند که همه بسته ها نه تنها موجود هستند، بلکه در آخرین نسخه نیز وجود دارند و پس از فراخوانی به روز رسانی با apt انجام می شود.

مرحله 7 – افزودن یک کار راه اندازی فایروال به Playbook خود

فایروال برای هر سروری که با اینترنت روبرو است ضروری است. می‌توانید از Ansible اطمینان حاصل کنید که UFW (دیوار آتش بدون عارضه) به درستی پیکربندی شده است با اضافه کردن:

playbook.yml
    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

ماژول ufw ابتدا اطمینان حاصل می کند که دسترسی SSH از طریق آن مجاز است. سپس، این ماژول فایروال شما را فعال می کند در حالی که به طور پیش فرض تمام ترافیک دیگر به سرور شما را رد می کند.

مرحله 8 – کتاب راهنمای کامل خود را مرور کنید

کتاب بازی شما باید تقریباً شبیه شکل زیر باشد، با تفاوت های جزئی بسته به سفارشی سازی های شما:

playbook.yml
---
- hosts: all
  become: true
  vars:
    created_username: sammy

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s'

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

هنگامی که از کتاب بازی خود راضی شدید، می توانید از ویرایشگر متن خود خارج شده و ذخیره کنید.

مرحله 9 – Playbook خود را برای اولین بار اجرا کنید

اکنون آماده اجرای این کتاب بازی در یک یا چند سرور هستید. اکثر کتاب‌های پخش به‌طور پیش‌فرض پیکربندی شده‌اند که در هر سرور موجود در فهرست شما اجرا شوند، اما شما این بار سرور خود را مشخص می‌کنید.

برای اجرای playbook فقط در server1 که به صورت root متصل می شود، می توانید از دستور زیر استفاده کنید:

ansible-playbook playbook.yml -l server1 -u root -k

پرچم -l سرور شما را مشخص می‌کند و پرچم -u مشخص می‌کند که کدام کاربری در سرور راه دور وارد شود. از آنجایی که هنوز سرور راه دور خود را راه اندازی نکرده اید، root تنها گزینه شماست. پرچم -k در اولین اجرای playbook شما بسیار مهم است، زیرا به شما امکان می دهد رمز عبور SSH خود را وارد کنید.

خروجی مشابه این دریافت خواهید کرد:

Output

. . .

TASK [UFW - Allow SSH connections] ***************************************************************************************************************************************************************************************************************************
changed: [server1]

TASK [UFW - Enable and deny by default] **********************************************************************************************************************************************************************************************************************
changed: [server1]

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************
server1                    : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

این نشان می دهد که راه اندازی سرور شما کامل شده است! خروجی شما نباید دقیقاً یکسان باشد، اما مهم این است که هیچ شکستی نداشته باشید.

اکنون که اولین راه‌اندازی را برای کتاب پخش خود انجام داده‌اید، همه تماس‌های انتساب‌پذیر بعدی را می‌توان با کاربر sammy و بدون پرچم -k انجام داد:

ansible-playbook playbook.yml -l server1 -u sammy

همچنین می توانید با استفاده از:

ssh sammy@your_remote_server_ip

به یاد داشته باشید که sammy را با کاربر تعریف شده توسط متغیر create_username و server_host_or_IP را با نام میزبان یا آدرس IP سرور خود جایگزین کنید.

پس از ورود به سرور، می‌توانید قوانین فعال فایروال UFW را بررسی کنید تا تأیید کنید که به درستی پیکربندی شده است:

sudo ufw status

شما باید خروجی مشابه این بگیرید:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             

این بدان معناست که فایروال UFW با موفقیت فعال شده است. از آنجایی که این آخرین کار در playbook بود، تأیید می کند که playbook به طور کامل در این سرور اجرا شده است.

نتیجه

خودکار کردن تنظیمات اولیه سرور می تواند در زمان شما صرفه جویی کند، در حالی که مطمئن شوید سرورهای شما از یک پیکربندی استاندارد پیروی می کنند که می تواند بهبود یابد و مطابق با نیازهای شما سفارشی شود. با ماهیت توزیع شده برنامه های کاربردی مدرن و نیاز به سازگاری بیشتر بین محیط های صحنه سازی مختلف، اتوماسیون مانند این به یک ضرورت تبدیل می شود.

در این راهنما، نحوه استفاده از Ansible را برای خودکارسازی کارهای اولیه که باید در یک سرور تازه اجرا شوند، مانند ایجاد یک کاربر غیر ریشه با دسترسی sudo، فعال کردن UFW و غیرفعال کردن ورود به سیستم ریشه مبتنی بر رمز عبور از راه دور، نشان دادید.

برای اطلاعات بیشتر در مورد نحوه اجرای کتاب های بازی Ansible، راهنمای برگه تقلب Ansible ما را بررسی کنید.

اگر می‌خواهید برای سفارشی‌سازی بیشتر تنظیمات اولیه سرور خود، وظایف جدیدی را در این کتاب بازی اضافه کنید، لطفاً به راهنمای مقدماتی Ansible Configuration Management 101: Writing Ansible Playbooks مراجعه کنید. همچنین می توانید راهنمای ما در مورد نحوه استفاده از نقش های Ansible برای انتزاع محیط زیرساخت خود را بررسی کنید.


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/