Skip to content
Snippets Groups Projects
client.py 3.16 KiB
Newer Older
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
jorge.leitemac's avatar
jorge.leitemac committed
hostname = '10.20.208.185'
username = 'parallels'
port = 22

# Variables pour la connexion au deuxième dispositif
signer_hostname = 'localhost'

# Variables pour la clé publique
jorge.leitemac's avatar
jorge.leitemac committed
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
jorge.leitemac's avatar
jorge.leitemac committed
# clePriv = paramiko.RSAKey.from_private_key_file('ssh-keys/test')


# Essayer d'ouvrir la session SSH
jorge.leitemac's avatar
jorge.leitemac committed
# def handler(title, instructions, prompt_list):
#     signer_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#     signer_client.connect((signer_hostname, signer_port))
jorge.leitemac's avatar
jorge.leitemac committed
#     resp = []
#     for pr in prompt_list:
#         print(pr)
#         if pr[0].startswith('Password'):
jorge.leitemac's avatar
jorge.leitemac committed
#             # Transmettre le défi au deuxième dispositif
jorge.leitemac's avatar
jorge.leitemac committed
#             print("Envoi du défi : ", pr[0].encode())
jorge.leitemac's avatar
jorge.leitemac committed
#             signer_client.sendall(pr[0].encode())
jorge.leitemac's avatar
jorge.leitemac committed
#             # Attendre la réponse du deuxième dispositif
#             signed_challenge = signer_client.recv(1024)
jorge.leitemac's avatar
jorge.leitemac committed
#             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()


jorge.leitemac's avatar
jorge.leitemac committed

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 !")
    
jorge.leitemac's avatar
jorge.leitemac committed
    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()