Python筆記之paramiko模組安裝和使用示例

哈哈哈hh發表於2022-07-15

映象下載、域名解析、時間同步請點選  阿里雲開源映象站

一、paramiko模組簡介

paramiko是一個用於做遠端控制的模組,使用該模組可以對遠端伺服器進行命令或檔案操作,基於linux中的ssh服務 。paramiko是第三方模組,需要我們單獨安裝。透過paramiko模組,我們可以利用python程式碼程式實現對裝置的遠端控制和檔案傳輸等操作。博文實驗環境說明:

  • 作業系統:centos7.6
  • python版本:3.9.12
  • pip版本:22.0.4
  • paramiko版本:2.10.4

二、paramiko安裝步驟

1、下載並安裝python3

實驗環境安裝的是當前最新版python3.9.12。安裝方式可以參考博文linux之Centos7下安裝python3及pip3。

[root@s146 opt]# wget

2、安裝paramiko

file

#實驗pip方式安裝paramiko可以自動安裝相關依賴。
[root@s146 setuptools-62.1.0]# pip3 install paramiko

3、獲取paramiko模組幫助

file

三、使用示例

1、基於使用者名稱和密碼的 sshclient 方式登入示例

編寫程式程式碼

[root@s146 scripts]# vim test1.py

程式程式碼如下

# -*- coding: UTF-8 -*-
# This is a test about paramiko
# 例項化一個transport物件
import paramiko
ip = input("請輸入需要遠端的主機IP地址:")
uname = input("請輸入登入使用者名稱:")
pword = input("請輸入登入密碼:")
# 建立一個sshclient物件
ssh = paramiko.SSHClient()
# 允許將信任的主機自動加入到host_allow 列表,此方法必須放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 呼叫connect方法連線伺服器
ssh.connect(hostname=ip,port=22,username=uname,password=pword)
# 手動輸入待執行命令
mycmd = input("請輸入需要執行的命令:")
stdin,stdout,stderr = ssh.exec_command(mycmd)
# 直接執行指定命令
ssh.exec_command('cd /tmp/ && touch paramiko.txt && echo "吳紅勝到此一遊" > paramiko.txt')
# 結果放到stdout中,如果有錯誤將放到stderr中
print(stdout.read().decode())
print(stderr.read().decode())
# 關閉連線
ssh.close()

執行命令測試

file

[root@s146 scripts]# python3 test1.py

如上圖,可以看到結果正常執行,命令執行結果可以正常接收。

遠端伺服器檢查執行情況

file

[root@s145 tmp]# cat paramiko.txt

吳紅勝到此一遊

[root@s145 tmp]# ll

total 4

-rw-r–r-- 1 root root 22 Apr 27 15:46 paramiko.txt

2、基於使用者名稱和密碼的 transport 方式登入示例

編寫程式程式碼

[root@s146 scripts]# vim test2.py

# -*- coding: UTF-8 -*-
# This is a test about paramiko
import paramiko
# 例項化一個transport物件
trans = paramiko.Transport(('192.168.0.145', 22))
# 建立連線
trans.connect(username='root', password='123456')
# 將sshclient的物件的transport指定為以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans
# 執行命令,和傳統方法一樣
mycmd1 = input("請輸入需要執行的命令一:")
stdin,stdout,stderr = ssh.exec_command(mycmd1)
print(stdout.read().decode())
mycmd2 = input("請輸入需要執行的命令二:")
stdin,stdout,stderr = ssh.exec_command(mycmd2)
print(stdout.read().decode())
# 關閉連線
trans.close()

執行程式測試

file

[root@s146 scripts]# python3 test2.py

執行完成命令1後,交換視窗輸入命令2

四、QA

如上執行第二條命令,間隔時間太短會有如下報錯。

報錯資訊

[root@s146 scripts]# python3 test2.py

/usr/local/python3/lib/python3.9/site-packages/paramiko/transport.py:236: CryptographyDeprecationWarning: Blowfish has been deprecated

“class”: algorithms.Blowfish,

請輸入需要執行的命令一:ls -l

total 4

-rw-------. 1 root root 1421 Dec 23 11:36 anaconda-ks.cfg

請輸入需要執行的命令二:ls -l

total 4

-rw-------. 1 root root 1421 Dec 23 11:36 anaconda-ks.cfg

Exception ignored in: <function BufferedFile.del at 0x7f9c0db51a60>

Traceback (most recent call last):

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/file.py”, line 66, in del

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/channel.py”, line 1392, in close

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/channel.py”, line 991, in shutdown_write

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/channel.py”, line 967, in shutdown

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/transport.py”, line 1908, in _send_user_message

AttributeError: ‘NoneType’ object has no attribute ‘time’

報錯原因:上一條命令執行的通道還未關閉,等待關閉即可。

原文連結:https://blog.csdn.net/carefree2005/article/details/124582423


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2905982/,如需轉載,請註明出處,否則將追究法律責任。

相關文章