2016-07-04 3 views
0

Я хочу вызвать приложение на удаленной машине с помощью python paramiko; это приложение ожидает, пока вы введете определенную строку, а затем добьетесь успеха. Как я могу отправить запрашиваемую строку через соединение SSH с ней?Как автоматически отвечать на запросы через SSH-соединение в python

Вызов приложения, как:

./app --init 

This option will delete the database and recreate all files. 
OLD DATA (IF ANY) WILL BE LOST! 

This option must be used just on one of your servers. 
Running it on any one of the servers will delete the other server's data, too. 
If you are sure, type the following sentence and press ENTER: 

I KNOW THAT THIS OPTION DESTROYS EVERYTHING; DO IT ANYWAY. 

Тогда я должен набрать I KNOW THAT THIS OPTION DESTROYS EVERYTHING; DO IT ANYWAY. и нажмите ENTER для продолжения.

У меня есть этот код для подключения к удаленному хосту:

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(ip, username=usrname, password=passwd, compress=True) 

Я попытался self.sshlink.exec_command('cd app_addr;./app --init'); он ничего не выполнял.

+0

Если вы спрашиваете, как это сделать программно, а затем, если перенаправление стандартного ввода не работает, вы можете использовать [Ожидать] (HTTP : //expect.sourceforge.net/). Вам нужно будет увидеть, доступен ли Expect как пакет для вашей операционной системы, что бы это ни было. – ghoti

+0

Как вы используете paramiko, а что не работает? –

+0

@SergeBallesta, просмотрите мое редактирование! –

ответ

0

Я нашел решение в одном из непринятых ответов в this question.

Это то, что я наконец-то попробовал, и удалось:

cmd = 'cd app_address;./app --init' 
answer = 'I KNOW THAT THIS OPTION DESTROYS EVERYTHING; DO IT ANYWAY.' 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostname=ip, username=username, password=password) 
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd) 
ssh_stdin.write(answer + '\n') 
ssh_stdin.flush() 
time.sleep(5) 
ssh_stdout.read() 
Смежные вопросы