關(guān)于配色的網(wǎng)站千鋒教育靠譜嗎
文章目錄
-
目錄
文章目錄
前言
實(shí)驗(yàn)環(huán)境準(zhǔn)備
一.input函數(shù)
?代碼分段解析
二.getpass模塊?
前言
????????在前面的SSH模塊章節(jié)中,我們都是將提供SSH服務(wù)的設(shè)備的賬戶/密碼直接寫入到python代碼中,這樣很容易導(dǎo)致賬戶/密碼泄露,而使用Python中的用戶交互模塊,如input函數(shù)和getpass函數(shù)等,讓用戶自行輸入賬戶/密碼,則可以有效避免信息泄露。
實(shí)驗(yàn)環(huán)境準(zhǔn)備
基礎(chǔ)配置:
- 路由器各接口配置IP
- 交換機(jī)創(chuàng)建對應(yīng)VLAN和vlanif接口,vlanif接口配置IP
- 兩臺(tái)交換機(jī)開啟SSH服務(wù),并在本地電腦使用遠(yuǎn)程工具(如:Xshell)成功連接。
實(shí)驗(yàn)?zāi)康?#xff1a;
- 配置getpass模塊和input函數(shù)實(shí)現(xiàn)交互式的SSH用戶名和密碼輸入
- 配置for循環(huán)同時(shí)給兩臺(tái)交換機(jī)配置vlan 100~vlan 103
一.input函數(shù)
? ?
在 Python 中,input
?函數(shù)是一個(gè)內(nèi)置函數(shù),主要用于從標(biāo)準(zhǔn)輸入(通常是鍵盤)讀取用戶輸入的信息,input
?函數(shù)的默認(rèn)行為是將用戶輸入的任何內(nèi)容都作為字符串類型返回給Python程序。
實(shí)驗(yàn)代碼
import paramiko
import timefor ip in ["192.168.10.1","192.168.9.2"]:username = input("請輸入用戶名:")password = input("請輸入密碼:")ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip,username=username,password=password)print(f"Successfully to connect {ip}")commend = ssh_client.invoke_shell()commend.send("sys\n")for vlan_id in range(100,104):print(f"正在創(chuàng)建vlan {vlan_id}")commend.send(f"vlan {vlan_id}\n")time.sleep(2)output = commend.recv(65535).decode("ascii")print("命令行界面配置過程:")print(output)time.sleep(2)
ssh_client.close()
?代碼分段解析
導(dǎo)入模塊:
import paramiko
:導(dǎo)入?paramiko
?模塊,這是一個(gè)強(qiáng)大的 Python 庫,用于實(shí)現(xiàn) SSHv2 協(xié)議,可用于遠(yuǎn)程連接和操作設(shè)備。import time
:導(dǎo)入?time
?模塊,用于在程序中添加延遲,等待設(shè)備處理命令。
import paramiko
import time
?遍歷IP:
- 利用for循環(huán)遍歷元素為交換機(jī)IP地址的列表,實(shí)現(xiàn)每次for循環(huán)對一個(gè)交換機(jī)進(jìn)行一次配置
for ip in ["192.168.10.1","192.168.9.2"]:
用戶輸入:
username = input("請輸入用戶名:")
:使用?input
?函數(shù)接收用戶輸入的用戶名。password = input("請輸入密碼:")
:使用?input
?函數(shù)接收用戶輸入的密碼。
username = input("請輸入用戶名:")
password = input("請輸入密碼:")
SSH 連接的建立:
ssh_client = paramiko.SSHClient()
:創(chuàng)建一個(gè)?SSHClient
?對象,用于建立 SSH 連接。ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
:設(shè)置主機(jī)密鑰策略為?AutoAddPolicy()
,這樣在連接未知主機(jī)時(shí),會(huì)自動(dòng)添加SSH服務(wù)器發(fā)送的密碼,防止建立SSH連接失敗。ssh_client.connect(hostname=ip, username=username, password=password)
:使用提供的用戶名和密碼通過connect()函數(shù)連接到指定的 IP 地址的 SSH 服務(wù)器。
創(chuàng)建交互式會(huì)話并發(fā)送命令:
commend = ssh_client.invoke_shell()
:使用?invoke_shell()
?方法調(diào)用設(shè)備的命令行界面commend.send("sys\n")
:發(fā)送?sys
?命令,可能是為了進(jìn)入系統(tǒng)配置模式for vlan_id in range(100, 104):
:使用?for
?循環(huán)命令,依次遍歷vlan_id,。print(f"正在創(chuàng)建vlan {vlan_id}")
:打印當(dāng)前正在創(chuàng)建的?vlan
?信息。commend.send(f"vlan {vlan_id}\n")
:發(fā)送?vlan
?命令,\n
?表示回車鍵,即執(zhí)行命令。
等待和接收輸出:
time.sleep(2)
:等待 2 秒,期望設(shè)備在這段時(shí)間內(nèi)完成命令的執(zhí)行,但這種等待方式不夠可靠,因?yàn)椴煌O(shè)備的執(zhí)行時(shí)間不同。output = commend.recv(65535).decode("ascii")
:使用?recv(65535)
?接收最多 65535 字節(jié)的輸出,并將其解碼為?ascii
?編碼的字符串。print("命令行界面配置過程:")
?和?print(output)
:打印輸出,顯示設(shè)備的命令行界面配置過程。
?代碼執(zhí)行過程:
實(shí)驗(yàn)結(jié)果驗(yàn)證:?
二.getpass模塊?
????????當(dāng)使用?input
?函數(shù)時(shí),用戶輸入的內(nèi)容會(huì)明文顯示在屏幕上,使用?getpass
?函數(shù)時(shí),用戶輸入的信息不會(huì)顯示在屏幕上,這對于輸入敏感信息(如密碼、API 密鑰等)非常有用。
實(shí)驗(yàn)代碼在input函數(shù)的代碼基礎(chǔ)上更改如下:
import paramiko
from getpass import getpass
import timefor ip in ["192.168.10.1","192.168.9.2"]:username = input("請輸入用戶名:")password = getpass('Password:')ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip,username=username,password=password)print(f"Successfully to connect {ip}")commend = ssh_client.invoke_shell()commend.send("sys\n")for vlan_id in range(100,104):print(f"正在創(chuàng)建vlan {vlan_id}")commend.send(f"vlan {vlan_id}\n")time.sleep(2)output = commend.recv(65535).decode("ascii")print("命令行界面配置過程:")print(output)time.sleep(2)
ssh_client.close()
?此處不再贅述代碼解析,用戶在輸入密碼時(shí)將不會(huì)顯示在屏幕上。
注意:getpass模塊存在bug,無法在pycharm中運(yùn)行,想要看到隱藏輸入效果,可以在windows終端里運(yùn)行python代碼。
在pycharm左下角存在終端圖標(biāo),可以打開windows終端:
?