【问题标题】:Difficult to install python ssh library on windows (ssh has been replaced with "paramiko")在 windows 上安装 python ssh 库困难(ssh 已被“paramiko”替换)
【发布时间】:2014-08-22 06:25:20
【问题描述】:

我将把我的问题和答案都放在这里,因为我很难弄清楚。 (我也开始尝试安装“ssh”库,但它已被相同功能的“paramiko”库取代。我可能在这里错过了替换,如果我有请原谅。)

问题:我需要在 Windows 7 系统上安装“paramiko”库。

Pip 和 easy_install 在尝试安装“加密”模块时都会出错。

我走上了许多涉及 Visual C 和 Visual Studio 的死胡同,但没有成功。

答案:(分两部分) 1) 从二进制文件安装加密库,就像从这里开始:

http://www.voidspace.org.uk/python/modules.shtml#pycrypto

这将安装加密库,但大小写与 paramiko 库预期的不同。所以我在这里学到了一个小技巧: http://*.com/questions/19623267/importerror-no-module-named-crypto-cipher 用户“pho”的回答将这些行添加到 python 程序中:

import crypto
import sys
sys.modules['Crypto'] = crypto

现在我可以安装和运行 paramiko 库了。我希望这可以帮助其他人更快地找到解决方案。

【问题讨论】:

  • 一个小提示,你几乎肯定想要安装paramiko,而不是sshsshparamiko 的一个分支,现在已在上游合并且未维护:pypi.python.org/pypi/ssh/1.8.0
  • 谢谢。我打算在一切正常后进行更新。包括 paramiko 变化。现在我正在努力使用 RSA 密钥。一旦我得到照顾,我会改进这个问题和答案。 (我想至少立即完成这部分的第一部分,这样我以后就不会忽视它,并且我花在它上面的所有时间都花在了别人身上。)

标签: python ssh pycrypto


【解决方案1】:

答案:(分两部分) 1)从二进制安装加密库,就像从这里:

http://www.voidspace.org.uk/python/modules.shtml#pycrypto 注意:“paramiko”库已替换“ssh”,所以这个答案反映了这一点

这将安装加密库,但大小写与 paramiko 库预期的不同。所以我在这里学到了一个小技巧:

http://*.com/questions/19623267/importerror-no-module-named-crypto-cipher

用户“pho”的回答将这些行添加到 python 程序中:

import crypto
import sys
sys.modules['Crypto'] = crypto

现在我可以安装和运行 paramiko 库了。我希望这可以帮助其他人更快地找到解决方案。

这是一个好的开始。我的下一个目标是弄清楚如何获得正确的钥匙。如果你像我一样,你会使用 putty 和它的 keygen 实用程序来进行密钥管理。而且效果很好!但是它将私钥保存在与 paramiko 期望的不同的文件中。但是 puttygen 也提供了解决方案。

在 puttygen 中打开您的 *.ppk 文件。 To to Conversions->Export OpenSSH Key 将您的私钥保存为 id_rsa(当然在 .ssh 目录中)。 (我不确定是否需要默认名称。请随意尝试其他名称并添加评论。)

现在 paramiko 将能够自动找到它。

这是我的结果脚本。

import sys
import crypto
sys.modules['Crypto'] = crypto
import paramiko

knownHosts  = 'C:/Users/Skip Huffman/.ssh/known_hosts'
keyFileName     = 'C:/Users/Skip Huffman/.ssh/id_rsa'
hostName    = "mcsremotetest1.cnn.vgtf.net"
userName    = "<username matching keypair>"

client = paramiko.SSHClient()
client.load_system_host_keys(knownHosts)
client.connect(hostName, username=userName)
stdin, stdout, stderr = client.exec_command('ls')
print "Standard Error: ", stderr.readlines()
print "Standard Output: ", stdout.readlines()

有了正确匹配的密钥对,现在应该可以正常工作了。它对我有用。 (当然要替换正确的用户名。)

【讨论】: