2012-07-31 5 views
0

J'ai un script shell sur ma machine locale et je dois exécuter ce script shell sur des serveurs distants. J'ai fait quelques étapes comme suit:Comment exécuter un script shell local sur des serveurs distants?

  1. Clé SSH appariée de la machine locale et du serveur distant;
  2. ssh [email protected] 'bash - s' < user_add.sh;

Je reçois une erreur:

standard in must be a tty 
: command not found 
bash: line 4: useradd: command not found 
Usage: /etc/init.d/vsftpd {start|stop|restart|condrestart|status} 
Only root can do that. 
chmod: cannot access `/102/prsuser\r': Permission denied 
mkdir: cannot create directory `/102/prov/\r': Permission denied 
bash: line 8: useradd: command not found 
Only root can do that. 
chmod: cannot access `/102/prov/PROV_LIS_RESP_DIR\r': Permission denied 
chown: cannot access `/102/prov/\r': Permission denied 
bash: line 12: /etc/vsftpd/chroot_list: Permission denied 

login root ne peut se faire normalement, nous pouvons vous connecter en tant que root en passant de compte utilisateur normal par su - command.

Donc, voici mon doute, comment exécuter le script en tant que root sur le serveur distant et quel script utilisé pour changer le compte root au point de départ dans mon script (user_add.sh)?

+0

Voulez-vous interagir avec 'user_add.sh' pendant son exécution? Parce que cela ne fonctionnera pas car 'stdin' a déjà été redirigé. – Thor

Répondre

0

Vous pouvez modifier user_add.sh afin qu'il puisse exécuter des commandes avec un utilisateur qui a des privilèges root:

su $ROOT_USER -c "command arg1 arg2" 
+0

Le script est local; cela n'aide pas. –

+0

En fait, le script 'user_add.sh' devrait être modifié. local ou distant, le script exécute des commandes nécessitant un privilège root. – aayoubi

0

Vous pouvez utiliser sudo au lieu de su (et définir toutes les commandes que vous devez utiliser comme utilisateur le fichier sudoers)

Vous pouvez également activer le compte root. En remarque, le compte n'a pas nécessairement besoin d'être nommé "root", vous pouvez en fait créer un nouvel utilisateur (nommé quelquechose), puis éditer le fichier passwd et affecter une valeur d'uid à 0 à ce compte.

0

Eh bien, il est un peu étrange, ce que vous essayez d'atteindre, mais vous pouvez le faire:

ssh [email protected] sudo -S < user_add.sh 

Les commandes qui sont user_add.sh seront interprétées à hostname et exécuter dans sudo. L'utilisateur user doit avoir une entrée correspondante au /etc/sudoers au hostname (avec l'instruction NOPASSWD).

Si vous ne pouvez pas ajouter NOPASSWD vous devez exécuter la commande de cette façon:

(echo PASSWORD; cat user_add.sh) | ssh [email protected] 

Au lieu de MOT DE PASSE vous devez écrire le mot de passe user à hostname.

Si votre sudo ne pas ajouter /sbin-PATH automatiquement, vous devez le faire manuellement:

(echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \ 
| ssh [email protected] 

Et la dernière chose. J'ai noté que vous avez \r symboles dans votre script (édité sur Windows?). Mieux les supprimer:

(echo PASSWORD; echo 'PATH=/sbin:/usr/sbin:$PATH'; cat user_add.sh) \ 
| tr -d '\r' \ 
| ssh [email protected] 
Questions connexes