2015-06-03 3 views
1

Я хочу использовать один и тот же объект SSH для выпуска exec_command() несколько раз в модуле Paramiko в Python.Используйте один и тот же объект SSH для выдачи «exec_command()» несколько раз в Paramiko

Цель состоит в том, чтобы получить выход из того же сеанса.

Есть ли способ сделать это? exec_command() закрывает канал после завершения выполнения команды, а затем для выполнения следующей команды требуется новый объект ssh .. но сеансы будут отличаться от того, что я не хочу.

Код

import os, sys, 
import connectlibs as ssh 
s = ssh.connect("xxx.xx.xx.xxx", "Admin", "Admin") 
channel = s.invoke_shell() 
channel.send("net use F: \\\\xyz.xy.xc.xa\\dir\n") 
>>>32 
channel.send("net use") 
>>>7 
channel.recv(500) 
'Last login: Tue Jun 2 23:52:29 2015 from xxx.xx.xx.xx\r\r\n\x1b]0;~\x07\r\r\n\x1b[[email protected] \x1b[33m~\x1b[0m\r\r\n$ net use F: \\\\xyz.xy.xc.xa\\dir\r\nSystem error 67 has occurred.\r\r\n\r\r\nThe network name cannot be found.\r\r\n\r\r\n\x1b]0;~\x07\r\r\n\x1b[[email protected] \x1b[33m~\x1b[0m\r\r\n$ net use' 
>>> 
+0

Вы вводите в заблуждение «канал» и «сеанс». Что вы на самом деле пытаетесь сделать? Что означает * «получить выход из той же сессии» * означает? –

+0

HI Martin: Мне нужны выходы для команд с использованием одного и того же «объекта ssh», что означает тот же сеанс. Сессия может иметь несколько каналов - правильно? Я хочу отправить команды один за другим и убедиться, что вывод в порядке. – user2939055

+0

Например, как можно выполнить эквивалент в python: pwd cd .. pwd – Lisle

ответ

0

SSH сессия может иметь несколько каналов действительно (но Paramiko possibly does not support it).

Но на сеансе вы представляете себе «сеанс оболочки». Но это не то, что сеанс SSH. Фактически канал, что соответствует «сеансу оболочки».

Другими словами, даже если вы можете открыть несколько «EXEC» каналы с Paramiko более одного соединения SSH (сеанса) и вызовите exec_command на них, команды получают казнены в сессии в разные оболочки. Так что это вам не поможет.


Вы можете проверить это с помощью клиента PuTTY SSH. Последние версии поддерживают connection sharing, что в основном означает, что вы можете иметь больше окон PuTTY (каждый из которых использует собственный канал) через одно соединение/сеанс SSH. Если вы выполните команду в одном окне PuTTY, а команды изменят среду (например, переменную окружения или текущий рабочий каталог), это изменение не будет отражено в другом окне PuTTY, даже если они используют одно и то же соединение SSH.


Поэтому вам необходимо выполнить команды в одном канале. В зависимости от ваших потребностей (которые до сих пор не понятны) вам необходимо использовать канал «exec» или «shell».

В любом случае у вас будут проблемы, определяющие, где вывод одной команды завершается, а вывод другой команды начинается, когда они имеют один и тот же «поток».

Вы можете решить это путем вставки уникального разделителя (строки) между ними и поиска его в потоке вывода канала.

channel = ssh.invoke_shell() 
channel.send('ls\n') 
channel.send('echo unique-string-separating-output-of-the-commands\n') 
channel.send('pwd\n') 
+0

Да, получили обе ссылки, но как вы выполняете несколько команд за один сеанс в Paramiko? (Python) -> не работает для меня, как ответ на претензии. Он не работал еще и для некоторых людей из комментариев. Итак, как я могу это достичь? Как открыть оболочку и выполнить ее? Вы имеете в виду, что «оболочка» не использует парамико? – user2939055

+0

1) * «Не работает для меня» * довольно расплывчато. В каких комментариях вы ссылаетесь? Я вижу только один. 2) * Как открыть оболочку и выполнить? * Вы делаете это, как я показал вам в своем ответе, другого пути нет. 3) * Вы имеете в виду, что «оболочка» не использует парамико?* Не знаю, что вы имеете в виду. 4) Если вы расскажете более подробно, чего вы пытаетесь достичь, вы можете получить более качественные ответы. –

+0

Я хочу ssh в систему - используйте команду «ssh_obj» для отправки команд A и B. После выполнения команды A я хочу проанализировать ее вывод, а затем выполнить B, а затем проанализировать его вывод. Я не могу участвовать в двух разных сеансах ssh между A и B - вот почему я вижу, могу ли я использовать один и тот же «ssh_obj» для выполнения обеих команд A и B. – user2939055

Смежные вопросы