SSH - usando chaves funciona, mas não em um script

2

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?

    
por Garfonzo 29.11.2011 / 01:04

5 respostas

3

No script python, você tentou explicitamente fornecer o local do arquivo de identidade que deseja usar com o sinalizador "-i"?

Ex:

rsync --ignore-existing --delete --stats --progress -rp -e "ssh -i /home/user/.ssh/keyfile -p 1234" [email protected]

    
por 29.11.2011 / 01:33
1

Tente adicionar um novo host ao seu arquivo ~ / .ssh / config, certificando-se de fazer modificações:

Host somehostname 
Hostname 169.1.1.254
User garfonzo
IdentityFile /home/garfonzo/.ssh/id_rsa
PubkeyAuthentication yes
    
por 29.11.2011 / 05:56
0

Se a sua chave tiver uma frase secreta, você precisará fornecer o ~ / ssh-agent.

link

Se você omitiu uma senha para sua chave, siga o adive acima e passe o argumento "-i".

    
por 29.11.2011 / 02:23
0

Seu script python está sendo executado com #!/usr/bin/env python ou você está apenas fazendo um #!/usr/bin/python ou similar. Além disso, você pode tentar remover -e "ssh -p 1234" e apenas usar --port 1234 .

    
por 29.11.2011 / 03:16
0

Verifique seu usuário ... O script parece ser executado como root, enquanto seu teste é feito como seu usuário. Você está usando su ou sudo ou está logando como root? Como o seu roteiro começou? Tem privilégios de root de alguma forma?

    
por 09.12.2011 / 17:19