
مقدمه
Ansible یک ابزار اتوماسیون متنباز است که به شما اجازه میدهد سرورها را از یک نود کنترل واحد مدیریت و پیکربندی کنید؛ بدون آنکه نیاز به نصب نرمافزار Agent روی ماشینهایی داشته باشید که مدیریتشان میکنید. برخلاف ابزارهایی مانند Chef یا Puppet، ارتباط در Ansible از طریق SSH برقرار میشود و از فایلهای YAML قابلخواندن برای انسان برای تعریف وظایف اتوماسیون استفاده میکند. این رویکرد بدون Agent باعث شده Ansible یکی از پرکاربردترین ابزارهای مدیریت پیکربندی در محیطهای لینوکسی production باشد.
در این آموزش، Ansible را روی یک سرور اوبونتو نصب و پیکربندی میکنید، یک Inventory از هاستهای مدیریتشده راهاندازی میکنید، اتصال را تأیید میکنید، دستورات Ad-Hoc اجرا میکنید و اولین Playbook خود را مینویسید. همچنین درباره روشهای مختلف نصب موجود — شامل PPA مربوط به Ansible، مخزن پیشفرض اوبونتو و pipx — یاد میگیرید تا رویکردی را انتخاب کنید که با محیط شما همخوانی دارد.
برای دیدن نمای کلی و گستردهتر از جایگاه Ansible در گردش کارهای مدیریت پیکربندی، مقاله «مقدمهای بر مدیریت پیکربندی با Ansible» را ببینید.
توجه: این آموزش روی اوبونتو 22.04 LTS و 24.04 LTS تست و اعتبارسنجی شده است. دستورات و مراحل برای هر دو نسخه اعمال میشوند و در مواردی که تفاوت وجود دارد، در همان محل ذکر شده است.
نکات کلیدی
- Ansible فقط باید روی نود کنترل نصب شود. نودهای مدیریتشده به Python 3 و دسترسی SSH نیاز دارند، اما به هیچ نرمافزار Ansible نیازی ندارند.
- PPA مربوط به Ansible (ppa:ansible/ansible) آخرین نسخه پایدار را ارائه میدهد و روش نصب پیشنهادی برای بیشتر راهاندازیهای production است.
- همچنین میتوانید Ansible را با pipx برای نصبهای ایزوله و سطح کاربر نصب کنید، یا از مخزن پیشفرض اوبونتو برای راهاندازی سادهتر با نسخه قدیمیتر استفاده کنید.
- فایل Inventory مشخص میکند Ansible کدام هاستها را مدیریت کند. میتوانید از فایل پیشفرض
/etc/ansible/hostsاستفاده کنید یا فایلهای Inventory مخصوص هر پروژه بسازید. - همیشه بعد از پیکربندی Inventory و کلیدهای SSH و قبل از اجرای هر اتوماسیونی، اتصال را با
ansible all -m pingتست کنید.
پیشنیازها
برای دنبال کردن این آموزش به موارد زیر نیاز دارید:
- یک نود کنترل Ansible: نود کنترل Ansible ماشینی است که از آن برای اتصال به هاستهای Ansible و کنترل آنها از طریق SSH استفاده میکنید. نود کنترل شما میتواند ماشین محلیتان یا یک سرور اختصاصی در حال اجرای Ansible باشد. این راهنما فرض میکند نود کنترل شما یک سیستم اوبونتو 22.04 یا 24.04 است. مطمئن شوید نود کنترل دارای این موارد است:
- یک کاربر غیر root با دسترسی sudo. برای راهاندازی، مراحل ۲ و ۳ راهنمای راهاندازی اولیه سرور اوبونتو را دنبال کنید. اگر از یک سرور راهدور بهعنوان نود کنترل Ansible استفاده میکنید، تمام مراحل آن راهنما را دنبال کنید تا فایروال را با ufw پیکربندی کرده و دسترسی خارجی به کاربر غیر root خود را فعال کنید.
- یک جفت کلید SSH مرتبط با این کاربر. برای راهاندازی، مرحله ۱ راهنمای راهاندازی کلیدهای SSH روی اوبونتو را دنبال کنید.
- یک یا چند هاست Ansible (نودهای مدیریتشده): هاست Ansible هر ماشینی است که نود کنترل شما برای اتوماسیون پیکربندی شده است. این راهنما فرض میکند هاستهای Ansible شما سرورهای راهدور اوبونتو هستند. مطمئن شوید هر هاست Ansible دارای این موارد است:
- کلید عمومی SSH نود کنترل Ansible که به فایل authorized_keys یک کاربر سیستمی اضافه شده باشد. این کاربر میتواند root یا یک کاربر معمولی با دسترسی sudo باشد. برای راهاندازی، مرحله ۲ راهنمای راهاندازی کلیدهای SSH روی اوبونتو 22.04 را دنبال کنید.
انتخاب روش نصب
قبل از نصب Ansible، آشنایی با سه روش اصلی نصب موجود روی اوبونتو مفید است. هر روش از نظر تازگی نسخه، سهولت نگهداری و ایزولاسیون، مزایا و معایب خود را دارد.
| روش | دستور | نسخه | مناسب برای |
|---|---|---|---|
| PPA مربوط به Ansible | sudo apt install ansible (پس از افزودن PPA) | آخرین نسخه پایدار | نودهای کنترل production |
| مخزن پیشفرض اوبونتو | sudo apt install ansible | قدیمیتر (همراه نسخه اوبونتو عرضه میشود) | راهاندازی سریع که تازگی نسخه در آن اولویت نیست |
| pipx | pipx install --include-deps ansible | آخرین نسخه از PyPI | توسعه، تست یا محیطهای چندنسخهای |
روش پیشنهادی برای محیطهای production
برای استفاده در production، Ansible را از PPA رسمی Ansible نصب کنید. این روش آخرین نسخه پایدار را با بهروزرسانیهای منظم از طریق apt upgrade در اختیارتان میگذارد. این PPA توسط پروژه Ansible نگهداری میشود و از اوبونتو 22.04 و 24.04 پشتیبانی میکند.
روش پیشنهادی برای محیطهای توسعه یا تست
برای توسعه یا تست، pipx ابزار Ansible را در یک محیط مجازی Python ایزوله نصب میکند. این کار از تداخل با پکیجهای Python سطح سیستم جلوگیری کرده و به شما اجازه میدهد چند نسخه از Ansible را کنار هم اجرا کنید. مستندات رسمی Ansible اکنون pipx را بهعنوان یک روش نصب پشتیبانیشده اعلام کرده است؛ تا حدی در پاسخ به محدودیتهای PEP 668 در Python برای نصبهای سراسری pip در نسخههای جدیدتر اوبونتو.
مرحله ۱ — نصب Ansible از طریق PPA (پیشنهادی)
PPA مربوط به Ansible جدیدترین نسخه پایدار پکیج Community آن را ارائه میدهد. این روش برای بیشتر کاربران پیشنهادی است.
افزودن PPA به سیستم
ابتدا، در صورت نصب نبودن، پکیج software-properties-common را نصب کنید. این پکیج دستور apt-add-repository را فراهم میکند:
sudo apt update
sudo apt install software-properties-common
سپس، PPA رسمی Ansible را به فهرست منابع سیستم خود اضافه کنید:
sudo apt-add-repository ppa:ansible/ansible
هنگام درخواست، برای پذیرش افزودن PPA کلید ENTER را فشار دهید.
بهروزرسانی ایندکس پکیجها و نصب Ansible
ایندکس پکیجهای سیستم خود را رفرش کنید تا پکیجهای موجود در PPA تازه اضافهشده را در بر بگیرد و سپس Ansible را نصب کنید:
sudo apt update
sudo apt install ansible
تأیید نسخه نصبشده Ansible
نصب را با بررسی نسخه Ansible تأیید کنید:
ansible --version
خروجی مشابه زیر را میبینید:
خروجی:
ansible [core 2.17.x]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/sammy/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /home/sammy/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.10.12 (main, ...) [GCC 11.4.0]
jinja version = 3.0.3
libyaml = True
شماره نسخههای دقیق به زمان نصب پکیج بستگی دارد. جزئیات مهم این است که خروجی، نصب Ansible و نسخه Python مورد استفاده آن را تأیید میکند.
مرحله ۲ — نصب Ansible با apt (مخزن پیشفرض اوبونتو)
اگر راهاندازی سادهتری را ترجیح میدهید و به آخرین نسخه نیاز ندارید، میتوانید Ansible را مستقیماً از مخزن پیشفرض اوبونتو و بدون افزودن هیچ PPA نصب کنید:
sudo apt update
sudo apt install ansible
نسخه موجود در مخزن پیشفرض به نسخه اوبونتوی شما بستگی دارد. اوبونتو 22.04 در مخازن خود دارای Ansible نسخه 2.10.x است، در حالی که اوبونتو 24.04 نسخه جدیدتری را شامل میشود. این رویکرد مراحل کمتری نیاز دارد اما ممکن است از آخرین قابلیتها و رفع اشکالهای پروژه Ansible عقب بماند.
برای بررسی نسخه موجود قبل از نصب:
apt-cache policy ansible
اگر به نسخه جدیدتری نیاز دارید، از روش PPA در مرحله ۱ یا روش pipx در مرحله ۳ استفاده کنید.
مرحله ۳ — نصب Ansible با pipx (پیشرفته)
ابزار pipx اپلیکیشنهای Python را در محیطهای مجازی ایزوله نصب میکند. این کار Ansible و وابستگیهایش را از پکیجهای Python سیستم شما جدا نگه میدارد.
نصب pipx روی اوبونتو
روی اوبونتو 22.04 و 24.04، pipx را با این دستورات نصب کنید:
sudo apt update
sudo apt install pipx
پس از نصب، مطمئن شوید مسیر ~/.local/bin در PATH شما قرار دارد. اجرا کنید:
pipx ensurepath
ترمینال را ببندید و دوباره باز کنید، یا برای اعمال تغییر PATH دستور source ~/.bashrc (یا source ~/.zshrc اگر از Zsh استفاده میکنید) را اجرا کنید.
نصب Ansible در یک محیط ایزوله pipx
نکته کاربردی برای کاربران ایرانی: برای دسترسی سریعتر و پایدارتر به پکیجهای PyPI هنگام نصب با pipx، میتوانید ایندکس pip را روی میرور پارمین کلود تنظیم کنید:
export PIP_INDEX_URL=https://pypi.parmincloud.ir/simple/
این تنظیم در نشست فعلی ترمینال اعمال میشود و همه دستورات pipx (از جمله نصب و ارتقا) از آن استفاده میکنند.
پکیج کامل Ansible Community را نصب کنید:
pipx install --include-deps ansible
فلگ –include-deps الزامی است؛ چرا که پکیج ansible به ansible-core و کتابخانههای پشتیبان دیگر وابسته است.
برای نصب فقط پکیج مینیمال ansible-core بهجای آن:
pipx install ansible-core
نصب را تأیید کنید:
ansible --version
چه زمانی این روش را ترجیح دهیم
از pipx زمانی استفاده کنید که بخواهید:
- Ansible را از سایر پکیجهای Python سیستم خود ایزوله نگه دارید
- یک نسخه خاص از Ansible را در کنار نسخههای دیگر نصب کنید
- روی سیستمی کار کنید که نصب با pip در آن توسط PEP 668 محدود شده است (رایج در اوبونتو 24.04 و بعد از آن)
- Playbookها را با نسخههای مختلف Ansible تست کنید
مرحله ۴ — پیکربندی فایل Inventory
فایل Inventory به Ansible میگوید کدام هاستها را باید مدیریت کند. میتوانید از یک تا صدها سرور را در گروهها و زیرگروهها سازماندهی کنید. فایل Inventory همچنین برای تنظیم متغیرهایی که به هاستها یا گروههای خاص اعمال میشوند — مانند مسیر مفسر Python یا پارامترهای اتصال SSH — استفاده میشود.
درک مکان فایل Inventory پیشفرض
Ansible هنگام نصب از طریق PPA یا apt، یک فایل Inventory پیشفرض در مسیر /etc/ansible/hosts میسازد. این فایل را برای ویرایش باز کنید:
sudo nano /etc/ansible/hosts
توجه: میتوانید فایلهای Inventory را در هر مکانی بسازید. برای استفاده از یک فایل Inventory سفارشی، پارامتر -i را هنگام اجرای دستورات Ansible پاس دهید. مثلاً: ansible all -m ping -i /path/to/inventory. استفاده از فایلهای Inventory مخصوص هر پروژه، عمل خوبی است تا ریسک اجرای یک Playbook روی گروه اشتباه سرورها کمینه شود.
گروهبندی هاستها و تنظیم متغیرهای هاست
مثال زیر گروهی با نام [servers] شامل سه هاست تعریف میکند که هر کدام با یک نام مستعار سفارشی شناسایی میشوند. آدرسهای IP را با آدرسهای IP واقعی نودهای مدیریتشده خود جایگزین کنید:
/etc/ansible/hosts
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
بخش [all:vars] متغیر ansible_python_interpreter را برای همه هاستهای موجود در Inventory تنظیم میکند. این کار به Ansible میگوید روی سرورهای راهدور از /usr/bin/python3 استفاده کند. Python 3 روی اوبونتو 22.04 و 24.04 پیشفرض است، اما تنظیم صریح این متغیر از هشدارهای مربوط به کشف (Discovery) مفسر Python جلوگیری میکند.
وقتی کارتان تمام شد، با فشردن CTRL+X و سپس Y و ENTER تغییرات را ذخیره کرده و فایل را ببندید.
تأیید Inventory
برای تأیید اینکه Ansible میتواند فایل Inventory شما را بهدرستی تجزیه (Parse) کند، اجرا کنید:
ansible-inventory --list -y
خروجی مشابه این را میبینید:
خروجی:
all:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
اگر خروجی، هاستها و متغیرهایی را که پیکربندی کردهاید منعکس کند، Inventory شما بهدرستی راهاندازی شده است.
مرحله ۵ — راهاندازی احراز هویت مبتنی بر کلید SSH
Ansible برای ارتباط با نودهای مدیریتشده از SSH استفاده میکند. قبل از اجرای هر دستور Ansible، مطمئن شوید نود کنترل شما میتواند بدون درخواست رمز عبور، از طریق SSH به هر نود مدیریتشده دسترسی پیدا کند.
تولید جفت کلید SSH روی نود کنترل
اگر هنوز روی نود کنترل خود جفت کلید SSH ندارید، با این دستور بسازید:
ssh-keygen -t ed25519 -C "ansible-control-node"
کلید ENTER را فشار دهید تا مکان پیشفرض فایل (~/.ssh/id_ed25519) پذیرفته شود. میتوانید بهصورت اختیاری یک Passphrase تنظیم کنید یا برای رد کردن آن، ENTER را بزنید.
کپی کلید عمومی به هر نود مدیریتشده
از ssh-copy-id برای کپی کلید عمومی خود به هر نود مدیریتشده استفاده کنید. بهجای root نام کاربر راهدور و بهجای 203.0.113.111 آدرس IP نود مدیریتشده را قرار دهید:
ssh-copy-id root@203.0.113.111
این دستور را برای هر نود مدیریتشده فهرستشده در Inventory خود تکرار کنید.
تست دستی اتصال SSH
قبل از اجرای Ansible، تأیید کنید که میتوانید بدون درخواست رمز عبور وارد هر نود مدیریتشده شوید:
ssh root@203.0.113.111
اگر با موفقیت متصل شدید، برای بازگشت به نود کنترل، exit تایپ کنید. اگر درخواست رمز عبور یا خطا دیدید، قبل از ادامه، پیکربندی کلید SSH خود را بررسی کنید.
مرحله ۶ — تست اتصال Ansible
پس از پیکربندی Inventory و کلیدهای SSH، تأیید کنید که Ansible میتواند با همه نودهای مدیریتشده شما ارتباط برقرار کند.
اجرای ماژول ping روی Inventory
از نود کنترل خود اجرا کنید:
ansible all -m ping -u root
این دستور از ماژول داخلی ping انصیبل برای تست اتصال به هر هاست موجود در Inventory شما استفاده میکند. فلگ -u root کاربر راهدور را مشخص میکند. اگر هاستهای شما کاربر sudo معمولی دارند، root را با آن نام کاربری جایگزین کنید.
ماژول ping این موارد را تست میکند:
- هر هاست روی شبکه در دسترس است
- اطلاعات احراز هویت SSH شما معتبر است
- هاست راهدور میتواند ماژولهای Ansible را با Python اجرا کند
تفسیر پاسخ موفق
پاسخ موفق به این شکل است:
خروجی:
server1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
پاسخ "pong" از یک هاست تأیید میکند که Ansible میتواند روی آن سرور احراز هویت کرده و ماژولها را اجرا کند.
اگر این اولین باری است که از طریق SSH به این سرورها متصل میشوید، از شما خواسته میشود اثر انگشت کلید هاست (Host Key Fingerprint) را تأیید کنید. برای هر هاست، yes تایپ کرده و ENTER را فشار دهید.
تفسیر و رفع خروجیهای خطای رایج
اگر یک هاست مقدار UNREACHABLE برگرداند، این موارد را بررسی کنید:
- آدرس IP هاست در Inventory شما درست است
- SSH روی نود مدیریتشده در حال اجراست
- کلید SSH شما به نود مدیریتشده کپی شده است
- هیچ قانون فایروالی پورت 22 را مسدود نکرده است
برای گزینههای بیشتر عیبیابی اتصال، راهنمای Cheat Sheet مربوط به Ansible را ببینید.
مرحله ۷ — اجرای دستورات Ad-Hoc
دستورات Ad-Hoc به شما اجازه میدهند بدون نوشتن Playbook، یک وظیفه واحد را روی یک یا چند نود مدیریتشده اجرا کنید. این دستورات برای عملیاتهای سریع و یکبارمصرف — مثل بررسی فضای دیسک، ریاستارت یک سرویس یا نصب یک پکیج — کاربردی هستند.
سینتکس دستور Ad-Hoc
سینتکس کلی یک دستور Ad-Hoc در Ansible به این شکل است:
ansible host-pattern -m module -a "module arguments" -u remote_user
host-pattern: هاستهای هدف (all، نام یک گروه یا نامهای مستعار هاستهای خاص)-m: ماژول Ansible مورد استفاده-a: آرگومانهایی که به ماژول پاس داده میشوند-u: کاربر راهدور برای اتصال
بررسی مصرف دیسک روی همه نودهای مدیریتشده
برای بررسی مصرف دیسک روی همه سرورهای Inventory خود:
ansible all -a "df -h" -u root
خروجی:
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
...
وقتی ماژول را با -m مشخص نکنید، Ansible بهصورت پیشفرض از ماژول command استفاده میکند که دستور شل دادهشده را روی هر هاست اجرا میکند.
بررسی uptime و جمعآوری اطلاعات سیستم
برای بررسی uptime همه هاستهای گروه servers:
ansible servers -a "uptime" -u root
برای نصب یک پکیج با ماژول apt:
ansible all -m apt -a "name=vim state=latest" -u root
میتوانید هاستهای منفرد یا چند هاستِ جداشده با دونقطه را هدف بگیرید:
ansible server1:server2 -m ping -u root
برای مثالها و الگوهای بیشتر، مقاله «مدیریت چند سرور با دستورات Ad Hoc در Ansible» را ببینید.
مرحله ۸ — نوشتن و اجرای اولین Playbook
Playbookها فایلهایی YAML هستند که مجموعهای از وظایف برای اجرا روی نودهای مدیریتشده تعریف میکنند. اگرچه دستورات Ad-Hoc برای کارهای سریع کافیاند، Playbookها به شما اجازه میدهند گردش کارهای اتوماسیونِ قابلتکرار و قابلکنترلنسخه تعریف کنید.
ساختار YAML و مبانی سینتکس Playbook
یک Playbook از یک یا چند Play تشکیل شده است. هر Play این موارد را مشخص میکند:
hosts: کدام نودهای مدیریتشده هدف قرار بگیرندbecome: آیا وظایف با دسترسی بالاتر (sudo) اجرا شوندtasks: فهرست مرتبشدهای از اقدامات برای انجام
یک Playbook ساده برای بهروزرسانی پکیجهای apt روی نودهای مدیریتشده
دایرکتوری جدیدی برای Playbookهای خود بسازید و سپس یک فایل Playbook ایجاد کنید:
mkdir ~/ansible-practice
nano ~/ansible-practice/update-apt.yml
محتوای زیر را اضافه کنید:
~/ansible-practice/update-apt.yml
---
- hosts: all
become: true
tasks:
- name: Update apt package cache
apt:
update_cache: yes
- name: Upgrade all packages to the latest version
apt:
upgrade: dist
- name: Remove unused dependencies
apt:
autoremove: yes
این Playbook به همه هاستهای Inventory شما متصل میشود، دستورات را با sudo اجرا میکند (become: true)، کش apt را بهروزرسانی میکند، همه پکیجها را ارتقا میدهد و وابستگیهای استفادهنشده را حذف میکند.
اجرای Playbook
Playbook را با دستور ansible-playbook اجرا کنید:
ansible-playbook ~/ansible-practice/update-apt.yml -u root
اگر از یک کاربر غیر root با دسترسی sudo استفاده میکنید، برای درخواست رمز عبور sudo، فلگ –ask-become-pass را اضافه کنید:
ansible-playbook ~/ansible-practice/update-apt.yml -u sammy --ask-become-pass
تفسیر خروجی Playbook
خروجی، وضعیت هر وظیفه را نشان میدهد:
خروجی:
PLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server1]
ok: [server2]
ok: [server3]
TASK [Update apt package cache] ************************************************
changed: [server1]
changed: [server2]
changed: [server3]
TASK [Upgrade all packages to the latest version] ******************************
changed: [server1]
changed: [server2]
changed: [server3]
TASK [Remove unused dependencies] **********************************************
ok: [server1]
ok: [server2]
ok: [server3]
PLAY RECAP *********************************************************************
server1 : ok=4 changed=2 unreachable=0 failed=0 skipped=0
server2 : ok=4 changed=2 unreachable=0 failed=0 skipped=0
server3 : ok=4 changed=2 unreachable=0 failed=0 skipped=0
okیعنی وظیفه با موفقیت اجرا شد و سیستم از قبل در وضعیت موردنظر بوده است.changedیعنی وظیفه تغییری در سیستم ایجاد کرده است.failedیعنی وظیفه با خطا روبرو شده است.
برای اطلاعات بیشتر درباره نوشتن Playbookها، مجموعه مقالات «نحوه نوشتن Playbookهای Ansible» را ببینید.
ارتقا و حذف Ansible
ارتقای Ansible
اگر Ansible را از طریق PPA یا مخزن پیشفرض نصب کردهاید، آن را همراه سایر پکیجهای سیستم خود ارتقا دهید:
sudo apt update
sudo apt upgrade ansible
اگر Ansible را با pipx نصب کردهاید، با این دستور ارتقا دهید:
pipx upgrade ansible
پس از ارتقا، نسخه جدید را تأیید کنید:
ansible --version
حذف Ansible
برای حذف Ansible نصبشده از طریق apt:
sudo apt remove ansible
sudo apt autoremove
برای حذف Ansible نصبشده از طریق pipx:
pipx uninstall ansible
عیبیابی مشکلات رایج
شکست تأیید کلید هاست SSH
اگر خطایی مانند Host key verification failed دیدید، اثر انگشت SSH نود مدیریتشده تغییر کرده یا هنوز پذیرفته نشده است. میتوانید با اتصال دستی به هاست از طریق SSH و پذیرش اثر انگشت، این مشکل را رفع کنید:
ssh root@203.0.113.111
هنگام درخواستِ افزودن هاست به فایل known hosts خود، yes تایپ کنید.
برای رد کردن (Skip) بررسی کلید هاست در همه اتصالات Ansible (در محیط production توصیه نمیشود)، این مورد را به فایل ansible.cfg خود اضافه کنید یا این متغیر محیطی را تنظیم کنید:
export ANSIBLE_HOST_KEY_CHECKING=False
پیدا نشدن مفسر Python روی نود مدیریتشده
اگر Ansible خطای MODULE FAILURE همراه با پیامی درباره مفسر Python گزارش کرد، ممکن است نود مدیریتشده Python 3 نصب نداشته باشد. آن را با این دستور نصب کنید:
ssh root@203.0.113.111 "apt update && apt install python3 -y"
همچنین مطمئن شوید متغیر ansible_python_interpreter در Inventory شما روی /usr/bin/python3 تنظیم شده است.
خطای Permission denied هنگام اتصال به نود مدیریتشده
خطای Permission denied (publickey) معمولاً یعنی کلید SSH شما به نود مدیریتشده کپی نشده است. دستور ssh-copy-id را دوباره اجرا کنید:
ssh-copy-id root@203.0.113.111
اگر بهعنوان کاربر غیر root متصل میشوید، مطمئن شوید آن کاربر روی نود مدیریتشده وجود دارد و کلید عمومی شما در فایل ~/.ssh/authorized_keys او قرار دارد.
دسترسینداشتن هاست Inventory
اگر دستور ansible all -m ping برای یک هاست مقدار UNREACHABLE برگرداند، بررسی کنید:
- آدرس IP در فایل Inventory شما درست است
- نود مدیریتشده روشن و متصل به شبکه است
- SSH روی نود مدیریتشده در حال اجراست:
sudo systemctl status ssh - هیچ فایروالی روی نود مدیریتشده، پورت 22 را مسدود نکرده است:
sudo ufw status
سوالات متداول
۱. تفاوت نصب Ansible با apt و با PPA مربوط به Ansible روی اوبونتو چیست؟
مخزن پیشفرض apt اوبونتو، نسخهای از Ansible را عرضه میکند که در زمان بستهبندی شدن نسخه اوبونتو بهروز بوده است. این نسخه بهروزرسانیهای عمده دریافت نمیکند؛ فقط پچهای امنیتی. PPA رسمی Ansible (ppa:ansible/ansible) آخرین نسخه پایدار پروژه Ansible را ارائه میدهد و ماژولهای جدیدتر، رفع اشکالها و بهبودهای عملکردی را در اختیارتان میگذارد. برای بیشتر راهاندازیهای production، روش PPA انتخاب بهتری است.
۲. آیا Ansible باید روی نودهای مدیریتشده نصب شود؟
خیر. Ansible از معماری بدون Agent پیروی میکند. شما فقط Ansible را روی نود کنترل نصب میکنید. نودهای مدیریتشده به Python 3 (که روی اوبونتو 22.04 و 24.04 بهصورت پیشفرض عرضه میشود) و یک سرور SSH در حال اجرا نیاز دارند. Ansible ماژولها را از طریق SSH به نودهای مدیریتشده ارسال میکند، آنها را اجرا کرده و سپس حذف میکند.
۳. آیا میتوانم Ansible را روی اوبونتو بدون دسترسی root نصب کنم؟
بله. با استفاده از دستور pipx install --include-deps ansible، ابزار Ansible در یک محیط مجازی سطح کاربر و بدون نیاز به sudo نصب میشود. این رویکرد برای محیطهای توسعه یا موقعیتهایی که دسترسی مدیریتی به سیستم ندارید، بسیار مناسب است.
۴. چطور تأیید کنم که Ansible روی اوبونتو بهدرستی نصب شده است؟
دستور ansible --version را در ترمینال خود اجرا کنید. خروجی، نسخه نصبشده Ansible، نسخه Python مورد استفاده آن، مسیر فایل پیکربندی و مسیرهای جستوجوی ماژول را نمایش میدهد. اگر دستور پیدا نشد، Ansible یا نصب نشده است یا در PATH سیستم شما قرار ندارد.
۵. آیا Ansible روی اوبونتو 22.04 با نودهای مدیریتشده اوبونتو 24.04 سازگار است؟
بله. Ansible برای ماژولهای استاندارد، بیننسخهای سازگار است. یک نود کنترل در حال اجرای اوبونتو 22.04 میتواند نودهایی با اوبونتو 24.04 را مدیریت کند و برعکس؛ تا زمانی که Python 3 و SSH روی نودهای مدیریتشده در دسترس باشند. ارتباط Ansible از طریق SSH انجام میشود و به تطابق نسخه سیستمعامل نود مدیریتشده با نود کنترل وابسته نیست.
جمعبندی
در این آموزش، Ansible را روی اوبونتو با روش PPA نصب کردید، فایل Inventory را با هاستهای مدیریتشده پیکربندی کردید، احراز هویت مبتنی بر کلید SSH را راهاندازی کردید، اتصال را با ماژول ping تست کردید، دستورات Ad-Hoc اجرا کردید و اولین Playbook خود را ساختید. همچنین با روشهای نصب جایگزین با pipx و مخزن پیشفرض اوبونتو آشنا شدید و مراحل عیبیابی رایج مشکلات SSH و اتصال را مرور کردید.
Ansible پایهای برای اتوماسیونِ آمادهسازی سرورها، استقرار اپلیکیشنها و مدیریت پیکربندی مستمر در سراسر زیرساخت شما فراهم میکند. با آماده بودن نود کنترل و Inventory، میتوانید ساخت Playbookهای پیچیدهتر را برای اتوماسیون وظایف روزمره روی همه سرورهایتان آغاز کنید.




