Linux Networking & TCP/IP for Developers · レッスン

ネットワーク自動化のためのPython

`paramiko`や`netmiko`などのPythonライブラリを使い、SSH経由でネットワークデバイスと連携して設定を自動化します。

レッスン 2/411 ステップ

「ネットワーク自動化のためのPython」はCoddyKit上の無料Linux Networking & TCP/IP for Developersレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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-except blocks 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!

無料で開始

AI チューターと学ぶ Linux Networking & TCP/IP for Developers — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
12
レッスン
48

よくある質問

「ネットワーク自動化のためのPython」レッスンは無料ですか?

はい。「ネットワーク自動化のためのPython」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Networking & TCP/IP for Developersコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Networking & TCP/IP for Developersコースには全4レッスンが含まれています。

「ネットワーク自動化のためのPython」で何を学びますか?

`paramiko`や`netmiko`などのPythonライブラリを使い、SSH経由でネットワークデバイスと連携して設定を自動化します。 ブラウザで直接実行するハンズオンコードでLinux Networking & TCP/IP for Developersを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Linux Networking & TCP/IP for Developersを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLinux Networking & TCP/IP for Developersは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ネットワーク自動化のためのPython」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLinux Networking & TCP/IP for Developersレッスンでコードを書いて実行できますか?

はい。すべてのLinux Networking & TCP/IP for Developersレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ネットワーク向けBashスクリプティング
  2. ネットワーク自動化のためのPython
  3. ネットワークデバイス向けREST API
  4. Ansibleによるネットワーク設定
← Linux Networking & TCP/IP for Developersに戻る