Ağ oluşturma söz konusu olduğunda, çok çeşitli bakış açıları vardır ve gerçek dünyadaki tüm cihazlarla nasıl etkileşime geçileceği konusunda uzman olunamaz. Ancak, tüm ağ aygıtları, yönetildiğinde otomatikleştirilebilen benzer işlevleri paylaşır.
Diğer derslerimde belirtildiği gibi, programcılar tembeldir ve her zaman verimliliği artırmaya çalışırlar - bu nedenle en az işi yaparlar 🙂 - ve ağla ilgili sorunları otomatikleştirmeye gelince, çoğu zaman çoğu zaman şansa atlar.
Bugünün hızlı kılavuzunda, iki popüler Python kitaplığı kullanarak SSH'yi otomatikleştirmeyi size tanıtacağım: paramiko ve netmiko. SSH'yi otomatikleştirmek ve ağ cihazlarıyla etkileşim kurmak için iki kitaplığı kullanarak basit python betikleri oluşturacağız.
Bu yaklaşımı seçtim çünkü öncelikle Paramiko ve Netmiko arasındaki farklara odaklanan bir rehber çok kısa olurdu - basit bir tablo yeterli olurdu - ve somut olmaması. Bu yaklaşımı benimseyerek, onlarla daha iyi deneyler yapabilecek ve hangisinin neyi, nasıl yaptığını görebileceksiniz.
Başlayalım:
Paramiko nedir?
Resmi web sitesi Paramiko'yu şu şekilde tanımlıyor:
“Paramiko bir Python'dur (2.7, 3.4+) hem istemci hem de sunucu işlevselliği sağlayan SSHv2 protokolünün uygulanması.”
umarım açık olmuştur. Temel olarak, demek Paramiko, SSH ile etkileşim için bir python kütüphanesidir.
Şimdi:
Bir sunucuya giriş yapmak istediğimizde, terminal-cmd, xterm, MobaXterm veya sadece Gnome Terminal-login'e gittiğimizi ve ardından komutları çalıştırdığımızı biliyoruz.
Paramiko'nun bu konuda nasıl yardımcı olabileceğini görelim.
Paramiko Nasıl Kurulur
Paramiko'yu kullanmak için kurmamız gerekiyor. Makinenizde Python - tercihen python 2 - kurulu olmalıdır. Pip kullanarak Paramiko'yu kurmak için aşağıdaki komutu girin.
sudo pip Paramiko'yu kurunPython -m pip yükleme paramiko
Kaynaktan derleme yapmak istiyorsanız, sağlanan kaynağı kullanarak resmi Paramiko GitHub deposuna bakın:
https://github.com/paramiko/paramiko
Paramiko kullanarak SSH'ye bağlanma
Paramiko kullanarak SSH'ye bağlanmak için, hostname parametresini gerektiren connect() yöntemini kullanırız - diğer parametreleri de destekler, ancak bunlara ihtiyacımız olmadığı için şimdilik onları görmezden gelebiliriz.
connect(hostname, port=22, kullanıcı adı=Yok, şifre=Yok, pkey=Yok, key_filename=Yok, zaman aşımı=Yok, allow_agent=Doğru, look_for_keys=Doğru, sıkıştırma=Yanlış, çorap=Yok, gss_auth=Yanlış, gss_kex= False, gss_deleg_creds=Doğru, gss_host=Yok, banner_timeout=Yok, auth_timeout=Yok, gss_trust_dns=Doğru, passphrase=Yok, disable_algorithms=Yok)Paramiko'da bulunan bu işlevi kullanma. müşteri.SSHC istemcisi.connect(), belirtilen ana bilgisayar adına bağlanır ve kimliğini doğrular. Hedef sistem, mevcut yerel sistem anahtarlarına karşı kontrol edilir (güvenilir).
Belirli bir ana bilgisayar dosyanız varsa, load_host_keys() yöntemini kullanabilir ve Paramiko SSH istemcisini bilinmeyen herhangi bir ana bilgisayarı paramiko'ya ekleyecek şekilde ayarlayabilirsiniz.Otomatik Ekleme Politikası(). İstemciyi güvenilmeyen sistemlerde kullanıyorsanız paramiko kullanmaktan kaçının.Otomatik Ekleme Politikası.
SSH'yi Parolayla Bağlama
Connect yönteminden, sisteme bağlanmak için kullanabileceğimiz kullanıcı adı ve şifre parametrelerine sahip olduğumuzu görebiliriz. Kullanıcı adı ve şifre ile SSH'ye bağlanmak için aşağıdaki kodu göz önünde bulundurun.
paramiko'dan import util, SSHClient, AutoAddPolicyistemci = SSHClient()
müşteri.load_system_host_keys()
müşteri.load_host_keys("/home/linuxhint/.ssh/bilinen_hostlar")
müşteri.set_missing_host_key_policy(AutoAddPolicy())
müşteri.connect(hostname="linuxhint.com", kullanıcı adı="admin", password="AdminPassword")
müşteri.kapat()
Paramiko SSHClient sınıfını içe aktarırken sorunlarla karşılaşırsanız, aşağıdaki yığın akışı sorusuna bakın:
https://yığın akışı.com/questions/29378234/python-import-paramiko-error-cannot-import-name-util
SSH'yi Anahtar Üzerinden Bağlama
Hepimizin bildiği gibi, SSH'yi anahtarla bağlamak, ham parola kullanmaktan daha güvenlidir. Paramiko bunu biliyor ve anahtar dosyasını geçirmenize ve hedef sisteme bağlanmanıza izin veriyor.
Aşağıdaki kodu göz önünde bulundurun.
paramiko'dan ithalat SSHClientparamiko AutoAddPolicy'den
istemci = SSHClient()
müşteri.load_system_host_keys()
müşteri.load_host_keys('/home/linuxhint/.ssh/bilinen_host'lar')
müşteri.set_missing_host_key_policy(AutoAddPolicy())
müşteri.connect('linuxhint.com',username='admin',key_filename='ssh_key.pem', passphrase='AdminPassphrase')
müşteri.kapat()
SSH Üzerinden Komutları Çalıştırma
SSH kullanarak (Paramiko üzerinden) sisteme eriştiğinizde, bir dizi komut çalıştırabilirsiniz. Aşağıdaki kod parçacığını göz önünde bulundurun:
istemci = SSHClient()müşteri.load_system_host_keys()
müşteri.connect('linuxhint.com')
stdin, stdout, stderr = istemci.exec_command('bash”)
standart.kapat()
standart.kapat()
standart.kapat()
müşteri.kapat()
Bu noktada, SSH'yi otomatikleştirmek için Paramiko kitaplığını nasıl kullanacağınızı biliyorsunuz. Tahmin edebileceğiniz gibi, bu kapsamlı bir Paramiko kılavuzu değil ve aracın ne yaptığıyla ilgili ayrıntılara da girmiyoruz. Amaç, size uygulamasını göstermekti.
Daha fazla bilgi için lütfen aşağıdakiler gibi daha kapsamlı materyallere bakın:
https://docs.paramiko.kuruluş/tr/kararlı/
https://github.com/paramiko/paramiko
Netmiko nedir?
Netmiko çok popülerdir ve birkaç önemli farkla Paramiko'ya benzer:
- Cihaz desteği
- Verim
Gerçek dünya ağları üzerinde çalışırken çeşitli cihaz modelleriyle karşılaşacaksınız. Bu nedenle, süreci otomatikleştirmenize yardımcı olabilecek güvenilir bir araca ihtiyacınız var. Bazı durumlarda, cihaz desteği sınırlamaları nedeniyle Paramiko'yu kullanamazsınız, bu da gecikmelere ve çökmelere neden olur - resmi belgelerde desteklenen cihazları kontrol edebilirsiniz. Ayrıca Netmiko'dan oldukça yavaştır.
Paramiko, belirli SSH görevlerini otomatikleştirmek için kullanabileceğiniz daha genel bir SSH modülüdür. Buna karşılık Netmiko, anahtarlar ve yönlendiriciler gibi ağ cihazlarını yönetmek için daha geniş ve iyi optimize edilmiştir.
Netmiko kullanmanın diğer bir avantajı da soyutlamadır. Netmiko, sayfalamayı devre dışı bırakmak için kullanabileceğiniz basit bir işlev sağlar. Örneğin, SSH oturumundan bir çıktı birden fazla sayfa olabilir. Normal SSH oturumlarını kullanarak, sonraki sayfayı göstermek için giriş benzeri bir alan eklemeniz gerekecek. Netmiko size bunu geçersiz kılmanın bir yolunu sunar.
Netmiko'nun Paramiko'ya göre avantajları şunlardır:
- SSH aracılığıyla ağ cihazlarına otomatik olarak bağlanın.
- Gösteri komutlarının ve veri çıktısının daha basit yürütülmesini sağlar.
- Taahhüt eylemleri de dahil olmak üzere yapılandırma komutları için daha basit işlevsellik sağlar.
- Ağ cihazı satıcıları ve platformları arasında çoklu cihaz desteği.
Netmiko Nasıl Kurulur
Netmiko'yu kurmak da nispeten kolaydır:
Tek yapmanız gereken, sisteminizde Python ve pip'in kurulu olduğundan emin olmak ve şu komutu yürütmek:
pip kurulum netmikopiton -m pip netmiko yükleyin
Netmiko kullanarak SSH'ye bağlanma
Netmiko kullanarak cihaz SSH oturumlarına bağlanmak çok basittir. Netmiko'nun genel SSH için değil, yönlendiriciler gibi cihazlar için daha optimize edildiğini unutmayın.
Aşağıdaki kod parçasını göz önünde bulundurun.
#import modüllerinetmiko import ConnectHandler'dan
# cihaz bilgisi sözlük biçiminde.
device_config =
"device_type": "cisco_ios",
"ip": "192.168.0.1”,
"kullanıcı adı": "yönetici",
"şifre": "şifre",
"gizli": "şifre"
bağlantı = ConnectHandler(**device_config)
Yukarıdaki basit kodu kullanarak cihaza bir SSH bağlantınız olacaktır. Cihaz bilgilerini bir sözlüğe aktarmak yerine doğrudan iletebilirsiniz.
Bir SSH oturumunuz olduğunda, send_command() işlevini kullanarak komutları çalıştırabilirsiniz. netmiko tarafından desteklenen işlevler şunları içerir:
Netmiko yaygın olarak kullanılan yöntemler:
- net_connect.send_command() - Bu işlev, komutları bir ağ kanalına gönderir ve kalıba göre çıktı döndürür.
- net_connect.send_command_timing() - Bir ağ kanalına gönderilen bir komutun zamanlamasına göre çıktı verir.
- net_connect.send_config_set() - Yapılandırma ayarlarını uzak cihazlara uygular.
- net_connect.send_config_from_file() - Harici bir dosyadan yapılandırma ayarlarını uygular
- net_connect.save_config() - Çalışan yapılandırmayı başlangıç yapılandırması olarak dışa aktarır ve kaydeder.
- net_connect.enable() - Etkinleştirme modunu etkinleştirmek için cihazı sorgular.
- net_connect.find_prompt() - Geçerli yönlendirici istemini döndürür
- net_connect.commit() - Juniper ve IOS-XR gibi cihazlarda taahhüt komutlarını çalıştırır
- net_connect.connect() - Oturumları sonlandırır
- net_connect.write_channel() - Düşük seviyeli yazmayı etkinleştirir
- net_connect.read_channel() - Düşük seviyeli okumayı etkinleştirir.
Daha önce belirtildiği gibi, bu Netmiko'nun nasıl kullanılacağına dair bir rehber değil, Netmiko ve Paramiko'nun ne olduğuna dair basit bir yönlendirmedir. Daha fazla bilgi için resmi belgelere bakın.
https://github.com/ktbyers/netmiko
Sonuç
Bu hızlı kılavuzda, ikisi arasındaki farkları gösteren genel SSH bağlantıları ve Netmiko ağ cihazı yönetimi için paramiko'nun nasıl kullanılacağını tartıştık.
Sonuçlandırmak için:
paramiko | netmiko |
Genel ssh kullanımı için kullanışlıdır | Ağ cihazı yapılandırması için en kullanışlı. |
Çok çeşitli ağ cihazları için sınırlı destek. | Çok çeşitli ağ cihazlarını destekler. |