1 votes

crontab pour exécuter bash script (commande ssh dedans) ne fonctionne pas

CentOS 5.4

(dans mon fichier script - script.sh)

#!/bin/bash
ssh 192.168.0.1 'iptables -L' > /tmp;

(dans /etc/crontab)

30 21 30 9 * root /bin/bash /script.sh

Si je lance le script dans le terminal, les choses fonctionnent parfaitement. Mais si j'utilise crontab pour l'exécuter, le fichier tmp sera généré, mais il n'y a rien dans le fichier tmp (0k). J'ai déjà lancé ssh agent, donc ssh ne demandera pas de mot de passe. Quel est le problème ? Je vous remercie.

4voto

Chris Points 11

Je vous suggère de toujours définir explicitement toutes les variables nécessaires au début des scripts.

PATH=/bin:/usr/bin:/sbin
MYVAR=whatever

Cela dit, je voudrais

  1. créer une paire de clés privée/publique
  2. définir un mot de passe vide sur la clé privée
  3. mettre la permission 400 sur le fichier de la clé privée
  4. placer la clé publique dans le fichier authorized_keys de l'utilisateur root sur 192.168.0.1

Essayez maintenant la connexion avec

#!/bin/bash
PATH=/usr/bin

ssh -i /myprivatekey -l root 192.168.0.1 '/sbin/iptables -L' > /tmp/output.$$

Edit : J'ai supposé que la commande "iptables" devait être exécutée par root sur le serveur distant. Si ce n'est pas le cas, le paramètre "-l" doit bien sûr être modifié en conséquence.

1voto

jason saldo Points 5036

Les choses qui ne s'exécutent pas à partir de cron mais qui s'exécutent à partir du terminal posent presque toujours un problème en raison de la différence d'environnement. Vous devez utiliser le chemin complet de vos exécutables et définir explicitement toutes les variables d'environnement et les paramètres d'exécution. PATH dont ils ont besoin.

#!/bin/bash
/usr/bin/ssh 192.168.0.1 '/sbin/iptables -L' > /tmp/output.$$

Au fait, vous n'avez pas vraiment votre script dans le répertoire racine, n'est-ce pas ?

También, /tmp est un répertoire qui devrait déjà exister. Vous devez y créer votre sortie sous forme de fichier, comme je l'ai montré.

1voto

mreggen Points 2940

Je ne pense pas que ssh-agent puisse aider dans ce cas car le cronjob n'est pas un sous-processus d'un processus qui a les paramètres de communication de ssh-agent dans son environnement. Vous devrez mettre en place une connexion sans mot de passe pour que cela fonctionne.

Une façon d'obtenir plus d'informations est de modifier votre appel ssh pour qu'il devienne

ssh -vvv 192.168.0.1 'iptables -L' 2>&1 > /tmp/output.$$

pour que 1) ssh produise une sortie de débogage verbeuse sur stderr et 2) stderr soit redirigé avec stdout. Ce fichier output.$$ devrait contenir plus d'informations sur ce qui se passe... je parie, comme je l'ai dit, sur l'absence de perms pour ouvrir votre clé.

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