Python, Paramiko : Savoir si la connexion à été établie
RésoluJeanestamarre Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'utilise le module python paramiko pour pouvoir établir une connexion ssh
Est-ce possible de savoir si une connexion à été établi et renvoyer un message du genre "connexion établie" ?
Merci,
Bonne soirée.
6 réponses
bonjour,
peux-tu nous montrer comment tu utilises cela? Tiens compte de https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Bonsoir, je ne connais pas ce module, mais si la méthode connect ne renvoie pas d'erreur, c'est que tout s'est normalement bien passé, si tu veux modifier légèrement ce que fait une fonction, méthode, classe, surcharge alors cette méthode connect, soit via un héritage de classe (plus propre sans doute), soit en gardant la référence de la méthode à modifier, la récrivant avec un appel de la référence.
L'héritage, c'est assez simple, la 2nde méthode se résume ainsi.
class Test: def plop(self): return 40 test_plop = Test.plop def plop_plip(s): result = test_plop(s) return result + 2 Test.plop = plop_plip t = Test() print(t.plop())
C'est assez cracra ^^
https://docs.paramiko.org/en/stable/api/client.html#paramiko.client.SSHClient.connect
Bonjour,
Voici mon code :
import paramiko host = input("address ip :") user = input("user :") password = input(user +" password's :") client = paramiko.client.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(host, username=user, password=password) vrai = True while vrai == True: commande = input(user + "@" + host + ":~$ ") _stdin, _stdout,_stderr = client.exec_command(commande) print(_stdout.read().decode()) client.close()
Rebonjour,
Je viens de trouver la solution
Mon code :
import paramiko host = input("address ip :") user = input("user :") password = input(user +" password's :") client = paramiko.client.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(host, username=user, password=password) vrai = True while vrai == True: commande = input(user + "@" + host + ":~$ ") _stdin, _stdout,_stderr = client.exec_command(commande) print(_stdout.read().decode()) print(_stderr.read().decode()) client.close()
Mais maintenant serait-il possible d'exécuter des commandes comme "su" et de renvoyer la réponse (par exemple pour su demander le mot de passe) ?
Merci
Bonne journée
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBonjour,
Pour demander la saisie d'un mot de passe en python tu devrais utiliser getpass.getpass.
Tu peux ensuite t'inspirer de ce dépôt.
import getpass import paramiko # Paste https://github.com/sirosen/paramiko-shell/blob/master/interactive_shell.py here client = paramiko.client.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) user = input("user? ") host = input("host? ") passwd = getpass.getpass(f"{user}@{host} password? ") client.connect(host, username=user, password=passwd) open_shell(client)
Tu peux effectivement passer root avec la commande su dans ce shell. Par contre il y a un peu de travail pour mettre en forme de stdin, stderr et stdout.
Pour quitter le su et la session ssh, appuie sur ctrl D.
Bonne chance