Je n'ai pas pu trouver de question décrivant ce scénario spécifique.
J'essaie d'exécuter un script bash très basique pour récupérer la journalisation de plusieurs machines. J'exécute le script localement mais j'ai besoin d'accéder à une machine externe via ssh, ainsi que sudo à un utilisateur privilégié une fois sur cette machine ...
ssh myuser@machine.net
sudo su - privledged_user
cat logs > file.txt
L'exécution de sh -x révèle que bash est bloqué sur la ligne 'ssh'. J'ai donc essayé de le réviser comme suit:
ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
Cela semble également se bloquer indéfiniment. Existe-t-il une meilleure solution à ce problème ?? Je ne vois pas comment contourner l'utilisation de sudo su d'après ce que je peux dire ...
Merci pour toute aide!
Réponses:
La façon dont j'y parviens dans mon environnement actuel est d'exécuter ssh avec l'
-t
indicateur qui force l'allocation tty, puis d'exécuter sudo -u root à l'intérieur, comme suit:J'ai mon compte dans sudoers du côté distant afin qu'aucun mot de passe ne soit requis.
Cet exemple vous montre différentes façons de le faire dans une seule session ssh, y compris l'exécution de plusieurs commandes avec bash ou dans un sous-shell. Notez également que si vous placez le code ci-dessus dans un script exécutable, vous pouvez passer des arguments de ligne de commande ($ 1 et $ 2) à ssh et ceux-ci seront développés puis référencés du côté distant.
la source
Si vous ne voulez pas ou ne pouvez pas empêcher sudo de vous demander le mot de passe, une astuce simple consiste à le lire localement et à le stocker dans une variable locale:
la source
Si sudo est configuré pour autoriser les commandes sans mot de passe, cela devrait faire ce que vous voulez:
ou
selon que vous souhaitez que le
file.txt
fichier soit créé localement ou à distance.Sinon, voici un moyen de transmettre le mot de passe de l'utilisateur distant à
sudo
:la source