Python + Paramico + «need assistance»? Добрый день,
Ребята, в python сильно не умею, поэтому ткните пожалуйста где я не прав.
При выполнении кода, не выполняется тестовая команда ls -la на удаленном сервере или возможно выполняется, но не пишется в лог файл, в свою очередь лог файл создается и на сервер пользователь заходит.import paramiko
import time
import datetime
import sys
import os
user = 'test'
pas = 'password'
port = 22
host= '172.26.14.84'
remote_conn_pre = paramiko.SSHClient()
remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote_conn_pre.connect(hostname=host, username=user, password=pas, port=port, timeout=90)
remote_conn = remote_conn_pre.invoke_shell()
remote_conn.settimeout(20)
remote_conn.send ('\n')
time.sleep(1)
check=remote_conn.recv(2048)
print(check.decode('ascii'))
remote_conn.send ('ls -la' + '\n')
timestr = time.strftime("%d%m%Y")
log_out=open('/home/test/test_'+timestr+'.txt', 'w')
log_out.write(check)
log_out.close()

21 Авг 2019 в 06:28
174 +1
0
Ответы
1

Похоже, что проблема заключается в том, что вы пытаетесь записать ответ от сервера до того, как выполнена команда ls -la. В вашем коде вы отправляете команду ls -la, но сразу после этого пытаетесь записать ответ в файл log_out.write(check). Однако, в этот момент check содержит только приветственное сообщение от сервера, а не результат выполнения ls -la.

Для исправления этой проблемы вам необходимо сначала получить результат выполнения команды ls -la, а затем записывать его в файл. Пример исправленного кода:

import paramiko
import time
import datetime
import sys
import os
user = 'test'
pas = 'password'
port = 22
host= '172.26.14.84'
remote_conn_pre = paramiko.SSHClient()
remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote_conn_pre.connect(hostname=host, username=user, password=pas, port=port, timeout=90)
remote_conn = remote_conn_pre.invoke_shell()
remote_conn.settimeout(20)
remote_conn.send('\n')
time.sleep(1)
check = remote_conn.recv(2048)
print(check.decode('ascii'))
remote_conn.send('ls -la' + '\n')
time.sleep(2)
output = remote_conn.recv(2048).decode('utf-8')
timestr = time.strftime("%d%m%Y")
with open('/home/test/test_' + timestr + '.txt', 'w') as log_out:
log_out.write(output)
remote_conn_pre.close()

Этот код исправленный на основе вашего оригинального кода, должен отправить команду ls -la, дождаться ответа от сервера, получить результат выполнения команды и записать его в файл test_дата.txt. Не забудьте закрыть подключение SSH после использования.

20 Апр в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 134 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир