web-dev-qa-db-fra.com

Comment exécuter une commande SSH à distance une commande sudo sans mot de passe

J'ai un serveur Linux (basé sur Debian) configuré pour autoriser la session SSH à l'utilisateur 'Admin', mais pas la "racine" de l'utilisateur. Ces deux comptes sont liés en quelque sorte parce qu'ils partagent le même mot de passe.

Lors d'une session SSH en tant qu'administrateur, "sudo" est nécessaire pour exécuter des commandes, à moins que je ne passe à la "racine" de l'utilisateur.

J'ai des services sur lesquels j'ai besoin de courir de temps en temps, ou même au démarrage du système. J'utilise actuellement un mécanisme de clé privé/public pour exécuter des commandes à distance sur le serveur. Certaines des commandes sont typées manuellement, d'autres sont des scripts shell que j'exécute. Actuellement, le serveur demande toujours un mot de passe lorsqu'une commande utilise sudo.

Question: Comment la télécommande peut-elle exécuter comme utilisateur 'admin' sans fournir le mot de passe? Est-il possible d'utiliser une clé privée/publique pour satisfaire sudo? Ou peut-être même un moyen de démarrer des scripts shell comme l'utilisateur 'root'?

Est-il même possible d'éviter de devoir taper le mot de passe à l'aide de sudo? Sinon, sont-ils d'autres alternatives pour la situation comme la mienne?

5
izack

vous pouvez dire au sudo de sauter le mot de passe pour une commande.

par exemple. dans /etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

cela me permettez d'utiliser

Sudo -u www-data /bin/rm -rf /var/www/log/upload.*

comme Archemar sans mot de passe.

Noter que

Sudo -u www-data rm -rf /var/www/log/upload.*

ne fonctionnera pas (demandera un mot de passe) comme rm diffère de /bin/rm.

Assurez-vous de modifier /etc/sudoers Utilisation de la commande visudo.

Une fois que vous avez atteint le niveau avancé, vous risquez d'avoir vos propres fichiers sudo dans /etc/sudoers.d.

12
Archemar

Si les comptes sont liés d'une manière ou d'une autre, cela n'a aucun sens pour permettre à SSH pour un et non l'autre. Voici ce que je ferais à la place:

  • activer SSH pour racine, permettant uniquement d'accéder à des touches SSH et non d'un mot de passe
  • créer une nouvelle clé qui sera utilisée uniquement pour votre commande spécifique
  • mettez la clé et la commande que vous devez exécuter dans authorized_keys de racine, de sorte que dès qu'une connexion est faite avec cette clé, la commande est lancée.

Ceci est sécurisé car de cette façon, l'appelant ne peut pas avoir de shell ni exécuter aucune autre commande (même s'il en fournit un).

Vous pouvez voir un exemple ici: https://stackoverflow.com/questions/402615/how-to-raistrict-ssh-utilisateurs-a-a-predfinefine-se-of-commands-after-login = avec le command= Syntaxe. Vous pouvez également faire la même chose en incorporant la commande dans le certificat si vous utilisez des certificats au lieu des clés ou le ferons globalement à l'aide de l'option de configuration ForceCommand

Voir http://larstobi.blogspot.com/2011/01/restrict-ssh-access-aoone-command-but.html Pour un autre exemple (ce qui montre que vous devez prendre en compte Paramètres de votre commande)

1
Patrick Mevzek

Pour ajouter à la réponse d'Archemar, Sudo demande le mot de passe de l'utilisateur exécutant Sudo _, pas l'utilisateur La commande sera exécutée en tant que. Vous dites que les comptes "administrateur" et "racine" sont "liés" et partagent le même mot de passe. Si vous êtes arrivé à cette conclusion sur la base de Sudo Accepter le mot de passe du compte "admin" (et le mot de passe Sudo accepte la modification de la modification du mot de passe "admin 'est modifié), c'est normal Comportement pour Sudo.

0
Aaron