GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der einfachste Weg zu SSH mit Python?

Ich habe Python-Bindungen für libssh2 geschrieben. Libssh2 ist eine clientseitige Bibliothek, die das SSH2-Protokoll implementiert.

import socket
import libssh2

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('exmaple.com', 22))

session = libssh2.Session()
session.startup(sock)
session.userauth_password('john', '******')

channel = session.channel()
channel.execute('ls -l')

print channel.read(1024)

Ich habe es nicht ausprobiert, aber dieses pysftp-Modul könnte helfen, das wiederum paramiko verwendet. Ich glaube, alles ist clientseitig.

Der interessante Befehl ist wahrscheinlich .execute() die einen beliebigen Befehl auf der entfernten Maschine ausführt. (Das Modul bietet auch .get() und .put Methoden, die eher auf seinen FTP-Charakter anspielen).

UPDATE:

Ich habe die Antwort neu geschrieben, nachdem der Blog-Beitrag, auf den ich ursprünglich verlinkt hatte, nicht mehr verfügbar ist. Einige der Kommentare, die sich auf die alte Version dieser Antwort beziehen, sehen jetzt seltsam aus.


Sie können es selbst mit Paramiko codieren, wie oben vorgeschlagen. Alternativ können Sie sich Fabric ansehen, eine Python-Anwendung, mit der Sie all die Dinge tun können, nach denen Sie gefragt haben:

Fabric ist eine Python-Bibliothek und ein Befehlszeilentool, das entwickelt wurde, um die Bereitstellung von Anwendungen oder die Ausführung von Systemverwaltungsaufgaben über das SSH-Protokoll zu optimieren. Es bietet Tools zum Ausführen beliebiger Shell-Befehle (entweder als normaler Login-Benutzer oder über sudo), zum Hoch- und Herunterladen von Dateien und so weiter.

Ich denke, das passt zu Ihren Anforderungen. Es ist auch keine große Bibliothek und erfordert keine Serverinstallation, obwohl es Abhängigkeiten von paramiko und pycrypt gibt, die eine Installation auf dem Client erfordern.

Früher war die App hier. Sie ist jetzt hier zu finden.

* The official, canonical repository is git.fabfile.org
* The official Github mirror is GitHub/bitprophet/fabric

Es gibt mehrere gute Artikel darüber, aber Sie sollten vorsichtig sein, da es sich in den letzten sechs Monaten geändert hat:

Bereitstellen von Django mit Fabric

Werkzeuge des modernen Python-Hackers:Virtualenv, Fabric und Pip

Einfache und unkomplizierte Bereitstellung mit Fabric und Virtualenv

Später:Fabric benötigt Paramiko nicht mehr zur Installation:

$ pip install fabric
Downloading/unpacking fabric
  Downloading Fabric-1.4.2.tar.gz (182Kb): 182Kb downloaded
  Running setup.py egg_info for package fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
Downloading/unpacking ssh>=1.7.14 (from fabric)
  Downloading ssh-1.7.14.tar.gz (794Kb): 794Kb downloaded
  Running setup.py egg_info for package ssh
Downloading/unpacking pycrypto>=2.1,!=2.4 (from ssh>=1.7.14->fabric)
  Downloading pycrypto-2.6.tar.gz (443Kb): 443Kb downloaded
  Running setup.py egg_info for package pycrypto
Installing collected packages: fabric, ssh, pycrypto
  Running setup.py install for fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
    Installing fab script to /home/hbrown/.virtualenvs/fabric-test/bin
  Running setup.py install for ssh
  Running setup.py install for pycrypto
...
Successfully installed fabric ssh pycrypto
Cleaning up...

Dies ist jedoch hauptsächlich kosmetischer Natur:ssh ist ein Fork von paramiko, der Betreuer für beide Bibliotheken ist derselbe (Jeff Forcier, auch der Autor von Fabric), und der Betreuer plant, paramiko und ssh unter dem Namen paramiko wieder zusammenzuführen. (Diese Korrektur über pbanka.)


Wenn Sie zusätzliche Module vermeiden möchten, können Sie das subprocess-Modul verwenden, um

auszuführen
ssh [host] [command]

und erfassen Sie die Ausgabe.

Versuchen Sie etwas wie:

process = subprocess.Popen("ssh example.com ls", shell=True,
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output,stderr = process.communicate()
status = process.poll()
print output

Um mit Benutzernamen und Passwörtern umzugehen, können Sie subprocess verwenden, um mit dem ssh-Prozess zu interagieren, oder Sie könnten einen öffentlichen Schlüssel auf dem Server installieren, um die Passwortabfrage zu vermeiden.


Linux
  1. Init-System mit der Shell erkennen?

  2. Ssh – Wie beschleunigt man die zu langsame SSH-Anmeldung?

  3. Python 3 Appindicator3:Was ist die Abhängigkeit?

  4. So verbinden Sie einen Remote-Host mit dem ssh-Befehl

  5. Wie verwendet man inotify richtig?

Was ist SSH?

Verwenden der SSH-Konfigurationsdatei

Was ist der einfachste Weg, um Speicherplatz auf einer Festplatte freizugeben?

Wie lernt man SELinux am besten?

Was ist der Overhead bei der Verwendung von Subshells?

Was ist der schnellste Weg, um ein Skript auszuführen?