鏡像下載、域名解析、時間同步請點擊 阿里云開源鏡像站
??
paramiko是一個用于做遠(yuǎn)程控制的模塊,使用該模塊可以對遠(yuǎn)程服務(wù)器進(jìn)行命令或文件操作,基于linux中的ssh服務(wù) 。paramiko是第三方模塊,需要我們單獨安裝。通過paramiko模塊,我們可以利用python代碼程序?qū)崿F(xiàn)對設(shè)備的遠(yuǎn)程控制和文件傳輸?shù)炔僮?。博文實驗環(huán)境說明:
實驗環(huán)境安裝的是當(dāng)前最新版python3.9.12。安裝方式可以參考博文linux之Centos7下安裝python3及pip3。
[root@s146 opt]# wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz
實驗pip方式安裝paramiko可以自動安裝相關(guān)依賴。
[root@s146 setuptools-62.1.0]# pip3 install paramiko
編寫程序代碼
[root@s146 scripts]# vim test1.py
程序代碼如下
# -*- coding: UTF-8 -*-
# This is a test about paramiko
# 實例化一個transport對象
import paramiko
ip = input("請輸入需要遠(yuǎn)程的主機IP地址:")
uname = input("請輸入登錄用戶名:")
pword = input("請輸入登錄密碼:")
# 建立一個sshclient對象
ssh = paramiko.SSHClient()
# 允許將信任的主機自動加入到host_allow 列表,此方法必須放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 調(diào)用connect方法連接服務(wù)器
ssh.connect(hostname=ip,port=22,username=uname,password=pword)
# 手動輸入待執(zhí)行命令
mycmd = input("請輸入需要執(zhí)行的命令:")
stdin,stdout,stderr = ssh.exec_command(mycmd)
# 直接執(zhí)行指定命令
ssh.exec_command('cd /tmp/ && touch paramiko.txt && echo "吳紅勝到此一游" > paramiko.txt')
# 結(jié)果放到stdout中,如果有錯誤將放到stderr中
print(stdout.read().decode())
print(stderr.read().decode())
# 關(guān)閉連接
ssh.close()
執(zhí)行命令測試
[root@s146 scripts]# python3 test1.py
如上圖,可以看到結(jié)果正常執(zhí)行,命令執(zhí)行結(jié)果可以正常接收。
遠(yuǎn)端服務(wù)器檢查執(zhí)行情況
[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
…
編寫程序代碼
[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
# 執(zhí)行命令,和傳統(tǒng)方法一樣
mycmd1 = input("請輸入需要執(zhí)行的命令一:")
stdin,stdout,stderr = ssh.exec_command(mycmd1)
print(stdout.read().decode())
mycmd2 = input("請輸入需要執(zhí)行的命令二:")
stdin,stdout,stderr = ssh.exec_command(mycmd2)
print(stdout.read().decode())
# 關(guān)閉連接
trans.close()
執(zhí)行程序測試
[root@s146 scripts]# python3 test2.py
執(zhí)行完成命令1后,交換窗口輸入命令2
??如上執(zhí)行第二條命令,間隔時間太短會有如下報錯。
報錯信息
[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,
請輸入需要執(zhí)行的命令一:ls -l
total 4
-rw———-. 1 root root 1421 Dec 23 11:36 anaconda-ks.cfg
請輸入需要執(zhí)行的命令二: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’
報錯原因:上一條命令執(zhí)行的通道還未關(guān)閉,等待關(guān)閉即可。
原文鏈接:https://blog.csdn.net/carefree2005/article/details/124582423
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號