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()
Похоже, что проблема заключается в том, что вы пытаетесь записать ответ от сервера до того, как выполнена команда 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 после использования.
Похоже, что проблема заключается в том, что вы пытаетесь записать ответ от сервера до того, как выполнена команда ls -la. В вашем коде вы отправляете команду ls -la, но сразу после этого пытаетесь записать ответ в файл log_out.write(check). Однако, в этот момент check содержит только приветственное сообщение от сервера, а не результат выполнения ls -la.
Для исправления этой проблемы вам необходимо сначала получить результат выполнения команды ls -la, а затем записывать его в файл. Пример исправленного кода:
import paramikoimport 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 после использования.