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 = '10.20.208.185' 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/test4.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): # signer_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # signer_client.connect((signer_hostname, signer_port)) # resp = [] # 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("Authentification for username {}...".format(username)) print("Veuillez valider la signature sur l'appareil d'authentification") # 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 !") while True: command = input(username + '@' + hostname + ':$ ') if command.lower() == 'exit': break else: channel = transport.open_session() channel.exec_command(command) while not channel.exit_status_ready(): if channel.recv_ready(): output = channel.recv(4096) print(output.decode()) transport.close() # transport.close()