Мне нужно проанализировать вывод команды на удаленной машине, которую я должен подключить через SSH.
Эта удаленная машина работает под управлением Ubuntu, и я могу получить доступ к SSH только через «оболочку консоли» (извините, не знаю точного термина для него), называемой BOSCLI, в которой я могу запускать только набор конкретных команд.
При подключении я получаю запрос на ввод пароля sudo, после ввода я нахожусь в приглашении, и мне не нужно вводить его снова.
Сначала я начал использовать exec_command
, который не работал по понятным причинам. Сейчас я переключился на invoke_shell()
и затем send()
, но отправляется только запрос пароля, а не следующая команда.
Конечно, я прочитал много других вопросов здесь и на других сайтах, но безуспешно ...
def conectar(url,user,passw, puerto, sudoPass):
cliente = paramiko.SSHClient()
cliente.set_missing_host_key_policy(paramiko.AutoAddPolicy())
cliente.connect(url,port=puerto, username=user, password=passw)
if cliente.get_transport() is None: raise Exception(paramiko.SSHException)
time.sleep(2)
canal = cliente.invoke_shell()
stdin = canal.makefile('wb')
stdout = canal.makefile('rb')
stderr = canal.makefile_stderr('r')
while not canal.recv_ready():
time.sleep(2)
aux = canal.send(sudoPass+'\n') #sudo pass
out = canal.recv(1024)
print(aux)
time.sleep(1)
aux = canal.send('''dhcp pool status\n''')
print(aux)
out += canal.recv(9999)
#ssh_stdin, ssh_stdout, ssh_stderr = cliente.exec_command('dhcp pool status',get_pty=True)
#ssh_stdout.channel.recv_exit_status()
cliente.close()
print(stdout.read())
print(stderr.read())
print(out.decode('ascii'))
Вывод должен быть длинным текстом со всей статистикой DHCP по разным пулам, чтобы следующий метод мог проанализировать, однако я получаю пустые выходные данные.
Есть еще одна вещь, которая меня сейчас больше всего смущает, это то, что на самом деле «out» имеет контент (который является приветственным MOTD и т. Д. На оболочке), но stdout
пуст.
print(aux) returns 9 first
print(aux) returns 17 afterwards.
print(stdout.read()) returns b''
print(stderr.read()) returns b''
out
содержание следующее:
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-66-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Tue Jul 2 11:34:22 CEST 2019
System load: 0.42 Users logged in: 0
Usage of /: 32.9% of 26.51GB IP address for eth0:
Memory usage: 22% IP address for eth1:
Swap usage: 4% IP address for eth2:
Processes: 194 IP address for docker0:
Graph this data and manage this system at:
https://landscape.canonical.com/
Last login: Tue Jul
[sudo] password for bos:
(pho-xem1) (Nuevo) bcli 0 [] normal>
Это командная строка после передачи sudo pass.