2016-12-21 3 views
0

Я начал использовать скрученные недавно, и я пытаюсь создать клиент, который соединяет и отправляет команды на SSH-сервер. (Я только создаю клиент и использую какой-нибудь SSH-сервер для его проверки). После отправки 10 команд (например, 'ls' command) и получения ответа для каждой из команд мой клиент заблокирован. Может ли кто-нибудь помочь мне найти решение? Вот самая важная часть моего клиента. PS: Я использую скрученные 12.0.0 (msi двоичные файлы).Python twisted ssh client: клиентские блоки после отправки 10 команд

class SimpleConnection(connection.SSHConnection): 
    def serviceStarted(self): 
     self.openChannel(CommandChannel(conn=self)) 

class CommandChannel(channel.SSHChannel): 
    name = 'session' 
    def channelOpen(self, data): 
     global command 
     command = "ls" 
     d = self.conn.sendRequest(self, 'exec', common.NS(command), wantReply=True) 
     d.addCallback(self.dataReceived) 
    def dataReceived(self, data): 
     print (data) 
    def closeReceived(self): 
     self.conn.openChannel(self) 

ответ

0

Проблема заключалась в том, что сервер блокирует номер сеанса 10: "[SSHChannel сеанса (10) на SSHService SSH-соединение на SimpleTransport, клиент] другая сторона отказалась открытую причину: (" Не удалось открыть ', 1) ". Это нормальное поведение (MaxSessions в sshd_config, который указывает максимальное количество открытых сеансов, разрешенных для каждого сетевого подключения, было установлено равным 10).

SSHChannel всегда закрывается после запуска команды. Таким образом, новый канал должен быть создан для новой команды после того, как старый канал был закрыт. Ниже приведена самая важная часть моего клиента:

class SimpleConnection(connection.SSHConnection): 
    def serviceStarted(self): 
     self.openChannel(CommandChannel(conn=self)) 

class CommandChannel(channel.SSHChannel): 
    name = 'session' 
    def channelOpen(self, data): 
     global command 
     command = "ls" 
     d = self.conn.sendRequest(self, 'exec', common.NS(command), wantReply=True) 
     d.addCallback(self.dataReceived) 
    def dataReceived(self, data): 
     print (data) 
    def closed(self): 
     self.conn.serviceStarted() 

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

  • Нет связанных вопросов^_^