Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SSH Error: SSH startup: Unable to exchange encryption keys #26

Open
freeseacher opened this issue May 20, 2016 · 0 comments
Open

SSH Error: SSH startup: Unable to exchange encryption keys #26

freeseacher opened this issue May 20, 2016 · 0 comments

Comments

@freeseacher
Copy link

Hi!
i got that error with old mikrotik

> system routerboard print
       routerboard: yes
             model: "SXT 5HnD"
     serial-number: "292901552E3D"
  current-firmware: "2.32"
  upgrade-firmware: "2.32"

the code is

class SSHIOStream(IOStream):
    SSH_KEY_PREFIX = os.path.join("var", "etc", "ssh")

    def __init__(self, sock, cli, *args, **kwargs):
        super(SSHIOStream, self).__init__(sock, *args, **kwargs)
        self.cli = cli
        self.script = self.cli.script
        self.logger = cli.logger
        self.session = libssh2.Session()
        self.channel = None

    @tornado.gen.coroutine
    def startup(self):
        """
        SSH session startup
        """
        user = self.script.credentials["user"]
        self.logger.debug("Startup ssh session")
        try:
            self.session.set_trace(libssh2.LIBSSH2_TRACE_SOCKET | libssh2.LIBSSH2_TRACE_TRANS)
            self.session.session_method_pref(20,"diffie-hellman-group1-sha1")
            self.session.startup(self.socket)
            host_hash = self.session.hostkey_hash(2)  # SHA1
            self.logger.debug("Connected. Host fingerprint is %s",
                              host_hash.encode("hex"))
            auth_methods = self.session.userauth_list(user).split(",")
            self.logger.debug("Supported authentication methods: %s",
                              ", ".join(auth_methods))
            # Try to authenticate
            authenticated = False
            for method in auth_methods:
                ah = getattr(self, "auth_%s" % method, None)
                if ah:
                    authenticated |= ah()
                    if authenticated:
                        break
            if authenticated:
                self.logger.debug("User is authenticated")
            else:
                self.logger.error("Failed to authenticate user '%s'", user)
                raise self.cli.CLIError("Failed to log in")
            self.logger.debug("Open channel")
            self.channel = self.session.open_session()
            self.channel.pty("xterm")
            self.channel.shell()
            self.channel.setblocking(0)
        except _libssh2.Error, why:
            raise self.cli.CLIError("SSH Error: %s" % why)

i got error on

self.session.startup(self.socket)

because mikrotik wants old style packet. so in console i got
Protocol error: expected packet type 30, got 34

i am using python 2.7 and libssh2 from master branch and Debian 8.4

# dpkg -l | grep libssh2
ii  libssh2-1:amd64                1.4.3-4.1+deb8u1            amd64        SSH2 client-side library
ii  libssh2-1-dev:amd64            1.4.3-4.1+deb8u1            amd64        SSH2 client-side library (development headers)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant