Модуль Python Paramiko с использованием нескольких команд
У меня есть класс, который создает соединение. Я могу подключиться и выполнить 1 команду до закрытия канала. В другой системе у меня есть несколько команд, и канал не закрывается. Очевидно, это проблема конфигурации систем, к которым я пытаюсь подключиться.
class connect:
newconnection = ''
def __init__(self,username,password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect('somehost', username=username,password=password,port=2222,timeout=5)
except:
print "Count not connect"
sys.exit()
self.newconnection = ssh
def con(self):
return self.newconnection
Затем я использую команду 'ls', чтобы распечатать какой-нибудь вывод
sshconnection = connect('someuser','somepassword').con()
stdin, stdout, stderr = sshconnection.exec_command("ls -lsa")
print stdout.readlines()
print stdout
stdin, stdout, stderr = sshconnection.exec_command("ls -lsa")
print stdout.readlines()
print stdout
sshconnection.close()
sys.exit()
После первого запуска exec_command он печатает ожидаемый вывод списка dir. Когда я печатаю стандартный вывод после первого exec_command, похоже, что канал закрыт
<paramiko.ChannelFile from <paramiko.Channel 1 (closed) -> <paramiko.Transport at 0x2400f10L (cipher aes128-ctr, 128 bits) (active; 0 open channel(s))>>>
Как я уже говорил в другой системе, я могу продолжать выполнять команды, и соединение не закрывается. Есть ли способ, которым я могу держать это открытым? или лучше я вижу причину, по которой он закрывается?
редактироватьТаким образом, похоже, что вы можете запустить только 1 команду на SSHClient.exec_command ... поэтому я решил получить get_transport (). Open_session () и затем запустить команду. Первый всегда работает. Второй всегда терпит неудачу, и сценарии просто зависают