Eu estou meio confuso, eu configurei chaves públicas entre dois servidores e isso funciona muito bem, mais ou menos. Só funciona se eu ssh manualmente a partir de um terminal. Quando coloco o comando ssh em um script python, ele me pede uma senha para entrar. O script está usando o rsync para sincronizar um diretório de um servidor para outro.
comando manual ssh que funciona, sem prompt de senha, login automático:
ssh -p 1234 [email protected]
No script Python:
rsync --ignore-existing --delete --stats --progress -rp -e "ssh -p 1234" [email protected]:/directory/ /other/directory/
O que dá?
(obviamente, os detalhes do ssh são falsos)
EDIT por solicitação
@Zoredache - Eu coloquei -vv
no script (e o -i para especificar onde a chave está, isso realmente me aproximou um passo) e mostrou um grupo interessante de linhas:
debug1: Host '[123.456.789.123]:1234' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:1
debug2: bits set: 515/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/garfonzo/.ssh/id_dsa.pub (0x7f125c489bd0)
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/garfonzo/.ssh/id_dsa.pub
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-dss blen 434
debug2: input_userauth_pk_ok: fp 81:02:20:f0:62:16:30:15:4d:0b:2e:91:7c:ba:5c:05
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '/home/garfonzo/.ssh/id_dsa.pub':
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
Parece que, não que ele saiba onde minha chave está armazenada no lado do cliente (provavelmente o problema anterior) está pedindo a frase secreta. O problema é que eu não especifiquei uma senha, deixei em branco. Estranho ... Talvez eu crie um novo conjunto de chaves?
EDIT 2
@ckliborn - ótima ideia! Eu acho que isso pode ter mostrado qual é o meu problema. A única linha que eu acho que aponta para o meu problema é esta:
debug1: Found key in /home/garfonzo/.ssh/known_hosts:1
Considerando que, quando executado através do script, a mesma linha é:
debug1: Found key in /root/.ssh/known_hosts:1
Então, o cliente está procurando no local errado pela chave. Quando eu especificar o local da chave, ele pede uma frase secreta, que eu não defini. Arg!
Confuso?