Ok, eu brinquei um pouco mais com o código python. @lxio você está certo, isso não é realmente um bug da Paramiko ou Duplicity, mas parece que o sistema known_hosts parece ser um pouco inconsistente (e pouco claro), mas finalmente consegui trabalhar.
Eu usei ssh myhost -p 2323 para aceitar a assinatura, mas esse método não parece armazenar o valor de porta específico na lista known_hosts (assim a Paramiko se recusando a se conectar, porque acha que a impressão digital é de myhost:21 . Eu ainda não tenho correto para adicionar a chave via bash, mas eu sei como adicionar a impressão digital ao arquivo known_hosts via Paramiko para garantir que ele irá se conectar ao host correto no futuro.
Vamos adicionar a chave via Paramiko ao arquivo known_hosts:
- Editar
/usr/share/pyshared/duplicity/backends/sshbackend.py:
Adicione antes de keyfilename=None :
self.client.load_host_keys("/root/.ssh/known_hosts")
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
(/ root / é o userdir aqui, isso pode ser diferente para você).
-
Execute um comando de sincronização com Duplicity (onde você usa o host). Agora Paramiko adicionará a impressão digital ssh aos seus known_hosts.
-
Remova todas as edições feitas no seu
sshbackend.pye salve o arquivo.
Você pode verificar isso usando cat /root/.ssh/known_hosts . Você verá [myhost]:2323 ssh-rsa ....