2017-09-27 6 views
0

J'essaie d'ajouter une clé publique à un fichier de clés autorisé sur un serveur distant avec pexpect mais cela ne fonctionne pas. Il semble que la redirection de sortie vers le fichier ne se produit pas, bien qu'il n'y ait pas d'erreurs. Voici mon code:Comment ajouter à un fichier sur un serveur distant avec pexpect

print "DEGUG: === append to authorized keys START ===" 
print "DEBUG: sending echo <local public key> >> /root/.ssh/authorized_keys" 
print "  local public key: " + local_public_key 
child.sendline('echo ' + local_public_key + ' >> /root/.ssh/authorized_keys') 
child.expect(prompt) 
child.expect(prompt) 
child.sendline('echo $?') 
child.expect(prompt) 
ec = child.before.strip() 
print("exit code: >>>>" + str(ec) + "<<<<") 
print "DEGUG: === append to authorized keys END ===" 

Voici la sortie:

DEGUG: === append to authorized keys START === 
DEBUG: sending echo <local public key> >> /root/.ssh/authorized_keys 
    local public key: ssh-rsa 
AAAAB3NzaC1yc2EAAAABIwAAAQEAy408yT80SP2x9rZkR56j4wsbpqUSYOW1uY8Lf4XfJLinbtcpwyyYGJCuNbA30ve1+Lt/AJ2d1VdSAS4Afu1LKucFmj2lN8dqKWsCUBYXXtkUHILVelRTglMGFLTbLJofXYwUXA60UWWilYvWJ2j4HRjHgxUP7i0fYy4ruy5zpspZ8Svr+PMY9UjA3HSnPhFB2ZHkC+9kzexfVCM7nvKw9LekxY0x/BrD5z6D+652sr8A9EOgBsg9A/soL4JMycdWmTBDe16O5f4Db5Qt7oqn3Hbw7lki1XULIvTzyNhUtoiGiQiCbCh7G1ba+IccvfrIaK+kpmugeoaTC4zldXEGbw== 

echo ssh-rsa 
AAAAB3NzaC1yc2EAAAABIwAAAQEAy408yT80SP2x9rZkR56j4wsbpqUSYOW1uY8Lf4XfJLinbtcpwyyYGJCuNbA30ve1+Lt/AJ2d1VdSAS4Afu1LKucFmj2lN8dqKWsCUBYXXtkUHILVelRTglMGFLTbLJofXYwUXA60UWWilYvWJ2j4HRjHgxUP7i0fYy4ruy5zpspZ8Svr+PMY9UjA3HSnPhFB2ZHkC+9kzexfVCM7nvKw9LekxY0x/BrD5z6D+652sr8A9EOgBsg9A/soL4JMycdWmTBDe16O5f4Db5Qt7oqn3Hbw7lki1XULIvTzyNhUtoiGiQiCbCh7G1ba+IccvfrIaK+kpmugeoaTC4zldXEGbw== 
>> /root/.ssh/authorized_keys 
R56j4wsbpqUSYOW1uY8Lf4XfJLinbtcpwyyYGJCuNbA30ve1+Lt/AJ2d1VdSAS4Afu1LKucFmj2lN8dqKWsCUBYXXtkUHILVelRTglMGFLTbLJofXYwUXA60UWWilYvWJ2j4HRjHgxUP7i0fYy4ruy5zpspZ8Svr+PMY9UjA3HSnPhFB2ZHkC+9kzexfVCM7nvKw9LekxY0x/BrD5z6D+652sr8A9EOgBsg9A/soL4JMycdWmTBDe16O5f4Db5Qt7oqn3Hbw7lki1XULIvTzyNhUtoiGiQiCbCh7G1ba+IccvfrIaK+kpmugeoaTC4zldXEGbw== 
ssh-rsa 
AAAAB3NzaC1yc2EAAAABIwAAAQEAy408yT80SP2x9rZkR56j4wsbpqUSYOW1uY8Lf4XfJLinbtcpwyyYGJCuNbA30ve1+Lt/AJ2d1VdSAS4Afu1LKucFmj2lN8dqKWsCUBYXXtkUHILVelRTglMGFLTbLJofXYwUXA60UWWilYvWJ2j4HRjHgxUP7i0fYy4ruy5zpspZ8Svr+PMY9UjA3HSnPhFB2ZHkC+9kzexfVCM7nvKw9LekxY0x/BrD5z6D+652sr8A9EOgBsg9A/soL4JMycdWmTBDe16O5f4Db5Qt7oqn3Hbw7lki1XULIvTzyNhUtoiGiQiCbCh7G1ba+IccvfrIaK+kpmugeoaTC4zldXEGbw== 
[[email protected] ~]# >> /root/.ssh/authorized_keys 
[[email protected] ~]# echo $? 
echo $? 
0 
[[email protected] ~]# exit code: >>>>echo $? 
0 
[[email protected] ~]<<<< 
DEGUG: === append to authorized keys END === 

Quand je vérifie le fichier authorized_keys sur la télécommande, la nouvelle clé n'est pas ajouté. Il semble que la clé soit renvoyée à stdout au lieu d'être écrite dans un fichier. Vous ne savez pas comment résoudre ce problème.

Répondre

1

Apparemment, vous avez oublié d'enlever le caractère de fin \n dans local_public_key. Alors essayez comme ceci:

child.sendline('echo ' + local_public_key.strip() + ' >> /root/.ssh/authorized_keys') 
#          ^^^^^^^^ 
+0

C'était ça ... idiot! ;-) Merci d'avoir signalé cela. – Lidia