Хорошо, первое, что я обнаружил, это то, что Paramiko устарел и не поддерживается.
Теперь он известен как пакет ssh, по крайней мере, в Ubuntu, и имеет другого сопровождающего (bitprophet)
Вот пример сеанса, в котором он используется:
$ ./ssh_demo.py
Hostname: 192.168.1.10
*** Host key OK.
Username [bryan]: root
Trying ssh-agent key eee5638f390e1698898984b10adfa9317 ... success!
*** Here we go!
Linux top.secret.com 2.9.37-1-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64
┌┌(root@top)-(10:44am-:-03/27)┌-¨-¨¨˙
Это не отвечает на вопрос, почему фабрика не аутентифицируется правильно с ssh-agent.Так что вопрос остается открытым.
Обновление:
Благодаря подсказке Моргана я немного продвинулся в решении этой проблемы.Как он предложил, я включил ведение журнала ssh, добавив следующее в начало своего fabfile.py
from fabric.api import *
import ssh
ssh.util.log_to_file("paramiko.log", 10)
Я также отслеживал журнал сервера.При этом я обнаружил, что указанный мной пользователь игнорируется, и вместо него используется мое локальное имя пользователя.
На сервере:
tail -f /var/log/auth.log
Mar 28 11:12:36 xxxxxxxxxxx sshd[17652]: Invalid user bryan from xxx.xxx.xxx.xxx
Локально:
tail -f paramiko.log
DEB [20120328-11:39:29.038] thr=1 ssh.transport: starting thread (client mode): 0x8dfc66cL
INF [20120328-11:39:29.066] thr=1 ssh.transport: Connected (version 2.0, client OpenSSH_5.5p1)
DEB [20120328-11:39:29.093] thr=1 ssh.transport: kex algos:['diffie-hellman-group-exchange-sha256', 'diffie-hellman-group-exchange-sha1', 'diffie-hellman-group14-sha1', 'diffie-hellman-group1-sha1'] server key:['ssh-rsa', 'ssh-dss'] client encrypt:['aes128-ctr', 'aes192-ctr', 'aes256-ctr', 'arcfour256', 'arcfour128', 'aes128-cbc', '3des-cbc', 'blowfish-cbc', 'cast128-cbc', 'aes192-cbc', 'aes256-cbc', 'arcfour', 'rijndael-cbc@lysator.liu.se'] server encrypt:['aes128-ctr', 'aes192-ctr', 'aes256-ctr', 'arcfour256', 'arcfour128', 'aes128-cbc', '3des-cbc', 'blowfish-cbc', 'cast128-cbc', 'aes192-cbc', 'aes256-cbc', 'arcfour', 'rijndael-cbc@lysator.liu.se'] client mac:['hmac-md5', 'hmac-sha1', 'umac-64@openssh.com', 'hmac-ripemd160', 'hmac-ripemd160@openssh.com', 'hmac-sha1-96', 'hmac-md5-96'] server mac:['hmac-md5', 'hmac-sha1', 'umac-64@openssh.com', 'hmac-ripemd160', 'hmac-ripemd160@openssh.com', 'hmac-sha1-96', 'hmac-md5-96'] client compress:['none', 'zlib@openssh.com'] server compress:['none', 'zlib@openssh.com'] client lang:[''] server lang:[''] kex follows?False
DEB [20120328-11:39:29.093] thr=1 ssh.transport: Ciphers agreed: local=aes128-ctr, remote=aes128-ctr
DEB [20120328-11:39:29.093] thr=1 ssh.transport: using kex diffie-hellman-group1-sha1; server key type ssh-rsa; cipher: local aes128-ctr, remote aes128-ctr; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none
DEB [20120328-11:39:29.183] thr=1 ssh.transport: Switch to new keys ...
DEB [20120328-11:39:29.224] thr=2 ssh.transport: Trying SSH agent key cda5638f390e166864444b1093b91017
DEB [20120328-11:39:29.272] thr=1 ssh.transport: userauth is OK
INF [20120328-11:39:53.310] thr=1 ssh.transport: Authentication (publickey) failed.
DEB [20120328-11:41:29.076] thr=1 ssh.transport: EOF in transport thread
Хм, это странно, я запустил команду как: fab diskfree -H xxx.xxx.xxx.xxx -u root
Но что это?
$ cat ./fabfile.py
from fabric.api import *
import ssh
ssh.util.log_to_file("paramiko.log", 10)
env.user = 'bryan'
def host_type():
run('uname -s')
def diskfree():
run('df -h')
Хмм
env.user = 'bryan'
Может ли это быть причиной проблемы?Могут ли сообщения об ошибках ssh просто ввести меня в заблуждение?
Я удалил строку, и она сработала, так что я думаю, так и есть.