Je travaille sur la conversion d'un outil de Ruby en Python, et la version Ruby utilise Net::SSH pour se connecter à un hôte distant, et envoyer des commandes et récupérer des réponses/données. J'ai utilisé paramiko dans la contrepartie Python, mais je suis confus quant à l'objectif de Channels in paramiko. De ce que j'ai lu jusqu'à présent, il me semble qu'un canal (qui utilise un paramiko Transport) est utilisé pour maintenir une connexion persistante SSH plutôt que d'exécuter une commande et de mettre fin à la connexion.Utilisation de canaux avec Paramiko
Un canal est-il requis? Quelle est la pile requise pour ouvrir une connexion SSH persistante à un hôte pour envoyer et recevoir plusieurs commandes de manière séquentielle et obtenir les réponses, puis une fois la fermeture de la connexion terminée manuellement?
Ce sont les deux principales lignes que je vais avoir du mal à traduire en Python, parce que je ne suis pas sûr si Ruby « Channel » cartes directement à un paramiko « Channel »:
@ssh_connection = Net::SSH.start(@linux_server_name,
@server_user_name,
:password => @password,
:paranoid => false)
et plus tard dans le code
@channel = @ssh_connection.open_channel do |new_channel|
Edit: pour expliquer davantage ma question, j'ai pu se connecter à un hôte distant en utilisant paramiko et exécuter plusieurs commandes séquentielles et d'obtenir leurs résultats sans l'aide d'un transport ou un canal, à nouveau , qu'est-ce que t il justifie l'utilisation d'une chaîne dans paramiko?
def connect(self):
ssh_connection = paramiko.SSHClient()
ssh_connection.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_connection.connect(self.linux_server_name)
stdin, stdout, stderr = ssh_connection.exec_command("ls -l")
print(stdout.readlines())
stdin, stdout, stderr = ssh_connection.exec_command("ls -l /tmp")
print(stdout.readlines())
ssh_connection.close()
Voir aussi: https://stackoverflow.com/questions/41570124/ping-isnt-allowed-to-be-executed, https://stackoverflow.com/questions/41183971/paramiko-session-times-out-but-i-need-to-execute -a-lot-de-commandes, https://stackoverflow.com/q uestions/40090445/paramiko-exec-command-not-executing-and-retourne-extra-params-found-in-cli – pynexj
Est le 'invoque_shell()' ce que vous utiliseriez, par exemple, quand vous avez besoin d'utiliser un pty? On dirait que ce serait le cas ... –
pas exactement. 'exec_command (commande, get_pty = True)' peut aussi obtenir un pty. voir https://stackoverflow.com/questions/43111173/ – pynexj