Python لأتمتة الشبكات
استخدم مكتبات Python مثل `paramiko` و`netmiko` للتفاعل مع أجهزة الشبكة عبر SSH وأتمتة إعداداتها.
Python لأتمتة الشبكات درس مجاني في Linux Networking & TCP/IP for Developers على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Linux Networking & TCP/IP for Developers، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Linux Networking & TCP/IP for Developers 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Python for Network Automation
Welcome to network automation with Python! Python is a powerful and versatile language, making it a favorite for automating network tasks.
It simplifies complex operations, helps manage devices, and integrates with various network APIs. Let's see how!
Introducing Paramiko
Our first tool is Paramiko. It's a Python library that implements the SSHv2 protocol. Think of it as a low-level toolkit for secure shell (SSH) connections.
- SSH Client/Server: Can act as both client and server.
- Secure: Uses strong encryption for communication.
- Versatile: Great for general-purpose SSH tasks, like running commands or transferring files.
Paramiko: Basic SSH Connection
Here's how you can use Paramiko to connect to a remote server and execute a command. Remember to replace the placeholder credentials!
import paramiko
def connect_and_run(hostname, username, password, command):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(hostname=hostname, username=username, password=password, timeout=5)
stdin, stdout, stderr = client.exec_command(command)
print(f"Output:\n{stdout.read().decode().strip()}")
print(f"Errors:\n{stderr.read().decode().strip()}")
except paramiko.AuthenticationException:
print("Authentication failed, please check your credentials.")
except paramiko.SSHException as e:
print(f"SSH connection error: {e}")
except Exception as e:
print(f"An error occurred: {e}")
finally:
client.close()
if __name__ == "__main__":
# Replace with your actual server details and command
HOST = "your_server_ip"
USER = "your_username"
PASS = "your_password"
CMD = "echo Hello from Paramiko!"
print("Attempting to connect with Paramiko...")
connect_and_run(HOST, USER, PASS, CMD)
print("Note: This code won't connect without a live server and valid credentials.")Handling Command Output
When you run client.exec_command(command), it returns three file-like objects: stdin, stdout, and stderr.
- stdout: The standard output of the command.
- stderr: Any error messages produced by the command.
- stdin: Used to send input to the command (less common for simple exec).
Always decode the output (e.g., .decode()) as it comes as bytes.
Paramiko for File Transfers (SFTP)
Beyond running commands, Paramiko also supports SFTP (SSH File Transfer Protocol). This allows you to securely copy files to and from remote systems.
You can use it to upload configuration files, download logs, or manage software packages on your network devices.
Introducing Netmiko
While Paramiko is powerful, interacting with specific network devices often requires extra logic for prompts, pagination, and different command modes. That's where Netmiko shines!
- Built on Paramiko: Uses Paramiko under the hood.
- Device-Specific: Supports many vendors (Cisco, Juniper, Arista, etc.).
- Simplified API: Handles common network device interactions automatically.
Netmiko: Connect to Network Devices
Netmiko uses a dictionary to define device details, making connections straightforward. It simplifies many network automation tasks.
from netmiko import ConnectHandler
def connect_with_netmiko(device_info):
try:
print(f"Attempting to connect to {device_info['host']} with Netmiko...")
net_connect = ConnectHandler(**device_info)
print(f"Successfully connected to {net_connect.base_prompt}")
net_connect.disconnect()
print("Disconnected from device.")
except Exception as e:
print(f"Netmiko connection error: {e}")
if __name__ == "__main__":
# Replace with your actual device details
device = {
"device_type": "cisco_ios", # e.g., cisco_ios, juniper_junos, etc.
"host": "your_device_ip",
"username": "your_username",
"password": "your_password",
"secret": "your_enable_secret" # Optional, for enable mode
}
connect_with_netmiko(device)
print("Note: This code won't connect without a live device and valid credentials.")Netmiko: Sending Configuration
Netmiko excels at sending configuration commands. Use send_config_set() for a list of commands and send_command() for operational commands.
from netmiko import ConnectHandler
def send_config_to_device(device_info, config_commands):
try:
print(f"Connecting to {device_info['host']} to send config...")
net_connect = ConnectHandler(**device_info)
print("Sending configuration commands...")
output = net_connect.send_config_set(config_commands)
print(f"Configuration Output:\n{output}")
net_connect.disconnect()
print("Disconnected.")
except Exception as e:
print(f"Netmiko config error: {e}")
if __name__ == "__main__":
# Replace with your actual device details
device = {
"device_type": "cisco_ios",
"host": "your_device_ip",
"username": "your_username",
"password": "your_password",
"secret": "your_enable_secret"
}
# Example configuration commands
config_lines = [
"hostname CoddyRouter",
"no ip domain lookup",
"line vty 0 4",
"login local"
]
send_config_to_device(device, config_lines)
print("Note: This code won't apply config without a live device and valid credentials.")Best Practices & Security
When automating, always prioritize security and robustness:
- Credential Management: Never hardcode passwords. Use environment variables, secure vaults, or input prompts.
- Error Handling: Use
try-exceptblocks to catch connection issues or command failures gracefully. - Logging: Log all actions and outputs for auditing and troubleshooting.
- Idempotency: Design scripts to be idempotent (running them multiple times has the same effect as running once).
Paramiko vs. Netmiko
You've seen both Paramiko and Netmiko. Now, let's test your understanding of when to use which tool for your network automation tasks.
Recap: Python for Net Automation
Great job! In this lesson, you learned about:
- Paramiko: A low-level Python library for general SSH client/server tasks and SFTP.
- Netmiko: A higher-level library built on Paramiko, specifically designed for automating interactions with various network devices.
These tools empower you to write powerful Python scripts to manage, configure, and monitor your network infrastructure programmatically!
الأسئلة الشائعة
هل درس «Python لأتمتة الشبكات» مجاني؟
نعم — نص درس «Python لأتمتة الشبكات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Linux Networking & TCP/IP for Developers، انتقل إلى CoddyKit PRO. تتضمن دورة Linux Networking & TCP/IP for Developers 4 دروس في المجموع.
ماذا ستتعلم في «Python لأتمتة الشبكات»؟
استخدم مكتبات Python مثل `paramiko` و`netmiko` للتفاعل مع أجهزة الشبكة عبر SSH وأتمتة إعداداتها. تتمرن على Linux Networking & TCP/IP for Developers مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Linux Networking & TCP/IP for Developers؟
لا تُشترط خبرة سابقة. Linux Networking & TCP/IP for Developers على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «Python لأتمتة الشبكات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Linux Networking & TCP/IP for Developers هذا؟
نعم. كل درس في Linux Networking & TCP/IP for Developers يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- برمجة Bash النصية للشبكات
- Python لأتمتة الشبكات
- واجهات REST API لأجهزة الشبكة
- تهيئة الشبكة باستخدام Ansible