首先,我试图让 fabric 正常工作,但它一直要求我输入密码。
所以我正在努力减少这个问题。从 Python 创建 SSH 连接也许是一个很好的 POC。我发现 fabric 使用 parmiko 进行 SSH 处理。唔。好的,让我们试着让一个例子工作。
这是我写的。
from ssh import *
import os
print "SSH-AGENT VARS"
print "SSH_AGENT_PID: %s " % os.environ['SSH_AGENT_PID']
print "SSH_AUTH_SOCK: %s " % os.environ['SSH_AUTH_SOCK']
a = Agent()
keys=a.get_keys()
print keys.count("192.168.1.10")
client = SSHClient()
client.load_system_host_keys()
client.connect('192.168.1.10')
导致以下错误消息:
% ./ssh_test.py
SSH-AGENT VARS
SSH_AGENT_PID: 26557
SSH_AUTH_SOCK: /tmp/ssh-pZHBElj26556/agent.26556
0
Traceback (most recent call last):
File "./ssh_test.py", line 18, in <module>
client.connect('192.168.1.10')
File "/usr/local/lib/python2.7/dist-packages/ssh/client.py", line 332, in connect
self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
File "/usr/local/lib/python2.7/dist-packages/ssh/client.py", line 493, in _auth
raise saved_exception
ssh.PasswordRequiredException: Private key file is encrypted
ssh-agent 在我的 session 中运行,我可以通过 SSH 连接到那个盒子,没问题,它不会提示我输入密码或任何东西。
我猜 paramiko 由于某种奇怪的原因无法连接到正在运行的 ssh-agent。
有没有人遇到过这样的问题?我正在使用 Ubuntu 11.10
我好像记得前阵子试过Fabric也有类似的问题,可能是坏了一段时间?
我连接,只是使用主机名作为参数。这是根据文档。
http://www.lag.net/paramiko/docs/paramiko.SSHClient-class.html
connect(self, hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False)
最佳答案
因此,当您执行 a.get_keys() 时,从 paramiko 代码和您的代码应该返回一个列表。我会看看它返回了什么。而且它不会返回您可以像那样计算的东西,因为它返回的是实际的加密 key 位。但无论如何,当您转移到 ssh 并且它起作用时,让我们转移到 Fabric。
您可以通过执行以下操作为 ssh 库打开它来获得更多日志记录:
import ssh
ssh.util.log_to_file("paramiko.log", 10)
在你的 fabfile 中。这将显示所有日志并显示更多 paramiko/ssh 本身正在做的事情,这可能有助于您进一步调试问题。
关于python - paramiko,不是在与 ssh-agent 交谈。织物中的相同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843803/