Ich schreibe ein Skript, um einige Befehlszeilenbefehle in Python zu automatisieren. Im Moment telefoniere ich so:
cmd = "some unix command"
retcode = subprocess.call(cmd,shell=True)
Ich muss jedoch einige Befehle auf einem Remote-Computer ausführen. Manuell würde ich mich mit ssh anmelden und dann die Befehle ausführen. Wie würde ich dies in Python automatisieren? Ich muss mich mit einem (bekannten) Kennwort auf dem Remote-Computer anmelden, damit ich nicht einfach verwenden cmd = ssh user@remotehost
kann. Ich frage mich, ob es ein Modul gibt, das ich verwenden soll.
k = paramiko.RSAKey.from_private_key_file(keyfilename)
ORk = paramiko.DSSKey.from_private_key_file(keyfilename)
THENssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
und schließlich vorssh..connect(hostname=host, username=user, pkey=k)
.def run_cmd(host, cmd):
das tut, was Sie zuerst wollen, aber Ihre Bedürfnisse entwickeln sich. Am Ende ändern Sie den Helfer für den neuen Anwendungsfall, wodurch sich das Verhalten der älteren vorhandenen Verwendung ändert. Planen Sie entsprechend.Oder Sie können einfach command.getstatusoutput verwenden :
Ich habe es ausgiebig benutzt und es funktioniert großartig.
Verwenden Sie in Python 2.6+
subprocess.check_output
.quelle
Haben Sie sich Fabric angesehen ? Mit Python können Sie alle möglichen Remote-Aufgaben über SSH ausführen.
quelle
Ich fand, dass paramiko etwas zu niedrig ist und Fabric nicht besonders gut für die Verwendung als Bibliothek geeignet ist. Deshalb habe ich meine eigene Bibliothek namens spur zusammengestellt , die paramiko verwendet, um eine etwas schönere Oberfläche zu implementieren:
Wenn Sie in einer Shell laufen müssen:
quelle
spur
. Sie generieren zusätzliche Shell-Befehle und erhalten am Ende Folgendes: 'mkdir'> / dev / null 2> & 1; echo $?; exec 'mkdir' '-p' '/ data / rpmupdate / 20130207142923'. Ich hätte auch gerne Zugang zu einer Ebeneexec_command
. Außerdem fehlt die Fähigkeit, Hintergrundaufgaben auszuführen :nohup ./bin/rpmbuildpackages < /dev/null >& /dev/null &
. Zum Beispiel generiere ich ein zsh-Skript (rpmbuildpackages) unter Verwendung einer Vorlage und lasse es dann einfach auf dem Computer laufen. Vielleicht wäre die Möglichkeit, solche Hintergrundjobs zu überwachen, auch hilfreich (Speichern von PIDs in einigen ~ / .spur).spur
funktioniert anscheinend nur auf Unix-Systemen, da es eine Abhängigkeit von hattermios
. Kennt jemand eine gute Bibliothek für Windows?SshShell
gibt es jetzt die Möglichkeit, den Shell-Typ festzulegen . Wenn beim Übergeben eine minimale Shell verwendet wirdshell_type=spur.ssh.ShellTypes.minimal
, wird nur der Raw-Befehl gesendet. Das direkte Implementieren von Hintergrundaufgaben fühlt sich für Spur etwas außerhalb des Bereichs an, aber Sie sollten in der Lage sein, den von Ihnen beschriebenen Befehl auszuführen, indem Sie eine Shell aufrufen (zshell.run(["sh", "-c", "nohup ./bin/rpmbuildpackages < /dev/null >& /dev/null &"]
. B. ).Halte es einfach. Keine Bibliotheken erforderlich.
quelle
Alle haben bereits angegeben (empfohlen), paramiko zu verwenden, und ich teile nur einen Python-Code (API kann man sagen), mit dem Sie mehrere Befehle auf einmal ausführen können.
Um Befehle auf verschiedenen Knoten auszuführen, verwenden Sie:
Commands().run_cmd(host_ip, list_of_commands)
Danke dir!
quelle
Ich habe Paramiko ein paar (nett) und Pxssh (auch schön) verwendet. Ich würde es auch empfehlen. Sie arbeiten etwas anders, haben aber eine relativ große Überlappung in der Nutzung.
quelle
paramiko hat endlich für mich gearbeitet, nachdem ich eine zusätzliche Zeile hinzugefügt habe, die wirklich wichtig ist (Zeile 3):
Stellen Sie sicher, dass das paramiko-Paket installiert ist. Ursprüngliche Quelle der Lösung: Quelle
quelle
quelle
Funktioniert perfekt...
quelle
Die akzeptierte Antwort hat bei mir nicht funktioniert. Ich habe stattdessen Folgendes verwendet:
Alternativ können Sie sshpass verwenden :
Referenzen:
1. https://github.com/onyxfish/relay/issues/11
2. https://stackoverflow.com/a/61016663/797495
quelle
Schauen Sie sich
spurplus
einen Wrapper an , den wir entwickelt habenspur
und der Typanmerkungen und einige kleinere Gimmicks (erneutes Verbinden von SFTP, md5 usw. ) Enthält : https://pypi.org/project/spurplus/quelle
Bitten Sie den Benutzer, den Befehl gemäß dem Gerät einzugeben, bei dem er sich anmeldet.
Der folgende Code wird von PEP8online.com überprüft.
quelle
Im folgenden Beispiel, falls Sie Benutzereingaben für Hostname, Benutzername, Kennwort und Port-Nr.
quelle