一、介紹
paramiko庫是Python編寫的用於SSHv2協議的安全連接的庫,支持SSH文件傳輸( SFTP )和SSH連接遠程伺服器並執行命令。
與其他庫相比,paramiko使用簡單,同時功能強大。其中,可以在SSH通道上的遠程伺服器上執行命令是一個非常重要的功能。
paramiko的invoke_shell()方法就是在SSH通道上的遠程伺服器上執行命令的重要方法之一,本文將詳細介紹該方法的使用和應用。
二、方法參數和返回值
函數格式為:invoke\_shell(term=’vt100′, width=80, height=24, width\_pixels=0, height\_pixels=0)
其中,term表示終端類型,width表示終端的字元列寬度,height表示終端的行高度,width_pixesl和height_pixels表示終端的像素寬度和像素高度。如果這些參數沒有被指定,那麼將使用默認值。
該方法的返回值為一個類型為channel的對象。該channel對象提供了一系列的方法(如recv、send等等)用於與SSH通道進行交互。
三、使用方法介紹
1. 創建SSH連接並登錄遠程伺服器
import paramiko ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(hostname="127.0.0.1", port=22, username="username", password="password")
其中,創建ssh_client對象後,需要設置其「missing host key policy」為AutoAddPolicy。否則,當連接主機的密鑰不可用時,該連接將被拒絕。
AutoAddPolicy表示自動添加遠程主機密鑰,相當於告訴SSH客戶端,如果遠程機器不在已知主機列表中,就自動添加,並信任它的密鑰。
2. 調用invoke_shell()方法,獲取channel對象
channel = ssh_client.invoke_shell()
調用invoke_shell()方法返回的channel對象是一個標識SSH通道的對象。該方法返回的對象可以用於與SSH通道互動,發送和接受數據。
3. 發送和接收數據
channel.send(b'echo "Hello World!"\n') output = "" while not channel.recv_ready(): time.sleep(0.1) while channel.recv_ready(): output += channel.recv(1024).decode("utf-8") print(output)
上面的代碼演示了如何使用invoke_shell()方法發送和接收數據。在這個例子中,先發送了一條命令給遠程伺服器,然後循環讀取伺服器的返回結果,並將結果列印出來。
4. 關閉SSH通道
channel.close() ssh_client.close()
最後,不要忘記關閉SSH通道,否則會佔用連接資源。
四、總結
本文介紹了paramiko庫中invoke_shell()方法的詳解,掌握該方法可以幫助您使用Python對SSH伺服器進行自動化操作。通過本文的介紹,相信您已經可以靈活運用該方法進行開發工作了。
原創文章,作者:NHGKM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317209.html