Question

J'écris un programme C-Shell qui exécutera su ou sudo ou ssh . Ils veulent tous leurs mots de passe dans la console (le téléscripteur) plutôt que stdin ou la ligne de commande.

Quelqu'un connaît-il une solution?

La configuration de sudo sans mot de passe n'est pas une option.

pourrait être une option, mais c'est pas présent sur mon système dépouillé.

Était-ce utile?

La solution

Pour sudo, il existe une option -S permettant d’accepter le mot de passe de l’entrée standard. Voici l'entrée homme:

    -S          The -S (stdin) option causes sudo to read the password from
                the standard input instead of the terminal device.

Cela vous permettra d'exécuter une commande telle que:

echo myPassword | sudo -S ls /tmp

En ce qui concerne ssh, j’ai tenté à plusieurs reprises d’automatiser / d’utiliser son script sans succès. Il ne semble pas y avoir de moyen de passer le mot de passe dans la commande sans y être invité. Comme d'autres l'ont déjà mentionné, le " expect " Cet utilitaire semble viser à résoudre ce dilemme, mais au final, configurer la bonne autorisation de clé privée est la bonne façon de procéder pour tenter d'automatiser ce problème.

Autres conseils

J'ai écrit un script Applescript qui demande un mot de passe via une boîte de dialogue, puis construit une commande personnalisée bash, comme ceci:

echo <password> | sudo -S <command>

Je ne suis pas sûr que cela aide.

Ce serait bien si sudo acceptait un mot de passe pré-chiffré, afin que je puisse le chiffrer dans mon script sans m'inquiéter de l'écho des mots de passe en clair. Cependant, cela fonctionne pour moi et ma situation.

Pour ssh , vous pouvez utiliser sshpass : sshpass -p votrepassphrase ssh utilisateur @ hôte .

Il vous suffit de télécharger sshpass en premier:)

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server

j'ai:

ssh user@host bash -c "echo mypass | sudo -S mycommand"

Fonctionne pour moi.

Ceci peut être effectué en configurant des clés publiques / privées sur les hôtes cibles auxquels vous vous connecterez. La première étape consisterait à générer une clé ssh pour l’utilisateur exécutant le script sur l’hôte local, en exécutant:

ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y

Ensuite, entrez un mot de passe vide. Ensuite, copiez votre clé ssh sur l’hôte cible auquel vous allez vous connecter.

ssh-copy-id <remote_user>@<other_host>
remote_user@other_host's password: <Enter remote user's password here>

Après avoir enregistré les clés ssh, vous pourrez exécuter un utilisateur_sant distant ssh @ other_host silencieux à partir de votre hôte local.

La solution habituelle à ce problème consiste à configurer une application d'assistance effectuant la tâche nécessitant un accès superutilisateur: http://fr.wikipedia.org/wiki/Setuid

Sudo n'est pas conçu pour être utilisé hors connexion.

Édition ultérieure: SSH peut être utilisé avec l'authentification par clé privée-publique. Si la clé privée ne comporte pas de phrase secrète, ssh peut être utilisé sans demander de mot de passe.

Pour sudo, vous pouvez aussi le faire:

sudo -S <<< "password" command

Lorsqu'il n'y a pas de meilleur choix (comme suggéré par d'autres), alors socat peut vous aider:

   (sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
   socat - EXEC:'ssh -l user server',pty,setsid,ctty

          EXEC’utes an ssh session to server. Uses a pty for communication
          between socat and ssh, makes it ssh’s  controlling  tty  (ctty),
          and makes this pty the owner of a new process group (setsid), so
          ssh accepts the password from socat.

Toute la complexité de pty, setsid, ctty est nécessaire et, même si vous n’avez peut-être pas besoin de dormir aussi longtemps, vous devrez dormir. L'option echo = 0 vaut également le coup d'oeil, tout comme le fait de passer la commande à distance sur la ligne de commande de ssh.

Peut-être pouvez-vous utiliser une commande expect ?:

expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact

Cette commande donne automatiquement le mot de passe.

Jetez un coup d'œil à expect de Linux.

Il vous permet d’envoyer une sortie à stdio sur la base d’une correspondance de modèle simple sur stdin.

Configurez SSH pour l’authentification de clé publique, sans passe-phrase sur la clé. Charges de guides sur le net. Vous n'aurez pas besoin d'un mot de passe pour vous connecter alors. Vous pouvez ensuite limiter les connexions pour une clé en fonction du nom d'hôte du client. Fournit une sécurité raisonnable et convient parfaitement aux connexions automatisées.

ssh -t -t me@myserver.io << EOF
echo SOMEPASSWORD | sudo -S do something
sudo do something else
exit
EOF

J'ai eu le même problème. script de dialogue pour créer un répertoire sur un PC distant. dialoguer avec ssh est facile. J'utilise sshpass (précédemment installé).

   dialog --inputbox "Enter IP" 8 78 2> /tmp/ip

   IP=$(cat /tmp/ip)


   dialog --inputbox "Please enter username" 8 78 2> /tmp/user

   US=$(cat /tmp/user)


   dialog --passwordbox "enter password for \"$US\" 8 78 2> /tmp/pass

   PASSWORD = $(cat /tmp/pass)


   sshpass -p "$PASSWORD" ssh $US@$IP mkdir -p /home/$US/TARGET-FOLDER


   rm /tmp/ip

   rm /tmp/user

   rm /tmp/pass

salutations de l'Allemagne

titus

UTILISATION:

echo password | sudo command

Exemple:

echo password | sudo apt-get update; whoami

J'espère que ça vous aidera.

S'appuyant sur la réponse de @ Jahid, cela a fonctionné pour moi sur macOS 10.13:

ssh <remote_username>@<remote_server> sudo -S <<< <remote_password> cat /etc/sudoers

Vous pouvez fournir un mot de passe en tant que paramètre pour l'attente du script.

echo <password> | su -c <command> <user> 

Cela fonctionne.

Coder en dur un mot de passe dans un script attendu équivaut à avoir un sudo sans mot de passe, voire pire, puisque sudo enregistre au moins ses commandes.

Une solution consisterait à utiliser l'option read -s. Ainsi, 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 sur mon blog: http://www.datauniv.com/ blogs / 2013/02/21 / script-a-quick-little-expect /

su -c "Command" < "Password"

J'espère que cela vous sera utile.

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