Paramiko SSHClient não pode executar todo o script de shell no computador remoto [duplicado]

Oct 15 2020

Gostaria de executar um script Bash remoto usando o script Python no computador local.

Script Bash em computador remoto

# script.sh    
#!/bin/bash

echo "... Options ..."
echo "  1) Option 1"
echo "  2) Option 2"

read -p "Enter [1/2] : " n

case $n in
  1) echo "Option 1 selected";;
  2) echo "Option 2 selected";;
  *) echo "Invalid option";;
esac

Script Python no computador local

# script.py
import sys
from paramiko import SSHClient

hostname = '10.0.0.1'
username = 'u'
password = 'p'

client = SSHClient()
client.load_system_host_keys()
client.connect(hostname, username=username, password=password)

stdin, stdout, stderr = client.exec_command('./script.sh')

for line in stdout:
    sys.stdout.write(line)

Não tenho problemas para executar script.shem um computador remoto.

remote@computer:~$ ./script.sh 
... Options ...
  1) Option 1
  2) Option 2
Enter [1/2] : 1
Option 1 selected
remote@computer:~$ 

O problema é que quando tento usar o script Python no computador local, o script parece travar. Eu nem mesmo vejo a Enter [1/2] : linha sendo executada.

local@computer:~$ python script.py 
... Options ...
  1) Option 1
  2) Option 2

O que há de errado neste código?

Resultado Desejado

local@computer:~$ python script.py ... Options ... 1) Option 1 2) Option 2 Enter [1/2] : 1 Option 1 selected local@computer:~$ 

Respostas

1 user14251572 Oct 15 2020 at 13:56

Experimentar

stdin.write('1')
stdin.write('\n')
stdin.flush()

output = stdout.readlines()
print(''.join(output))

por exemplo

$ python script.py ... Options ... 1) Option 1 2) Option 2 Option 1 selected $