title: twisted.internet.error.ConnectionRefusedError: 111: Connection refused
body: <p>I'm getting the following failure:-</p>
  
  <blockquote>
    <p>Failure: twisted.internet.error.ConnectionRefusedError: Connection was
    refused by other side: 111: Connection refused.</p>
  </blockquote>
  
  <p>I note that the client never asks me for a password. I'm running it from inside PyCharm.</p>
  
  <p>Can anyone point me in the right direction?</p>
  
  <p>My client code is:-</p>
  
  <pre><code>#!/usr/bin/env python
  
  # Copyright (c) Twisted Matrix Laboratories.
  # See LICENSE for details.
  
  from twisted.conch.ssh import transport, userauth, connection, common, keys, channel
  from twisted.internet import defer, protocol, reactor
  from twisted.python import log
  import struct, sys, getpass, os
  
  USER = 'user'
  HOST = 'localhost'
  
  class SimpleTransport(transport.SSHClientTransport):
      def verifyHostKey(self, hostKey, fingerprint):
          print 'host key fingerprint: %s' % fingerprint
          return defer.succeed(1) 
  
      def connectionSecure(self):
          self.requestService(
              SimpleUserAuth(USER,
                  SimpleConnection()))
  
  class SimpleUserAuth(userauth.SSHUserAuthClient):
      def getPassword(self):
          return defer.succeed(getpass.getpass("password" % (USER, HOST)))
  
      def getGenericAnswers(self, name, instruction, questions):
          print name
          print instruction
          answers = []
          for prompt, echo in questions:
              if echo:
                  answer = raw_input(prompt)
              else:
                  answer = getpass.getpass(prompt)
              answers.append(answer)
          return defer.succeed(answers)
  
      def getPublicKey(self):
          path = os.path.expanduser('~/.ssh/id_dsa') 
          # this works with rsa too
          # just change the name here and in getPrivateKey
          if not os.path.exists(path) or self.lastPublicKey:
              # the file doesn't exist, or we've tried a public key
              return
          return keys.Key.fromFile(filename=path+'.pub').blob()
  
      def getPrivateKey(self):
          path = os.path.expanduser('~/.ssh/id_dsa')
          return defer.succeed(keys.Key.fromFile(path).keyObject)
  
  class SimpleConnection(connection.SSHConnection):
      def serviceStarted(self):
          self.openChannel(TrueChannel(2**16, 2**15, self))
          self.openChannel(FalseChannel(2**16, 2**15, self))
          self.openChannel(CatChannel(2**16, 2**15, self))
  
  class TrueChannel(channel.SSHChannel):
      name = 'session' # needed for commands
  
      def openFailed(self, reason):
          print 'true failed', reason
  
      def channelOpen(self, ignoredData):
          self.conn.sendRequest(self, 'exec', common.NS('true'))
  
      def request_exit_status(self, data):
          status = struct.unpack('&gt;L', data)[0]
          print 'true status was: %s' % status
          self.loseConnection()
  
  class FalseChannel(channel.SSHChannel):
      name = 'session'
  
      def openFailed(self, reason):
          print 'false failed', reason
  
      def channelOpen(self, ignoredData):
          self.conn.sendRequest(self, 'exec', common.NS('false'))
  
      def request_exit_status(self, data):
          status = struct.unpack('&gt;L', data)[0]
          print 'false status was: %s' % status
          self.loseConnection()
  
  class CatChannel(channel.SSHChannel):
      name = 'session'
  
      def openFailed(self, reason):
          print 'echo failed', reason
  
      def channelOpen(self, ignoredData):
          self.data = ''
          d = self.conn.sendRequest(self, 'exec', common.NS('cat'), wantReply = 1)
          d.addCallback(self._cbRequest)
  
      def _cbRequest(self, ignored):
          self.write('hello conch\n')
          self.conn.sendEOF(self)
  
      def dataReceived(self, data):
          self.data += data
  
      def closed(self):
          print 'got data from cat: %s' % repr(self.data)
          self.loseConnection()
          reactor.stop()
  
  protocol.ClientCreator(reactor, SimpleTransport).connectTCP(HOST, 5022)
  reactor.run()
  </code></pre>
  
  <p>and my server code is </p>
  
  <pre><code>#!/usr/bin/env python
  
  # Copyright (c) Twisted Matrix Laboratories.
  # See LICENSE for details.
  
  from twisted.cred import portal, checkers
  from twisted.conch import error, avatar
  from twisted.conch.checkers import SSHPublicKeyDatabase
  from twisted.conch.ssh import factory, userauth, connection, keys, session
  from twisted.internet import reactor, protocol, defer
  from twisted.python import log
  from zope.interface import implements
  import sys
  log.startLogging(sys.stderr)
  
  """
  Example of running another protocol over an SSH channel.
  log in with username "user" and password "password".
  """
  
  class ExampleAvatar(avatar.ConchUser):
  
      def __init__(self, username):
          avatar.ConchUser.__init__(self)
          self.username = username
          self.channelLookup.update({'session':session.SSHSession})
  
  class ExampleRealm:
      implements(portal.IRealm)
  
      def requestAvatar(self, avatarId, mind, *interfaces):
          return interfaces[0], ExampleAvatar(avatarId), lambda: None
  
  class EchoProtocol(protocol.Protocol):
      """this is our example protocol that we will run over SSH
      """
      def dataReceived(self, data):
          if data == '\r':
              data = '\r\n'
          elif data == '\x03': #^C
              self.transport.loseConnection()
              return
          self.transport.write(data)
  
  publicKey = 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEArzJx8OYOnJmzf4tfBEvLi8DVPrJ3/c9k2I/Az64fxjHf9imyRJbixtQhlH9lfNjUIx+4LmrJH5QNRsFporcHDKOTwTTYLh5KmRpslkYHRivcJSkbh/C+BR3utDS555mV'
  
  privateKey = """-----BEGIN RSA PRIVATE KEY-----
  MIIByAIBAAJhAK8ycfDmDpyZs3+LXwRLy4vA1T6yd/3PZNiPwM+uH8Yx3/YpskSW
  4sbUIZR/ZXzY1CMfuC5qyR+UDUbBaaK3Bwyjk8E02C4eSpkabJZGB0Yr3CUpG4fw
  vgUd7rQ0ueeZlQIBIwJgbh+1VZfr7WftK5lu7MHtqE1S1vPWZQYE3+VUn8yJADyb
  Z4fsZaCrzW9lkIqXkE3GIY+ojdhZhkO1gbG0118sIgphwSWKRxK0mvh6ERxKqIt1
  xJEJO74EykXZV4oNJ8sjAjEA3J9r2ZghVhGN6V8DnQrTk24Td0E8hU8AcP0FVP+8
  PQm/g/aXf2QQkQT+omdHVEJrAjEAy0pL0EBH6EVS98evDCBtQw22OZT52qXlAwZ2
  gyTriKFVoqjeEjt3SZKKqXHSApP/AjBLpF99zcJJZRq2abgYlf9lv1chkrWqDHUu
  DZttmYJeEfiFBBavVYIF1dOlZT0G8jMCMBc7sOSZodFnAiryP+Qg9otSBjJ3bQML
  pSTqy7c3a2AScC/YyOwkDaICHnnD3XyjMwIxALRzl0tQEKMXs6hH8ToUdlLROCrP
  EhQ0wahUTCk1gKA4uPD6TMTChavbh4K63OvbKg==
  -----END RSA PRIVATE KEY-----"""
  
  
  class InMemoryPublicKeyChecker(SSHPublicKeyDatabase):
  
      def checkKey(self, credentials):
          return credentials.username == 'user' and \
              keys.Key.fromString(data=publicKey).blob() == credentials.blob
  
  class ExampleSession:
  
      def __init__(self, avatar):
          """
          We don't use it, but the adapter is passed the avatar as its first
          argument.
          """
  
      def getPty(self, term, windowSize, attrs):
          pass
  
      def execCommand(self, proto, cmd):
          raise Exception("no executing commands")
  
      def openShell(self, trans):
          ep = EchoProtocol()
          ep.makeConnection(trans)
          trans.makeConnection(session.wrapProtocol(ep))
  
      def eofReceived(self):
          pass
  
      def closed(self):
          pass
  
  from twisted.python import components
  components.registerAdapter(ExampleSession, ExampleAvatar, session.ISession)
  
  class ExampleFactory(factory.SSHFactory):
      publicKeys = {
          'ssh-rsa': keys.Key.fromString(data=publicKey)
      }
      privateKeys = {
          'ssh-rsa': keys.Key.fromString(data=privateKey)
      }
      services = {
          'ssh-userauth': userauth.SSHUserAuthServer,
          'ssh-connection': connection.SSHConnection
      }
  
  
  portal = portal.Portal(ExampleRealm())
  passwdDB = checkers.InMemoryUsernamePasswordDatabaseDontUse()
  passwdDB.addUser('user', 'password')
  portal.registerChecker(passwdDB)
  portal.registerChecker(InMemoryPublicKeyChecker())
  ExampleFactory.portal = portal
  
  if __name__ == '__main__':
      reactor.listenTCP(5022, ExampleFactory())
      reactor.run()
  </code></pre>