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.py
e salve o arquivo.
Você pode verificar isso usando cat /root/.ssh/known_hosts
. Você verá [myhost]:2323 ssh-rsa ....