Ketika berhubungan dengan jaringan, ada berbagai perspektif, dan seseorang tidak dapat menguasai bagaimana berinteraksi dengan semua peranti di dunia nyata. Walau bagaimanapun, semua peranti rangkaian mempunyai fungsi yang serupa yang, apabila dikuasai, dapat automatik.
Seperti yang disebutkan dalam tutorial saya yang lain, pengaturcara malas dan selalu berusaha untuk meningkatkan kecekapan-dengan itu melakukan kerja paling sedikit 🙂 -, dan ketika menyangkut masalah berkaitan rangkaian secara automatik, banyak yang sering melompat peluang.
Dalam panduan ringkas hari ini, saya akan memperkenalkan anda untuk mengautomasikan SSH menggunakan dua perpustakaan Python yang popular: Paramiko dan Netmiko. Kami akan membuat skrip python sederhana menggunakan dua perpustakaan untuk mengautomasikan SSH dan berinteraksi dengan peranti rangkaian.
Saya memilih pendekatan ini kerana panduan yang terutama tertumpu pada perbezaan antara Paramiko dan Netmiko akan terlalu pendek-jadual sederhana akan mencukupi-dan tidak konkrit. Dengan menggunakan pendekatan ini, anda akan dapat bereksperimen dengan mereka dan melihat yang melakukan apa dan bagaimana.
Mari kita mulakan:
Apa itu Paramiko?
Laman web rasmi mendefinisikan Paramiko sebagai berikut:
"Paramiko adalah Python (2.7, 3.4+) pelaksanaan protokol SSHv2 yang menyediakan fungsi pelanggan dan pelayan."
Saya harap itu jelas. Secara asasnya, ia bermaksud Paramiko adalah perpustakaan python untuk berinteraksi dengan SSH.
Sekarang:
Apabila kita mahu log masuk ke pelayan, kita tahu bahawa kita pergi ke terminal-cmd, xterm, MobaXterm, atau hanya log masuk Terminal Gnome, kemudian jalankan perintah.
Mari lihat bagaimana Paramiko dapat menolongnya.
Cara Memasang Paramiko
Untuk menggunakan Paramiko, kita perlu memasangnya. Anda mesti memasang Python - sebaiknya python 2 - dipasang pada mesin anda. Dengan menggunakan pip, masukkan arahan di bawah untuk memasang Paramiko.
sudo pip pasang ParamikoPython -m pip memasang paramiko
Sekiranya anda ingin membina dari sumbernya, rujuk repositori Paramiko GitHub rasmi menggunakan sumber yang disediakan:
https: // github.com / paramiko / paramiko
Menyambung ke SSH menggunakan Paramiko
Untuk menyambung ke SSH menggunakan Paramiko, kami menggunakan kaedah connect (), yang memerlukan parameter nama host-ia juga menyokong parameter lain, tetapi oleh kerana kami tidak memerlukannya, kami boleh mengabaikannya buat masa ini.
sambung (nama host, port = 22, nama pengguna = Tiada, kata laluan = Tiada, pkey = Tiada, key_filename = Tiada, timeout = Tiada, allow_agent = True, look_for_keys = True, compress = False, sock = None, gss_auth = False, gss_kex = Salah, gss_deleg_creds = Betul, gss_host = Tiada, banner_timeout = Tidak ada, auth_timeout = Tiada, gss_trust_dns = Betul, frasa laluan = Tiada, dilumpuhkan_algoritma = Tiada)Menggunakan fungsi ini, yang terdapat dalam paramiko. Pelanggan.Pelanggan SSH.sambungkan (), sambungkan ke nama host yang ditentukan, dan mengesahkannya. Sistem sasaran diperiksa terhadap kunci sistem tempatan yang ada (dipercayai).
Sekiranya anda mempunyai fail hos tertentu, anda boleh menggunakan kaedah load_host_keys () dan menetapkan klien Paramiko SSH untuk menambahkan mana-mana hos yang tidak diketahui ke paramiko.AutoAddPolicy (). Sekiranya anda menggunakan klien dalam sistem yang tidak dipercayai, elakkan menggunakan paramiko.AutoAddPolicy.
Menghubungkan SSH Dengan Kata Laluan
Dari kaedah sambung, kita dapat melihat bahawa kita mempunyai parameter nama pengguna dan kata laluan yang boleh kita gunakan untuk menyambung ke sistem. Pertimbangkan kod di bawah untuk menghubungkan SSH melalui nama pengguna dan kata laluan.
dari paramiko import util, SSHClient, AutoAddPolicypelanggan = SSHClient ()
pelanggan.load_system_host_keys ()
pelanggan.load_host_keys ("/ rumah / linuxhint /.ssh / dikenali_hosts ")
pelanggan.set_missing_host_key_policy (AutoAddPolicy ())
pelanggan.sambung (nama host = "linuxhint.com ", nama pengguna =" admin ", kata laluan =" AdminPassword ")
pelanggan.tutup ()
Sekiranya anda menghadapi masalah semasa mengimport kelas Pelanggan Paramiko SSH, rujuk soalan stackoverflow berikut:
https: // aliran tumpukan.com / soalan / 29378234 / python-import-paramiko-error-cannot-import-name-util
Menyambungkan SSH Melalui Kunci
Seperti yang kita semua ketahui, menyambungkan SSH melalui kunci lebih selamat daripada menggunakan kata laluan mentah. Paramiko mengetahui perkara ini dan membolehkan anda meneruskan fail kunci dan menyambung ke sistem sasaran.
Pertimbangkan kod di bawah.
dari paramiko import SSHClientdari paramiko AutoAddPolicy
pelanggan = SSHClient ()
pelanggan.load_system_host_keys ()
pelanggan.load_host_keys ('/ rumah / linuxhint /.ssh / dikenali_hosts ')
pelanggan.set_missing_host_key_policy (AutoAddPolicy ())
pelanggan.sambung ('linuxhint.com ', nama pengguna =' admin ', key_filename =' ssh_key.pem ', frasa laluan =' AdminPassphrase ')
pelanggan.tutup ()
Menjalankan Perintah Melalui SSH
Sebaik sahaja anda mendapat akses ke sistem menggunakan SSH (melalui Paramiko), anda dapat menjalankan serangkaian perintah. Pertimbangkan coretan kod berikut:
pelanggan = SSHClient ()pelanggan.load_system_host_keys ()
pelanggan.sambung ('linuxhint.com ')
stdin, stdout, stderr = pelanggan.exec_command ('bash')
stdin.tutup ()
stdout.tutup ()
stderr.tutup ()
pelanggan.tutup ()
Pada ketika ini, anda tahu bagaimana menggunakan perpustakaan Paramiko untuk mengautomasikan SSH. Seperti yang anda bayangkan, ini bukan panduan Paramiko yang komprehensif, dan kami tidak menyelidiki perincian yang berkaitan dengan apa yang dilakukan oleh alat ini. Tujuannya adalah untuk menunjukkan kepada anda pelaksanaannya.
Untuk maklumat lebih lanjut, sila rujuk bahan yang lebih komprehensif seperti:
https: // dokumen.paramiko.org / en / stabil /
https: // github.com / paramiko / paramiko
Apa itu Netmiko?
Netmiko sangat popular dan serupa dengan Paramiko dengan beberapa perbezaan yang ketara:
- Sokongan peranti
- Persembahan
Semasa bekerja di rangkaian dunia nyata, anda akan menemui pelbagai model peranti. Oleh itu, anda memerlukan alat yang boleh dipercayai yang dapat membantu anda mengautomasikan prosesnya. Dalam beberapa keadaan, anda tidak dapat menggunakan Paramiko kerana keterbatasan sokongan peranti, menyebabkan kelewatan dan kerosakan - anda boleh memeriksa peranti yang disokong pada dokumentasi rasmi. Ia juga jauh lebih perlahan daripada Netmiko.
Paramiko lebih merupakan modul SSH generik yang boleh anda gunakan untuk mengautomasikan tugas SSH tertentu. Sebaliknya, Netmiko lebih luas dan dioptimumkan dengan baik untuk menguruskan peranti rangkaian seperti suis dan penghala.
Abstraksi adalah kelebihan lain menggunakan Netmiko. Netmiko menyediakan fungsi mudah yang boleh anda gunakan untuk mematikan paging. Sebagai contoh, output dari sesi SSH mungkin lebih dari satu halaman. Dengan menggunakan sesi SSH biasa, anda perlu menambahkan ruang seperti input untuk menunjukkan halaman seterusnya. Netmiko memberi anda cara untuk mengatasi perkara ini.
Kelebihan Netmiko berbanding Paramiko adalah:
- Sambungkan secara automatik melalui SSH ke peranti rangkaian.
- Ini menyediakan pelaksanaan perintah menunjukkan dan output data yang lebih sederhana.
- Menyediakan fungsi yang lebih mudah untuk perintah konfigurasi termasuk melakukan tindakan.
- Sokongan pelbagai peranti di seluruh vendor dan platform peranti rangkaian.
Cara Memasang Netmiko
Memasang Netmiko juga agak mudah:
Yang harus anda lakukan ialah memastikan Python dan pip dipasang pada sistem anda dan melaksanakan perintah:
pip pasang netmikopython -m pip memasang netmiko
Bersambung ke SSH menggunakan Netmiko
Menyambung ke sesi SSH peranti menggunakan Netmiko sangat mudah. Ingat bahawa Netmiko lebih dioptimumkan untuk peranti seperti penghala dan bukan SSH generik.
Pertimbangkan coretan kod di bawah.
#import moduldari netmiko import ConnectHandler
# maklumat peranti dalam format kamus.
device_config =
"Device_type": "cisco_ios",
"Ip": "192.168.0.1 ",
"Nama pengguna": "pentadbir",
"Kata laluan": "kata laluan",
"Rahsia": "kata laluan"
sambungan = ConnectHandler (** device_config)
Dengan menggunakan kod mudah di atas, anda akan mempunyai sambungan SSH ke peranti. Anda juga boleh menyampaikan maklumat peranti secara langsung dan bukan menyebarkannya ke kamus.
Setelah anda menjalani sesi SSH, anda dapat menjalankan perintah menggunakan fungsi send_command (). Fungsi yang disokong oleh netmiko termasuk:
Kaedah yang biasa digunakan Netmiko:
- net_connect.send_command () - Fungsi ini mengirimkan perintah ke saluran rangkaian dan mengembalikan output berdasarkan corak.
- net_connect.send_command_timing () - Mengembalikan output berdasarkan masa dari arahan yang dihantar ke saluran rangkaian.
- net_connect.send_config_set () - Menerapkan tetapan konfigurasi ke peranti jauh.
- net_connect.send_config_from_file () - Menggunakan tetapan konfigurasi dari fail luaran
- net_connect.save_config () - Mengeksport dan menyimpan konfigurasi berjalan sebagai konfigurasi permulaan.
- net_connect.aktifkan () - Pertanyaan peranti untuk mengaktifkan mod aktif.
- net_connect.find_prompt () - Kembalikan permintaan penghala semasa
- net_connect.komit () - Menjalankan perintah komit pada peranti seperti Juniper dan IOS-XR
- net_connect.putuskan sambungan () - Menamatkan sesi
- net_connect.write_channel () - Membolehkan menulis tahap rendah
- net_connect.read_channel () - Membolehkan membaca tahap rendah.
Seperti yang telah disebutkan sebelumnya, ini bukan panduan bagaimana menggunakan Netmiko tetapi petunjuk ringkas tentang apa yang Netmiko dan Paramiko. Lihat dokumentasi rasmi untuk maklumat lebih lanjut.
https: // github.com / ktbyers / netmiko
Kesimpulannya
Dalam panduan ringkas ini, kami membincangkan cara menggunakan paramiko untuk sambungan SSH generik dan pengurusan peranti rangkaian Netmiko, yang menggambarkan perbezaan antara keduanya.
Untuk menyimpulkan:
Paramiko | Netmiko |
Berguna untuk penggunaan ssh generik | Paling berguna untuk konfigurasi peranti rangkaian. |
Sokongan terhad untuk pelbagai rangkaian peranti. | Menyokong pelbagai rangkaian peranti. |