title: Fatal error: Incompatible ssh peer (no acceptable kex algorithm)
body: <p>Running fabric python API and seeing 'Fatal error: Incompatible ssh peer (no acceptable kex algorithm)' on host 'a-stor1' but works fine on 'rack1-app1'. Only difference that I can see is that 'rack1-app1' is running openssl 1.0.1-4ubuntu5.3 and 'a-stor1' is running 1.0.1-4ubuntu5.21.</p>
  
  <pre><code>Brians-MacBook-Pro:initial bohalloran$ python tests/test_fabric.py 
  [rack1-app1] Executing task 'testIt'
  [rack1-app1] run: uptime
  [rack1-app1] out: 13:07:43 up 24 days, 19:18, 1 user, load average: 0.07, 0.05, 0.05
  [rack1-app1] out:
  
  [a-stor1] Executing task 'testIt'
  [a-stor1] run: uptime
  ERROR:paramiko.transport:Exception: Incompatible ssh peer (no acceptable kex algorithm)
  ERROR:paramiko.transport:Traceback (most recent call last):
  ERROR:paramiko.transport: File "/Library/Python/2.7/site-packages/paramiko/transport.py", line 1614, in run
  ERROR:paramiko.transport: self._handler_tableptype
  ERROR:paramiko.transport: File "/Library/Python/2.7/site-packages/paramiko/transport.py", line 1694, in _negotiate_keys
  ERROR:paramiko.transport: self._parse_kex_init(m)
  ERROR:paramiko.transport: File "/Library/Python/2.7/site-packages/paramiko/transport.py", line 1809, in _parse_kex_init
  ERROR:paramiko.transport: raise SSHException('Incompatible ssh peer (no acceptable kex algorithm)')
  ERROR:paramiko.transport:SSHException: Incompatible ssh peer (no acceptable kex algorithm)
  ERROR:paramiko.transport:
  
  Fatal error: Incompatible ssh peer (no acceptable kex algorithm)
  
  Underlying exception:
  Incompatible ssh peer (no acceptable kex algorithm)
  
  Aborting.
  Incompatible ssh peer (no acceptable kex algorithm)
  
  Underlying exception:
  Incompatible ssh peer (no acceptable kex algorithm)
  Brians-MacBook-Pro:initial bohalloran$ cat tests/test_fabric.py 
  from fabric.api import env, run, prefix, hide, settings
  from fabric import tasks
  import logging
  
  env.hosts = ['rack1-app1', 'a-stor1']
  env.user = 'storiant'
  env.password = 'ST0r!ant'
  
  logging.basicConfig()
  
  cmd = 'uptime'
  
  def main():
  tasks.execute(testIt)
  
  def testIt():
  with settings(warn_only = True):
  run(cmd)
  
  if name == "main":
  main()
  Brians-MacBook-Pro:initial bohalloran$
  
  Brians-MacBook-Pro:initial bohalloran$ python
  Python 2.7.6 (default, Sep 9 2014, 15:04:36) 
  [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
  Type "help", "copyright", "credits" or "license" for more information.
  
  import paramiko
  print paramiko.version
  1.15.2
  ^D
  Brians-MacBook-Pro:initial bohalloran$
  Brians-MacBook-Pro:initial bohalloran$ openssl version
  OpenSSL 0.9.8zd 8 Jan 2015
  Brians-MacBook-Pro:initial bohalloran$
  
  storiant@Rack1-app1:~$ openssl version
  OpenSSL 1.0.1 14 Mar 2012
  storiant@Rack1-app1:~$
  
  storiant@a-stor1:~$ openssl version
  OpenSSL 1.0.1 14 Mar 2012
  storiant@a-stor1:~$
  
  storiant@a-stor1:~$ dpkg -l | grep libgnutls
  ii libgnutls26 2.12.14-5ubuntu3.1 GNU TLS library - runtime library
  storiant@a-stor1:~$ dpkg -l | grep openssl
  ii libevent-openssl-2.0-5 2.0.16-stable-1ubuntu0.1 Asynchronous event notification library (openssl)
  ii openssl 1.0.1-4ubuntu5.21 Secure Socket Layer (SSL) binary and related cryptographic tools
  storiant@a-stor1:~$
  
  storiant@Rack1-app1:~$ dpkg -l | grep libgnutls
  ii libgnutls26 2.12.14-5ubuntu3.1 GNU TLS library - runtime library
  storiant@Rack1-app1:~$ dpkg -l | grep openssl
  ii libevent-openssl-2.0-5 2.0.16-stable-1 Asynchronous event notification library (openssl)
  ii openssl 1.0.1-4ubuntu5.3 Secure Socket Layer (SSL) binary and related cryptographic tools
  storiant@Rack1-app1:~$
  
  storiant@Rack1-app1:~$ uname -a
  Linux Rack1-app1 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 17:37:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
  storiant@Rack1-app1:~$
  
  storiant@a-stor1:~$ uname -a
  Linux a-stor1 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 17:37:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
  storiant@a-stor1:~$
  </code></pre>