web-dev-qa-db-fra.com

Utiliser ssh dans le script cron

J'ai un problème pour exécuter un fichier ssh de crontab sur un dispositif de stockage Fujitsu DX200.

Lors de l'exécution de la commande à partir du terminal, tout fonctionne normalement avec des clés RSA, mais lorsque j'intègre la commande dans un script et que je l'exécute à partir de cron, il échoue avec "Le pseudo-terminal ne sera pas attribué car stdin n'est pas un terminal".

La commande est ssh user@dx200 "show performance -type Host-io"

Selon de nombreux articles sur le net, ajouter un certain nombre de -t comme argument de ssh devrait forcer l'allocation de PTY. Sur RedHat, où le script a été développé, cela fonctionne en ajoutant -t -t -t (ou -ttt), mais ce n'est pas le cas lors de l'exécution sur Ubuntu.

L'utilisation de ssh -T (Désactiver l'allocation de pseudo-tty) provoque l'échec de la connexion à dx200 avec l'option "La connexion FUJITSU Storage ETERNUS est requise ...", autrement dit, ne vous connectez pas avec la clé RSA.

D'autres solutions du réseau, utilisant des variantes de ssh ... /bin/bash <<EOF ..., ne sont pas possibles car nous ne pouvons pas lancer de shell sur le dispositif de stockage.

Des idées sur la façon de contourner ce problème?

2
Soren A

Répondre à ma propre question ...

L'ajout d'un argument supplémentaire -t à ssh a résolu le problème.

La commande ressemble maintenant à ssh -t -t -t -t user@dx200 ...... (-tttt devrait faire de même).

La page de manuel sur ssh dit ceci à propos de -t:

 -t      Force pseudo-tty allocation.  This can be used to execute arbi-
         trary screen-based programs on a remote machine, which can be
         very useful, e.g. when implementing menu services.  Multiple -t
         options force tty allocation, even if ssh has no local tty.

Mais rien sur le nombre de 'Multiple' ou sur le code ssh qui régit le nombre d'options -t requises.

1
Soren A