J'écris un programme C Shell qui fera su
ou sudo
ou ssh
. Ils veulent tous que leur mot de passe soit en entrée de console (le TTY) plutôt qu'en stdin ou en ligne de commande.
Quelqu'un connaît-il une solution?
La configuration sans mot de passe sudo
n'est pas une option.
attendre pourrait être une option, mais ce n'est pas présent sur mon système dépouillé.
Réponses:
Pour sudo, il existe une option -S pour accepter le mot de passe de l'entrée standard. Voici l'entrée de l'homme:
Cela vous permettra d'exécuter une commande comme:
En ce qui concerne ssh, j'ai fait de nombreuses tentatives pour automatiser / script son utilisation sans succès. Il ne semble pas y avoir de moyen intégré de passer le mot de passe dans la commande sans invite. Comme d'autres l'ont mentionné, l' utilitaire " expect " semble avoir pour but de résoudre ce dilemme, mais finalement, la configuration de l'autorisation de clé privée correcte est la bonne façon de procéder pour tenter d'automatiser cela.
la source
nonroot:[email protected]
? Bien sûr, les choses sont beaucoup plus faciles si vous utilisez l'authentification par clé et le gestionnaire de clés.'cat pw | sudo -S <command>
, et plus tardrm pw
.nc -l 12345 | sudo -S <command>
. Du côté de l'envoi;echo myPassord | nc <target> 12345
. Cela déplace simplement le problème de gestion des mots de passe, mais vraisemblablement vers une console principale où vous avez plus d'options.J'ai écrit un Applescript qui demande un mot de passe via une boîte de dialogue, puis construit une commande bash personnalisée, comme ceci:
Je ne sais pas si cela aide.
Ce serait bien si sudo acceptait un mot de passe pré-chiffré, afin que je puisse le chiffrer dans mon script et ne pas me soucier de faire écho aux mots de passe en texte clair. Cependant, cela fonctionne pour moi et ma situation.
la source
Pour
ssh
vous pouvez utilisersshpass
:sshpass -p yourpassphrase ssh user@host
.Il vous suffit de télécharger d'abord sshpass :)
la source
J'ai:
Travaille pour moi.
la source
Pour sudo, vous pouvez également le faire:
la source
La solution habituelle à ce problème consiste à configurer une application d'assistance qui effectue la tâche nécessitant un accès superutilisateur: http://en.wikipedia.org/wiki/Setuid
Sudo n'est pas destiné à être utilisé hors ligne.
Edition ultérieure: SSH peut être utilisé avec l'authentification par clé privée-publique. Si la clé privée n'a pas de phrase de passe, ssh peut être utilisé sans demander de mot de passe.
la source
Cela peut être fait en configurant des clés publiques / privées sur les hôtes cibles auxquels vous vous connectez. La première étape serait de générer une clé ssh pour l'utilisateur exécutant le script sur l'hôte local, en exécutant:
Entrez ensuite un mot de passe vide. Après cela, copiez votre clé ssh sur l'hôte cible auquel vous vous connecterez.
Après avoir enregistré les clés ssh, vous pourrez effectuer un silence à
ssh remote_user@other_host
partir de votre hôte local.la source
Peut-être pouvez-vous utiliser une
expect
commande?:Cette commande donne le mot de passe automatiquement.
la source
Quand il n'y a pas de meilleur choix (comme suggéré par d'autres), alors man socat peut vous aider:
Toute la complexité pty, setsid, ctty est nécessaire et, bien que vous n'ayez pas besoin de dormir aussi longtemps, vous aurez besoin de dormir. L'option echo = 0 vaut également le coup d'œil, tout comme le passage de la commande remote sur la ligne de commande de ssh.
la source
su
également.su
n'a pas d'option -S (stdin).Jetez un œil à l'
expect
utilitaire Linux.Il vous permet d'envoyer la sortie à stdio sur la base d'une simple correspondance de modèle sur stdin.
la source
Configurez SSH pour l'authentification par clé publique, sans aucune phrase secrète sur la clé. Des tas de guides sur le net. Vous n'aurez alors pas besoin d'un mot de passe pour vous connecter. Vous pouvez ensuite limiter les connexions pour une clé en fonction du nom d'hôte du client. Fournit une sécurité raisonnable et est idéal pour les connexions automatisées.
la source
la source
J'ai eu le même problème. script de dialogue pour créer un répertoire sur un PC distant. le dialogue avec ssh est facile. J'utilise sshpass (précédemment installé).
salutations d'Allemagne
Titus
la source
En s'appuyant sur la réponse de @ Jahid, cela a fonctionné pour moi sur macOS 10.13:
la source
une meilleure
sshpass
alternative est:passh
https://github.com/clarkwang/passhConnectez-vous à un serveur distant
Exécutez une commande sur un serveur distant
autres méthodes pour transmettre le mot de passe
ici, j'ai expliqué pourquoi il est meilleur que sshpass, et d'autres solutions.
la source
Cela fonctionne.
la source
su
, qui lit le mot de passe à partir de stdio à la place.Coder en dur un mot de passe dans un script expect équivaut à avoir un sudo sans mot de passe, en fait pire, puisque sudo enregistre au moins ses commandes.
la source
Une façon serait d'utiliser l'option read -s .. de cette façon, les caractères du mot de passe ne sont pas renvoyés à l'écran. J'ai écrit un petit script pour certains cas d'utilisation et vous pouvez le voir dans mon blog: http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/
la source
UTILISATION:
Exemple:
J'espère que ça aide..
la source
Vous pouvez fournir un mot de passe comme paramètre pour attendre le script.
la source
J'espère que c'est utile.
la source