python linux bash ssh paramiko

Pase la entrada/variables al comando/script a través de SSH usando Python Paramiko



linux bash (1)

Escribe la entrada que tu comando necesita para la stdin :

stdin, stdout, stderr = self.client.exec_command(command) stdin.write(name + ''/n'') stdin.flush()

(Por supuesto, deberá propagar la variable de name de module a sendCommand , pero supongo que sabe cómo hacer esa parte).

Tengo problemas para pasar respuestas a un script de bash en un servidor remoto a través de SSH.

Estoy escribiendo un programa en Python 3.6.5 que será SSH a un servidor remoto de Linux. En este servidor remoto de Linux hay un script de bash que estoy ejecutando que requiere la entrada del usuario para completar. Por alguna razón, no puedo pasar una entrada de usuario de mi programa python original a través de SSH y hacer que complete las preguntas de entrada del usuario del script de bash.

main.py

from tkinter import * import SSH hostname = ''xxx'' username = ''xxx'' password = ''xxx'' class Connect: def module(self): name = input() connection = SSH.SSH(hostname, username, password) connection.sendCommand( ''cd xx/{}/xxxxx/ && source .cshrc && ./xxx/xxxx/xxxx/xxxxx''.format(path))

SSH.py

from paramiko import client class SSH: client = None def __init__(self, address, username, password): print("Login info sent.") print("Connecting to server.") self.client = client.SSHClient() # Create a new SSH client self.client.set_missing_host_key_policy(client.AutoAddPolicy()) self.client.connect( address, username=username, password=password, look_for_keys=False) # connect def sendCommand(self, command): print("Sending your command") # Check if connection is made previously if (self.client): stdin, stdout, stderr = self.client.exec_command(command) while not stdout.channel.exit_status_ready(): # Print stdout data when available if stdout.channel.recv_ready(): # Retrieve the first 1024 bytes alldata = stdout.channel.recv(1024) while stdout.channel.recv_ready(): # Retrieve the next 1024 bytes alldata += stdout.channel.recv(1024) # Print as string with utf8 encoding print(str(alldata, "utf8")) else: print("Connection not opened.")

El final /xxxxxx en la clase Connect es el script remoto que se inicia. Se abrirá una respuesta de texto a la espera de un formato como

Cuál es su nombre:

y parece que no puedo encontrar una manera de pasar correctamente la respuesta al script desde mi archivo main.py dentro de la clase Connect .

En todas las formas en que he intentado pasar el name como un argumento o una variable, la respuesta parece simplemente desaparecer (es probable que se trate de imprimirlo en el indicador de Linux y no dentro del script bash)

Creo que usar la función read_until para buscar : al final de la pregunta puede funcionar.

Sugerencias?