Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielcode für Python, um Paramiko zu verwenden, um eine Verbindung zu einem Remote-Server herzustellen und Befehle auszuführen

Beispielcode für Python, um Paramiko zu verwenden, um eine Verbindung zu einem Remote-Server herzustellen und Befehle auszuführen

黄舟
黄舟Original
2017-10-16 11:02:412030Durchsuche

Der folgende Editor bringt Ihnen einen Artikel darüber, wie Sie mit Python eine Verbindung zu einem Remote-Server herstellen und Befehle mit Paramiko ausführen können. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor und werfen wir einen Blick darauf.

Das Paramiko-Modul in Python ist eine Bibliothek, die zum Implementieren von SSH-Verbindungen zu Remote-Servern verwendet werden kann. Es kann zum Ausführen von Befehlen oder zum Hochladen von Dateien verwendet werden.

1. Holen Sie sich ein Verbindungsobjekt

Beim Herstellen einer Verbindung können Sie den folgenden Code verwenden:


def connect(host):
  'this is use the paramiko connect the host,return conn'
  ssh = paramiko.SSHClient()
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  try:
#    ssh.connect(host,username='root',allow_agent=True,look_for_keys=True)
    ssh.connect(host,username='root',password='root',allow_agent=True)
    return ssh
  except:
    return None

In der Verbindungsfunktion ist der Parameter die IP-Adresse oder der Hostname eines Hosts. Wenn nach der Ausführung dieser Methode die Verbindung zum Server erfolgreich hergestellt wurde, wird ein sshclient-Objekt zurückgegeben.

Der erste Schritt besteht darin, ein SSHClient-Objekt zu erstellen, dann den SSH-Client so einzustellen, dass Verbindungen zu Maschinen zugelassen werden, die nicht in der Datei know_host enthalten sind, und dann versuchen, eine Verbindung zum Server herzustellen Sie können zwei Methoden verwenden: Eine Methode besteht darin, den geheimen Schlüssel zu verwenden, d. um schließlich ein verbundenes Objekt zurückzugeben.

2. Holen Sie sich den Set-Befehl

Nachdem Sie die Paramiko-Verbindung hergestellt haben, müssen Sie den Befehl abrufen, der ausgeführt werden muss, wie in gezeigt Der folgende Code:


def command(args,outpath):
  'this is get the command the args to return the command'
  cmd = '%s %s' % (outpath,args)
  return cmd

Unter den Parametern ist einer args und einer outpath. args repräsentiert die Parameter des Befehls und outpath repräsentiert den Pfad der ausführbaren Datei Datei, z. B. /usr/bin /ls -l. Darunter ist der Outpath /usr/bin/ls und der Parameter -l

Diese Methode wird hauptsächlich zum Kombinieren von Befehlen und zum Zusammenstellen einzelner Parameter als Teil des Befehls verwendet.

3. Befehl ausführen

Nach dem Verbinden können Sie den Befehl direkt ausführen, dann gibt es die folgende Funktion:


def exec_commands(conn,cmd):
  'this is use the conn to excute the cmd and return the results of excute the command'
  stdin,stdout,stderr = conn.exec_command(cmd)
  results=stdout.read()
  return results

In dieser Funktion ist einer der übergebenen Parameter das Verbindungsobjekt conn und der andere der auszuführende Befehl cmd. Schließlich wird das Ausführungsergebnis erhalten. Das ist stdout.read () und gibt schließlich das Ergebnis zurück

4. Dateien hochladen

Bei Verwendung des Verbindungsobjekts können Sie auch Verwandte Dateien direkt hochladen, die folgende Funktion:


def copy_moddule(conn,inpath,outpath):
  'this is copy the module to the remote server'
  ftp = conn.open_sftp()
  ftp.put(inpath,outpath)
  ftp.close()
  return outpath

Die Hauptparameter dieser Funktion sind: Einer ist das Verbindungsobjekt conn, einer ist der Name der hochgeladenen Datei und der andere ist der Dateiname nach dem Hochladen. Dieser muss mit dem vollständigen Dateinamen inklusive Pfad angegeben werden.

Die Hauptmethode besteht darin, ein SFTP-Objekt zu öffnen, dann die Datei mit der Put-Methode hochzuladen, schließlich die SFTP-Verbindung zu schließen und schließlich den vollständigen Pfad des hochgeladenen Dateinamens zurückzugeben

5, führen Sie den Befehl aus und erhalten Sie das Ergebnis

Der letzte Schritt besteht darin, den Befehl auszuführen und das zurückgegebene Ergebnis wie folgt zu erhalten:


def excutor(host,outpath,args):
  conn = connect(host)
  if not conn:
    return [host,None]
  exec_commands(conn,'chmod +x %s' % outpath)
  cmd =command(args,outpath)
  result = exec_commands(conn,cmd)
  print '%r' % result
  result = json.loads(result)
  return [host,result]

Stellen Sie zunächst eine Verbindung zum Server her und rufen Sie ein Verbindungsobjekt ab. Wenn die Verbindung fehlschlägt, werden der Hostname und „Keine“ zurückgegeben, was darauf hinweist, dass die Verbindung nicht erfolgreich ist Erfolgreich, ändern Sie dann die Ausführungsberechtigung der Datei, damit die Datei ausgeführt werden kann, und erhalten Sie dann den ausgeführten Befehl. Führen Sie schließlich den Befehl aus, rufen Sie das Ergebnis ab und geben Sie das Ergebnis im JSON-Format zurück, damit das Ergebnis möglich ist in einem schönen JSON-Format erhalten und schließlich relevante Informationen zusammen mit dem Hostnamen zurückgeben

6. Testcode

Der Testcode ist wie folgt folgt:


if __name__ == '__main__':
  print json.dumps(excutor('192.168.1.165','ls',' -l'),indent=4,sort_keys=True)
  print copy_module(connect('192.168.1.165'),'kel.txt','/root/kel.1.txt')
  exec_commands(connect('192.168.1.165'),'chmod +x %s' % '/root/kel.1.txt')

Der erste Schritt testet die Befehlsausführung, der zweite Schritt testet das Hochladen von Dateien und im dritten Schritt testet die Abteilung die Berechtigungen zum Ändern der hochgeladenen Dateien.

Der vollständige Code lautet wie folgt:


#!/usr/bin/env python
import json
import paramiko

def connect(host):
  'this is use the paramiko connect the host,return conn'
  ssh = paramiko.SSHClient()
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  try:
#    ssh.connect(host,username='root',allow_agent=True,look_for_keys=True)
    ssh.connect(host,username='root',password='root',allow_agent=True)
    return ssh
  except:
    return None

def command(args,outpath):
  'this is get the command the args to return the command'
  cmd = '%s %s' % (outpath,args)
  return cmd

def exec_commands(conn,cmd):
  'this is use the conn to excute the cmd and return the results of excute the command'
  stdin,stdout,stderr = conn.exec_command(cmd)
  results=stdout.read()
  return results

def excutor(host,outpath,args):
  conn = connect(host)
  if not conn:
    return [host,None]
  #exec_commands(conn,'chmod +x %s' % outpath)
  cmd =command(args,outpath)
  result = exec_commands(conn,cmd)
  result = json.dumps(result)
  return [host,result]


def copy_module(conn,inpath,outpath):
    'this is copy the module to the remote server'
    ftp = conn.open_sftp()
    ftp.put(inpath,outpath)
    ftp.close()
    return outpath


if __name__ == '__main__':
    print json.dumps(excutor('192.168.1.165','ls',' -l'),indent=4,sort_keys=True)
    print copy_module(connect('192.168.1.165'),'kel.txt','/root/kel.1.txt')
    exec_commands(connect('192.168.1.165'),'chmod +x %s' % '/root/kel.1.txt')

Hauptsächlich unter Verwendung des Paramiko-Moduls in Python Stellen Sie über ssh eine Verbindung zum Linux-Server her, führen Sie dann die entsprechenden Befehle aus und laden Sie die Dateien auf den Server hoch.

Das obige ist der detaillierte Inhalt vonBeispielcode für Python, um Paramiko zu verwenden, um eine Verbindung zu einem Remote-Server herzustellen und Befehle auszuführen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn