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
username = 'parallels'
port = 22
# Variables pour la connexion au deuxième dispositif
signer_hostname = 'localhost'
# Variables pour la clé publique
# 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'):
# # 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()