به گزارش از وبسایت redhat

همزمان با گسترش پایگاه مشتریان پلتفرم اتوماسیون Red Hat Ansible، امنیت همچنان بخش کلیدی استراتژی سازمان‌ها باقی مانده است. Red Hat به‌صورت پیوسته کدهای پایه را برای رعایت بهترین شیوه‌های امنیتی بازبینی و تقویت می‌کند. در این چارچوب، افزونه اتصال جدید libssh معرفی شده است تا کاربران Red Hat Ansible Network Automation بتوانند عملکرد در مقیاس صنعتی را همراه با سازگاری با استاندارد FIPS 140 و الزامات DISA STIG: 1057 به‌دست آورند 🔒

تفاوت اصلی در محیط شبکه این است که میزبان‌های راه‌دور شبکه مانند هاست‌های لینوکسی نیستند و ماژول‌ها روی گره کنترل اجرا می‌شوند؛ در نتیجه نمی‌توان از پلاگین اتصال SSH معمولی Ansible که برای میزبان لینوکس طراحی شده، استفاده کرد. بنابراین زیرسیستم SSH پایه‌ای نقش حیاتی دارد و افزونه libssh جدید علاوه بر فعال‌سازی آمادگی FIPS، عملکرد بهتری نسبت به زیرسیستم فعلی Paramiko ارائه می‌دهد ⚡

در مدل موجود، پلاگین سطح بالا network_cli (از مجموعه ansible.netcommon) یک اتصال مبتنی بر SSH به دستگاه شبکه برقرار می‌کند و سپس افزونه ansible.builtin.paramiko_ssh را فراخوانی می‌کند که برای مقداردهی اولیه جلسه به کتابخانه Paramiko در Python وابسته است. بعد از آن یک ترمینال شبه (PTY) ایجاد می‌شود تا دستورات از گره کنترل به دستگاه شبکه ارسال و پاسخ‌ها دریافت شوند.

دلایل جایگزینی Paramiko روشن است: Paramiko تضمین آمادگی FIPS را ندارد و از نظر عملکرد نیز بهترین نیست، بنابراین محدودیت‌هایی برای اجرای Ansible در محیط‌هایی که FIPS اجباری است به وجود می‌آورد. بنابراین اکنون افزونه ansible.netcommon.libssh به‌عنوان جایگزین قابل استفاده است. این افزونه که در مجموعه ansible.netcommon قرار دارد، به کتابخانه Python به‌نام ansible-pylibssh وابسته است؛ این کتابخانه در واقع یک wrapper پایتون بر روی کتابخانه C libssh است و PTYها را روی SSH ایجاد می‌کند.

با انتشار مجموعه ansible.netcommon نسخه 1.0.0، پارامتر پیکربندی جدیدی به افزونه ansible.netcommon.network_cli اضافه شده که به شما اجازه می‌دهد نوع SSH را مشخص کنید. اگر مقدار این پارامتر روی libssh تنظیم شود، از ansible.netcommon.libssh استفاده می‌شود و اگر روی paramiko بماند، از افزونه پیش‌فرض ansible.builtin.paramiko استفاده خواهد شد. در حال حاضر مقدار پیش‌فرض paramiko است اما در برنامه‌های آینده پیش‌فرض به libssh تغییر خواهد کرد.

نحوه نصب و پیکربندی libssh: برای استفاده از افزونه LibSSH ابتدا باید کتابخانه Python ansible-pylibssh را نصب کنید. در آینده بسته‌های RPM و DEB مستقل برای این کتابخانه منتشر خواهند شد تا نصب با مدیر بسته‌های مرسوم لینوکس ساده‌تر شود. همچنین نسخه‌های Red Hat Enterprise Linux از 8.1 به بعد شامل بسته libssh و وابستگی‌های مناسب هستند. کاربرد فعلی اصلی LibSSH در پلتفرم Ansible Automation، اتصال به دستگاه‌های شبکه است و پشتیبانی رسمی از نقاط پایانی دیگر مانند لینوکس در آینده افزوده خواهد شد.

برای نصب ansible-pylibssh از دستور زیر استفاده کنید 😊

pip install ansible-pylibssh

سه روش برای استفاده از LibSSH در Ansible Playbook وجود دارد:

روش اول: تنظیم در فایل پیکربندی ansible.cfg

ssh_type = libssh

روش دوم: تعیین متغیر محیطی

export ANSIBLE_NETWORK_CLI_SSH_TYPE=libssh

روش سوم: تنظیم متغیر ansible_network_cli_ssh_type در سطح play یا task. توجه داشته باشید که اگر اولین کار در یک play با paramiko اجرا شود، همه کارهای بعدی در همان play نیز از paramiko استفاده خواهند کرد حتی اگر در کارهای بعدی libssh مشخص شده باشد.

برای عیب‌یابی و تأیید سریع اینکه libssh به درستی فعال شده است، می‌توانید با افزایش میزان verbosity دستور ansible-playbook اجرا کنید و در خروجی کنسول باید خط “ssh type is set to libssh” را ببینید 🔍

نمونه‌ای از یک playbook آزمایشی که می‌توانید اجرا کنید (این نمونه از مجموعه cisco.ios استفاده می‌کند و باید پیش از اجرا از Ansible Galaxy یا Ansible Automation Platform نصب شده باشد):

hosts: "changeme"
gather_facts: no
connection: ansible.netcommon.network_cli
vars:
  ansible_network_os: cisco.ios.ios
  ansible_user: "changeme"
  ansible_password: "changeme"
  ansible_network_cli_ssh_type: libssh
tasks:
  - name: Run show version
    ansible.netcommon.cli_command:
      command: show version
  - name: Run show interfaces
    ansible.netcommon.cli_command:
      command: show interfaces

اگر در خروجی کنسول پیام مبنی بر تنظیم ssh type به libssh را مشاهده کردید، یعنی پیکربندی آزمایشی شما برای استفاده از ansible-pylibssh صحیح است. برای هماهنگی عملکردها با کتابخانه paramiko و کمک به تثبیت این جایگزینی، مشارکت در پروژه ansible-pylibssh بسیار مفید خواهد بود 🙌