Python操作遠程機器


操作遠程機器主要使用的有paramiko,WMI(Windows Management Instrumentation),SMBConnection.

paramiko

paramiko使用SSH2協議操作遠程機器,是Python語言寫的一個模塊。

安裝

pip  install paramiko

使用

使用主要包括執行命令,上傳文件和下載文件。

連接

有兩種方式連接到linux服務器。
方式一:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用戶名", "口令")

方式二:

t = paramiko.Transport(("主機","端口"))
t.connect(username = "用戶名", password = "口令")

如果連接遠程主機需要提供密鑰,上面第二行代碼可改為:

t.connect(username = "用戶名", password = "口令", hostkey="密鑰")

執行命令

import paramiko
 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用戶名", "口令")
stdin, stdout, stderr = ssh.exec_command("你的命令")
print stdout.readlines()
ssh.close()

上傳文件

import paramiko

t = paramiko.Transport(("主機","端口"))
t.connect(username = "用戶名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath=’/var/log/system.log’
localpath=’/tmp/system.log’
sftp.put(localpath,remotepath)
t.close()

下載文件

import paramiko
 
t = paramiko.Transport(("主機","端口"))
t.connect(username = "用戶名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath=’/var/log/system.log’
localpath=’/tmp/system.log’
sftp.get(remotepath, localpath)
t.close()

參考鏈接

WMI

WMI(Windows Management Instrumentation)用於管理windows機器。以下實例功能是執行遠程機器的bat文件。

import wmi

# 遠程執行bat文件
def call_remote_bat(ipaddress, username, password):
    try:
        pythoncom.CoInitialize()
        # 用wmi連接到遠程服務器
        c = wmi.WMI(computer=ipaddress, user=username, password=password)
        filename = r"C:\auto_login.bat"  # 此文件在遠程服務器上
        # filename = r"C:\agent\dist\machine.exe"  # 此文件在遠程服務器上
        cmd_callbat = r"cmd /c call %s" % filename
        c.Win32_Process.Create(CommandLine=cmd_callbat)  # 執行bat文件   Win32_Process.Create
        time.sleep(1)
    except:
        print('{}遠程執行失敗'.format(ipaddress))

參考鏈接:wmi教程,wmi實例

pysmb

pysmb是客戶端SMB /CIFS協議(SMB1和SMB2)的純Python實現,它是便於在Windows機器之間進行文件共享和打印的底層協議,以及通過Samba服務器應用程序與Linux機器進行文件共享和打印。

  • 使用pip安裝即可:pip install pysmb
  • 需安裝Twisted依賴包: pip install Twisted

簡單使用

創建一個訪問對象,並建立連接.

from smb.SMBConnection import *

# username: 遠程主機用戶名  password: 遠程主機密碼
# my_name: 本機主機計算機名 remote_name: 遠程主機計算機名
# ip: 遠程主機ip
conn = SMBConnection(username, password, my_name, remote_name)
conn = conn.connect(ip)

常用方法。

  • servuce_name: 共享文件夾的名稱
  • path: 新文件夾(相對於)共享文件夾的路徑。如果路徑包含非英文字符,則必須使用unicode字符串來傳遞路徑。
  • timeout: pysmb將等待的秒數。
  • file_obj: 具有寫入方法的類文件對象。

1. 創建新目錄。

conn.createDirectory(service_name,path)

2. 刪除空文件夾。

conn.deleteDirectory(service_name,path)

3. 刪除文件。

conn.deleteFiles(service_name,path_file_pattern,timeout=30)

4. 重命名文件或文件夾。

# old_path: 舊文件名  new_path: 新文件名
conn.rename(service_name,old_path,new_path)

5. 獲取遠程主機的共享資源列表。

file_list = conn.listShares(timeout = 30)
# 遍歷獲取共享文件名
for file in file.list:
    print(file.name)

6. 上傳文件到遠程主機。

conn.storeFile(service_name,path,file_obj, timeout=30)

實例

from smb.SMBConnection import *

def send_file(username, password, my_name, remote_name, ip, file_dir, file_dir_remote):
    """
    pysmb下發腳本
    :param username: 遠程主機用戶名
    :param password: 遠程主機密碼
    :param my_name: 本地計算機名
    :param remote_name: 遠程計算機名
    :param ip: 遠程ip
    :param file_dir: 要傳輸的文件夾本地地址
    :param file_dri_remote: 上傳位置相對於c盤的路徑
    :return: 
    """
    try:
        # 創建pysmb訪問對象
        conn = SMBConnection(username, password, my_name, remote_name)
        # 創建pysmb連接
        conn.connect(ip)
        # 提取文件名或目錄正則
        pattern = re.compile(r'.*/(.*)')
        # 讀取文件對象
        file_obj = open(file_dir, 'rb')
        # 遠程文件名
        file_name = file_dir_remote + pattern.search(file_dir).group(1)
        # 傳輸文件到遠程主機
        conn.storeFile('C$', file_name, file_obj)
        file_obj.close()
    except:
        print('{}遠程傳輸文件失敗'.format(ip))
    time.sleep(1)
    call_remote_bat(ip, username, password)
    try:
        conn.deleteFiles('C$', file_name)
    except:
        print('{}遠程刪除文件失敗'.format(ip))
    conn.close()

參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM