Question

J'écris un script bash qui appelle beaucoup d'autres scripts.
Plusieurs scripts doivent être exécutés comme user_1 plusieurs nations comme user_2.
Les scripts doivent être appelés dans l'ordre stricte. Je commence mon script user_1 et utiliser plusieurs fois su devenir user_2. Ces temps su nécessite un mot de passe donc je dois retaper plusieurs fois. Je voudrais éviter, mais n'a pas su paramètre de mot de passe.
Sudo et d'Expect ne sont pas installés.

Était-ce utile?

La solution 4

J'ai résolu le problème en utilisant ssh. J'ai généré la clé d'authentification pour user_1 et publié à utilisateur2. Mot de passe est nécessaire plus.

ssh -l user_1 hostname  "command_1; command_2"

Autres conseils

  • Faire une fourchette (en utilisant '&') pour user_1 et user_2. Ils doivent communiquer (comme en tant que client-Serwer) en utilisant « fichier de verrouillage » (sémaphores). Par exemple user_1 faire quelque chose et le contrôle user_2 est 'fichier de verrouillage' exist ... tout sommeil boucle

  • Peut-être est stupide, mais vous pouvez utiliser les touches de fin de ssh user@localhost

Si vous arrive d'avoir zsh, je pense que vous pouvez le faire facilement - quelque chose comme:

#!/bin/zsh
coproc user1_script
su user2
do_stuff
echo "your_turn" >&p
read MY_TURN
do_more_stuff
echo "your_turn" >&p
read MY_TURN
...

user1_script:

#!/bin/zsh
read MY_TURN
do_stuff
echo your_turn
read MY_TURN
do_more_stuff
...

Si vous êtes coincé, et zsh, il vaut la peine d'essayer quand même.

Vous pourriez exécuter en tant que root. Cela semble risqué? Pas si vous êtes prudent et précéder chaque commande su et ajouter le nom d'utilisateur comme ceci:

su -c 'script1' user_1 && su -c 'SCRIPT2' user_2

Cela (en supposant que vous commencez en tant que root) changer l'utilisateur de user_1 avant d'exécuter script1 puis revenir à la racine puis changer pour user_2 courir SCRIPT2 .. tout sans demander plusieurs mots de passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top