3 votes

Comment exécuter un script Perl script dans un environnement Unix à partir de Windows ?

Un peu d'histoire :

J'essaie d'interagir avec des données que j'ai enregistrées dans des fichiers Perl à l'aide d'un programme que j'ai écrit en C en utilisant l'API Win32. Le programme C est sous Windows et les fichiers Perl sont accessibles via un lecteur réseau mappé dans un environnement Unix. J'utilise perlembed et je parviens à extraire les données que je souhaite des fichiers Perl en utilisant l'interpréteur Perl intégré et les sous-programmes Perl appelés à partir du langage C.

Le problème :

Je dois exécuter des scripts Perl scripts qui sont déjà en place du côté Unix. La fonction de ces scripts est de vérifier la syntaxe des fichiers Perl et de les enregistrer dans un système de contrôle de révision que j'utilise. Les scripts appellent des commandes spécifiques à Unix comme pwd qui font que le programme C s'interrompt lorsque j'utilise system(perl perl_file) . Il y a pas mal de code Perl hérité, donc je ne pense pas pouvoir modifier les scripts de vérification Perl scripts qui doivent être appelés.

Ma question :

Comment puis-je exécuter un script Perl script dans un environnement Unix à partir du programme C du côté Windows ? Je suis tombé sur este question suggérant l'utilisation de cygwin mais il semble que ce ne soit qu'un autre environnement entre Unix et Windows. J'ai pensé qu'il pourrait y avoir un moyen de permettre au programme C d'utiliser un Shell C dans le lecteur réseau mappé pour exécuter le Shell Perl, mais je n'ai trouvé aucun exemple de cela nulle part. Ou peut-être pourrais-je demander à l'interpréteur Perl de l'environnement Unix d'exécuter le programme (en utilisant la ligne shebang) ? J'espère que ce n'est pas une question stupide. Je viens de faire tellement de travail pour pouvoir manipuler les données Unix Perl du côté Windows et c'est frustrant de ne pas pouvoir terminer ma tâche parce que je ne peux pas exécuter un Shell Perl.

Merci de votre attention !

3voto

Barton Chittenden Points 1902

Si la machine Unix utilise un serveur ssh, vous pouvez créer une paire de clés publiques et privées sur la machine Windows, et ajouter la clé publique au fichier $HOME/.ssh/authorized_keys sur la machine Unix. Cela devrait permettre à votre programme Windows d'exécuter des commandes ssh sans saisir de mot de passe.

À ce stade, vous pouvez faire quelque chose comme ceci dans le programme C :

system("ssh user@host 'perl /path/to/script.pl'");

Je laisse de côté un certain nombre de détails... vous devrez faire attention à la sécurité du compte Windows qui appelle le fichier perl ; afin d'exécuter le script sans entrer le moindre mot de passe, vous devrez laisser le mot de passe de la clé ssh vide, mais cela signifie que vous devez verrouiller la clé privée afin que personne d'autre n'y ait accès en lecture, sinon Eve exécutera un code perl arbitraire sur votre machine Unix, et ce n'est jamais une bonne chose.

Pour un client SSH Windows, je recommande CopSSH ; c'est l'un des nombreux ports Windows d'OpenSSH ; il gère la gestion des paires de clés ssh de manière plus rationnelle que les autres ports que j'ai utilisés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X