web-dev-qa-db-fra.com

Comment passer le mot de passe à su/Sudo/ssh sans remplacer le TTY?

J'écris un programme en C shell qui fera su ou Sudo ou ssh. Ils veulent tous que leurs mots de passe soient saisis dans la console (TTY) plutôt que stdin ou la ligne de commande.

Est-ce que quelqu'un connaît une solution?

La configuration de Sudo sans mot de passe n’est pas une option.

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

134
n-alexander

Pour Sudo, l'option -S permet d'accepter le mot de passe à partir 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é à maintes reprises d’automatiser/d’écrire son utilisation sans succès. Il ne semble pas y avoir de méthode intégrée pour passer le mot de passe dans la commande sans y être invité. Comme d'autres l'ont déjà mentionné, l'utilitaire " expect " semble avoir pour objectif de résoudre ce dilemme mais, en fin de compte, la configuration de l'autorisation de clé privée appropriée est la meilleure solution pour automatiser ce problème.

196
Jesse Webb

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.

34
mlambie

Pour ssh, vous pouvez utiliser sshpass: sshpass -p yourpassphrase ssh user@Host.

Vous devez juste télécharger sshpass d’abord :)

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

J'ai:

ssh user@Host bash -c "echo mypass | Sudo -S mycommand"

Travaille pour moi.

11
David Dawson

La solution habituelle à ce problème consiste à configurer une application auxiliaire exécutant la tâche nécessitant un accès superutilisateur: http://en.wikipedia.org/wiki/Setuid

Sudo n'est pas destiné à être utilisé hors ligne.

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

9
diciu

Cela peut être fait 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 qui exécute 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

Puis entrez un mot de passe vide. Après cela, 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 ssh remote_user@other_Host silencieux à partir de votre hôte local.

9
Byob

Pour Sudo, vous pouvez aussi le faire:

Sudo -S <<< "password" command
9
Jahid

Jetez un coup d'œil à l'utilitaire expect linux.

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

5
Marko

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 pas besoin de dormir aussi longtemps, vous devrez dormir. L'option echo = 0 mérite également d'être examinée, tout comme le fait de passer la commande à distance sur la ligne de commande de ssh.

5
Martin Dorey

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

expect -c 'spawn ssh [email protected];expect password;send "your-password\n";interact

Cette commande donne le mot de passe automatiquement.

4
adhown

Configurez SSH pour l'authentification par clé publique, sans phrase secrète 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 est idéal pour les connexions automatisées.

1
Chris Ellis
ssh -t -t [email protected] << EOF
echo SOMEPASSWORD | Sudo -S do something
Sudo do something else
exit
EOF
1
Ed Bishop

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

0
Marko

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
0
JS.

J'ai eu le même problème. Le script de dialogue permettant de créer un répertoire sur un PC distant 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

0
titus

UTILISATION:

echo password | Sudo command

Exemple: 

echo password | Sudo apt-get update; whoami

J'espère que ça aide..

0
Sarat Chandra