Je me mets au Python depuis peu et je viens de tomber sur un sacret morceau.
J’aimerai faire en sorte que mon programme Python puisse auto compléter les commande demandant un mot de passe pour le scp afin que je transfère les fichiers simplement
Ca fait 2 jours que je suis à la recherche d’une solution, j’ai essayé plusieurs chose tel que -S, ou l’expect
mais sans résultat…
Salut,
Tu veux faire du scp.
La commande scp est la commande cp en mode ssh.
Plutôt que de jouer avec python (ce qui ets un très bon jeu, là n’est pas le souci), sais tu que pour faire un scp entre un Linux et un autre Linux, il suffit d’échanger des clés .
En gros, Linux01 et Linux02 se connaissent et Linux02 ne demande pas à Linux01 de taper un mot de passe car la clé joue son rôle.
Et pouf, tout fonctionne sans intervention humain.
Très utile pour faire des rsync entre un NAS et des PC clients
Si je ne me suis pas trompé dans l’analyse de ta demande, ton axe de recherche sera alors « connexion ssh sans mot de passe »
Par exemple, si j’ai un accès physique à ta machine, je fourre ta SD dans mon PC Linux et j’ai ton mot de passe.
Aucune commande d’expert de sécurité à taper, tout apparait en clair.
Idem si une personne arrive à passer dans ton Rpi par le réseau, le mot de passe apparait en clair et offre ainsi l’accès à l’autre machine.
Ha je vois, j’avais réussi en Shell du coup je suis passé au Python. Les commandes que Gpapig sont toujours valide ?
J’ai un autre souci depuis que je suis passé à Python, je veux faire un code qui reconnais les erreurs, par exemple si le fichier à transférer n’est pas trouvé je fais un print. Souci j’arrive pas à récupérer l’output de ma commande, du moins avec ce que j’ai trouvé (subprocess) je n’ai que l’output si la commande n’a pas erreur…
Oui parfaitement, je le fait toujours en boucle sur avec un programme shell, en python dans les programme que je vous ai réécrit j’ai oublié de simple cote de chaque coté de la commande mais ça fonctionne
Pour le ssh simple je l’option -p c’est pour un port et « raspberry » n’est pas un port d’après le terminal
Oui peut être comme je l’ai dit que n’y connait pas grand chose je viens de me lancer.
J’ai essayer avec ssh-keygen et ensuit ssh-agent pour ne plus avoir de mdp mais la encore si je relance le raspberry je suis obligé d’entre un passphrase au début…
Si tu veux avoir plus de contenu dans tes messages d’erreur je te propose de passer par une lib’ spécifique plutot que d’utiliser des commandes systèmes :
Ensuite je trouve étonnant de te connecter d’abord en SSH puis de lancer une commande scp depuis cet hôte.
Ne serait il pas plus simple de faire un « get » directement depuis la machine de base?
Edit : je ne sais pas si la libraire que je t’ai mise est plus détaillée, mais l’idée générale est d’utiliser le python en lui même plutot que les commandes système
en fait scp offre deux possibilités:
.transfert scp d un fichier du poste distant vers le poste local (réception) scp pi@192.168.5.87:/home/pi/image.jpg /home/someone/Images
et dans l’autre sens :
.transfert scp d un fichier du poste local vers le poste distant (envoie) scp /home/someone/Images/photo.jpg pi@192.168.5.87:/home/pi