Ich habe ein Skript in Windows erstellt, um eine Verbindung zum Remote-SSH-Server herzustellen. Ich habe erfolgreich installiert cryptography
, pynacl
und schließlich paramiko
(dauerte einen ganzen Tag, um herauszufinden, wie man sie erfolgreich auf Windows installiert).Python-Kryptografie unter Windows installieren
Nun, da ich das Skript ausführen, erscheint ein Fehler, der besagt, dass das Laden der DLL fehlgeschlagen ist. Der Fehler scheint mit libsodium
in Verbindung zu stehen, aber ich kann nicht genau herausfinden, welche DLL zu laden ist und von wo. Um auf der sicheren Seite zu sein, habe ich auch pysodium
installiert.
Hier ist das Skript:
automate.py
import SSH
connection = ssh("10.10.65.100", "gerrit2", "[email protected]")
print("Calling OpenShell")
connection.openShell()
print("Calling sendShell")
connection.sendShell("ls -l")
print("Calling process")
connection.process()
print("Calling closeConnection")
connection.closeConnection()
SSH.py
import threading, paramiko
class ssh:
shell = None
client = None
transport = None
def __init__(self, address, username, password):
print("Connecting to server on ip", str(address) + ".")
self.client = paramiko.client.SSHClient()
self.client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
self.client.connect(address, username=username, password=password, look_for_keys=False)
self.transport = paramiko.Transport((address, 22))
self.transport.connect(username=username, password=password)
thread = threading.Thread(target=self.process)
thread.daemon = True
thread.start()
def closeConnection(self):
if(self.client != None):
self.client.close()
self.transport.close()
def openShell(self):
self.shell = self.client.invoke_shell()
def sendShell(self, command):
if(self.shell):
self.shell.send(command + "\n")
else:
print("Shell not opened.")
def process(self):
global connection
while True:
# Print data when available
if self.shell != None and self.shell.recv_ready():
alldata = self.shell.recv(1024)
while self.shell.recv_ready():
alldata += self.shell.recv(1024)
strdata = str(alldata, "utf8")
strdata.replace('\r', '')
print(strdata, end = "")
if(strdata.endswith("$ ")):
print("\n$ ", end = "")
Und hier ist der Fehler:
> python automate.py
Traceback (most recent call last):
File "automate.py", line 1, in <module>
import SSH
File "D:\Automate\SSH_Paramiko\SSH.py", line 1, in <module>
import threading, paramiko
File "D:\Users\prashant-gu\AppData\Local\Programs\Python\Python37\lib\site-packages\paramiko-2.4.0-py3.7.egg\paramiko\__init__.py", line 22, in <module>
File "D:\Users\prashant-gu\AppData\Local\Programs\Python\Python37\lib\site-packages\paramiko-2.4.0-py3.7.egg\paramiko\transport.py", line 57, in <module>
File "D:\Users\prashant-gu\AppData\Local\Programs\Python\Python37\lib\site-packages\paramiko-2.4.0-py3.7.egg\paramiko\ed25519key.py", line 22, in <module>
File "D:\Users\prashant-gu\AppData\Local\Programs\Python\Python37\lib\site-packages\nacl\signing.py", line 19, in <module>
import nacl.bindings
File "D:\Users\prashant-gu\AppData\Local\Programs\Python\Python37\lib\site-packages\nacl\bindings\__init__.py", line 17, in <module>
from nacl.bindings.crypto_box import (
File "D:\Users\prashant-gu\AppData\Local\Programs\Python\Python37\lib\site-packages\nacl\bindings\crypto_box.py", line 18, in <module>
from nacl._sodium import ffi, lib
ImportError: DLL load failed: The specified module could not be found.
Scheint wie * pynacl * nicht installiert ist OK. Eines seiner Erweiterungsmodule (oder einige seiner * .dll * -Abhängigkeiten) kann nicht gefunden werden. Sie sollten in der Lage sein, das Problem einfach zu reproduzieren, indem Sie: "paramiko importieren". BTW: Was ist * Python37 * in deinen Pfaden? – CristiFati
@CristiFati: Ich habe 'where python' und erhielt diesen Pfad' D: \ Benutzer \ prashant-gu \ AppData \ Lokale \ Programme \ Python \ Python37 \ python.exe' –
@CristiFati: Danke für den Hinweis, den Sie mir gegeben haben . Es hat viel Mühe gekostet, aber schließlich ist das Problem gelöst. –