import socket from cryptography.hazmat.primitives import serialization from cryptography.hazmat.backends import default_backend import sys import os # ajouter le chemin vers le répertoire libs à PYTHONPATH libs_path = os.path.join(os.getcwd(), 'libs') if libs_path not in sys.path: sys.path.append(libs_path) # maintenant, vous pouvez importer votre bibliothèque import paramiko from paramiko.auth_handler import AuthHandler import logging # # logging.basicConfig(level=logging.DEBUG) # logging.basicConfig(level=logging.ERROR) algorithm = "rsa-sha2-512" # Variables pour la connexion SSH hostname = '172.20.10.4' username = 'parallels' port = 22 # Variables pour la connexion au deuxième dispositif signer_hostname = 'localhost' signer_port = 12349 # Variables pour la clé publique public_key_file = 'ssh-keys/test.pub' # Lire la clé publique au format OpenSSH with open(public_key_file, 'rb') as key_file: public_key = serialization.load_ssh_public_key(key_file.read(), backend=default_backend()) public_key_pem = public_key.public_bytes( encoding=serialization.Encoding.OpenSSH, format=serialization.PublicFormat.OpenSSH ) print("Contenu de la clé publique :\n", public_key_pem.decode()) print("Clé publique chargée :", public_key) # Créer une nouvelle instance de transport transport = paramiko.Transport((hostname, port)) # Créer une nouvelle instance de client de signature clePriv = paramiko.RSAKey.from_private_key_file('ssh-keys/test') # Essayer d'ouvrir la session SSH def handler(title, instructions, prompt_list): print("*" * 80) print("Handeling interactive authentication") print("*" * 80) signer_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) signer_client.connect((signer_hostname, signer_port)) resp = [] print("Prompt list :", prompt_list) print("Instructions :", instructions) print("Title :", title) for pr in prompt_list: print(pr) if pr[0].startswith('Password'): # Transmettre le défi au deuxième dispositif print("Envoi du défi : ", pr[0].encode()) signer_client.sendall(pr[0].encode()) # Attendre la réponse du deuxième dispositif signed_challenge = signer_client.recv(1024) print("Défi signé :", signed_challenge) # resp.append("Jdlm1209") resp.append(signed_challenge) else: resp.append('') return resp print("Connexion au serveur SSH...") transport.connect() print("Connexion réussie !") print("Authentification for username {}...".format(username)) # transport.auth_publickey(username, public_key, handler) try: transport.auth_publickey(username, public_key) except paramiko.ssh_exception.AuthenticationException: print("Échec de l'authentification") else: print("Authentification réussie !")