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
236 +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 Апр 2024 в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир